TODO: Uppdatera map införande av aggregeringsplattform
Mule flödena är implementerade mha Mule Studio och återges nedan som skärmdumpar från verktyget.
Not: I gällande version av aggregeringplatttformen, v1.1.0, är cache-funktionalitet inte implementerad. Dock är implementationen designad för att kunna införa cachning i en framtida version på ett kostnadseffektivt sätt.
Tillgång till källkoden
Se Instruktioner för utvecklare.
aggregating-service
aggregating-service är en generisk mönster-implementation av en aggregerande tjänst. Den kan anpassas för specifika aggregerande tjänsters behovs på tre ställen:
- Create Query Object
Omvandlar inkommande tjänstespecifika anrop och skapar ett generiskt Query Object som resten av tjänsten använder sig av. - Request List Transformer
Filtrerar och omvandlar svar från sökning i Engagemangs Index (via tjänsten findContent()) till anrop till underliggande källsystem via för tjänsten specifika tjänstekontrakt - Response List Transformer
Sätter samman ett tjänstespecifikt aggregerat svar baserat på delsvaren som returnerats från källsystemen.
process-notification-service
Mekanismer
TODO: Beskriv hantering timeouter och cachning samt konfigurerbara parametrer för detta:
# Default timeout for synchronous services SERVICE_TIMEOUT_MS= 4000 AGGREGATE_TIMEOUT_MS= 4500 AGGREGATED_SERVICE_TIMEOUT_MS= 5000 # Cache properties CACHE_MAX_ENTRIES= 1000 CACHE_TTL_MS= 5000 CACHE_EXPIRATION_INTERVAL_MS= 1000 |
Tjänstespecifika implementationer anges enligt:
# POJO implementations of the agp-api QUERY_OBJECT_FACTORY_IMPL=se.skltp.aggregatingservices.riv.crm.requeststatus.getrequestactivities.QueryObjectFactoryImpl REQUEST_LIST_FACTORY_IMPL=se.skltp.aggregatingservices.riv.crm.requeststatus.getrequestactivities.RequestListFactoryImpl RESPONSE_LIST_FACTORY_IMPL=se.skltp.aggregatingservices.riv.crm.requeststatus.getrequestactivities.ResponseListFactoryImpl |
Meddelandemappningar
I detta kapitel beskrivs de mappningar som behöver göras mellan meddelanden i respektive användningsfall.
TODO: Rensa upp och beskriv utgående från aggregeringsplattformen!
Konsument anropar aggregerande tjänst
Tre mappningar behövar göras för detta användningsfall, se tillhörande sekvensdiagram för överblick:
- Mappning AggregatedGetSubjectOfCareSchedule-request till FindContent-request
- Mappning FindContent-response till GetSubjectOfCareSchedule-request
- Mappning GetSubjectOfCareSchedule-response till AggregatedGetSubjectOfCareSchedule-response
De tre mappningarna implementeras av respektive transformeringklass:
- se.skl.tp.at.tidbokning.engagemangsindex.FindContentRequestTransformer
- se.skl.tp.at.tidbokning.tidbokning.TidbokningRequestTransformer
- se.skl.tp.at.tidbokning.tidbokning.TidbokningResponseTransformer
Variabler som används i mappningarna nedan är prefixade med id'n för tillhörande tjänst:
- at: Variabel för aggregeringstjänsten GetSubjectOfCareAggregatedSchedule
- ei: Variebel för engagemangsindex tjänsten FindContent
- ks: Variable för källsystemens tjänst GetSubjectOfCareSchedule
Mappning AggregatedGetSubjectOfCareSchedule-request till FindContent-request
GetSubjectOfCareAggregatedSchedule in-parametrar:
- at.in.logicalAdress = hsa-id för aggr tjänst
- at.in.actor = SUBJECT_OF_CARE eller SUBJECT_OF_CARE_AGENT
- at.in.subject_of_care = personnummer för patienten i fråga
FindContent in-parametrar mappas enligt:
- ei.in.logicalAdress = hsa-id för nationellt EI
- ei.in.registeredResidentIdentification = at.in.subject_of_care
ei.in.serviceDomain = "riv:crm:scheduling"
Not: Övriga element i FindContent requestet utelämnas och antas ge wildcard-funktionelitet, t ex Categorization och MostRecentChange
Kommentar av Johan Eltes:
Vi kanske skulle speca att en aggregerande tjänst kan parameteriseras (konfigureras) med ett datum för MostRecentChange och för antal dagar i cachen. Till exempel kanske tidbokningar i dåtid inte är intressant, mer än någon månad tillbaka...
Svar: Magnus Larsson:
Låter rimligt, låter kommentaren stå kvar så får vi se var den kommer in....
Mappning FindContent-response till GetSubjectOfCareSchedule-request
FindContent ut-parametrar:
- ei.ut.engagement-list, ett element i listan per logical-address som har tidbokningsinfo för patienten i fråga
Not: Istället för att anropa GetBookingDetail en gång per bokning så anropas GetSubjectOfCareSchedule en gång per logical-address.
Finns det två eller fler bokningar för en patient på en och samma logical-address så innebär det färre anrop till källsystemet, dvs en prestandavinst och lägre last på källsystemen.
GetSubjectOfCareSchedule in-parametrar mappas enligt:
- ks.in.logicalAdress = ei.ut.engagement-list.row.logicalAddress
- ks.in.actor = at.in.actor
- ks.in.healthcare_facility = ei.ut.engagement-list.row.logicalAddress
- ks.in.subject_of_care = ei.ut.engagement-list.row.registeredResidentIdentification
Mappning GetSubjectOfCareSchedule-response till AggregatedGetSubjectOfCareSchedule-response
GetSubjectOfCareSchedule ut-parametrar:
- ks.ut.timeSlotDetail-list, ett element in listan per bokning för avsedd logical-address för patienten i fråga
Svaren från respektive logical-address läggs samman till ett aggregerat svar.
GetSubjectOfCareAggregatedSchedule ut-parametrar mappas enligt:
- ks.ut.timeSlotDetail-list, summan av alla inkomna svar från källsystemen.
Engagemangsindex uppdaterar aggregerande tjänst
TBD
Rensning av cache
TBD