This is an old revision of the document!
Table of Contents
Fejlhåndtering
Hvis der opstår en fejl ved behandling af en forespørgsel vil der blive returneret et fejldokument i stedet for det forventede svar, og den forretningsmæssige del af transaktionen vil blive rullet tilbage. Dvs. at der f.eks. ikke oprettes, opdateres eller seponeres på nogen af de medsendte medicinkort eller lægemiddelordinationer, heller ikke selv om der f.eks. forsøges at oprette tre lægemiddelordinationer i samme kald og den tredje fejler. Kaldet vil dog blive logget.
Fejl returneres i XML ifølge ”Den Gode Webservice”. Der medsendes en fejlkode. De mulige fejlkoder er opdelt i følgende intervaller:
| Interval | Betydning | Eksempel |
|---|---|---|
| 1 - 1000 | Typisk brugerfejl eller fejl forårsaget af afsendersystemet. | 2: Cpr-nr 1111111117 (PersonIdentifier) findes ikke |
| 1000 - 3999 | Applikationsfejl | 3000: Intern server fejl |
| 4000 - 9999 | Valideringsfejl, rolle-rettighedsfejl m.v. | 4003: “SOSI xml fejl: ID card is not valid in time. The card has to be less than 9 hours old 4200: Ingen roller passer på brugeren |
| 10000 - 10999 | Udvidet valideringsfejl, dvs. fejl som kan ignoreres | 10001: Ej muligt at seponere lægemiddelordination 31237621536712 da der findes en åben recept |
En liste af fejl FMK returnerer findes i afsnittet Fejlkoder og -tekster.
Udover en fejlkode returneres en fejl-tekst og en liste af key-value par der uddyber specifikke værdier for fejlen (values) samt hvilken del af datamodellen denne værdi tilhører (keys). En key vil typisk stemme overens med navnet på et af de xml elementer i response-dokumentet som fejlen knytter sig til.
Nedenfor er der et eksempel på hvordan body-delen af et fejldokument kan se ud (de er indsat nogle få linieskift i teksten herunder).
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:medcom="http://www.medcom.dk/dgws/2006/04/dgws-1.0.xsd" xmlns:medicinecard20120601="http://www.dkma.dk/medicinecard/xml.schema/2012/06/01" id="Envelope"> <soapenv:Header> <wsse:Security> <wsu:Timestamp> <wsu:Created>2012-09-25T19:06:51Z</wsu:Created> </wsu:Timestamp> </wsse:Security> <medcom:Header> <medcom:SecurityLevel>1</medcom:SecurityLevel> <medcom:Linking> <medcom:FlowID>flowId</medcom:FlowID> <medcom:MessageID>AAABOf7THJIabqVHn2+kY1NPU0k=</medcom:MessageID> <medcom:InResponseToMessageID>AAABOf7TGLxiFKiBQ3eIEVNPU0k= </medcom:InResponseToMessageID> </medcom:Linking> </medcom:Header> </soapenv:Header> <soapenv:Body> <soapenv:Fault> <faultcode>Server</faultcode> <detail> <medcom:FaultCode>3</medcom:FaultCode> <medicinecard20120601:FaultText>Medicinkortet 2603558084 findes ikke i version 999</medicinecard20120601:FaultText> <medicinecard20120601:FaultDetails> <medicinecard20120601:KeyValueSet> <medicinecard20120601:Key>MedicineCardVersion</medicinecard20120601:Key> <medicinecard20120601:Value>999</medicinecard20120601:Value> </medicinecard20120601:KeyValueSet> <medicinecard20120601:KeyValueSet> <medicinecard20120601:Key>PersonIdentifier</medicinecard20120601:Key> <medicinecard20120601:Value>2603558084</medicinecard20120601:Value> </medicinecard20120601:KeyValueSet> </medicinecard20120601:FaultDetails> </detail> <faultstring>Medicinkortet 2603558084 findes ikke i version 999</faultstring> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>
Udvidet validering
Udvidet validering er et nyt koncept i FMK, der understøtter validering, som muligvis ikke er relevant for alle klienter. Nogle klienter kan vælge helt at fravælge en udvidet validering, mens andre klienter kan vælge først at vise fejlen for en bruger og derefter, hvis brugeren ønsker det, prøve igen hvor valideringen er fravalgt. Udvidet validering returnerer fejl der ligger i intervallet 10000-10999. Et eksempel på en udvidet validering der kan fravælges, er validering der sikrer at man ikke kan seponere lægemiddelordinationer med åbne recepter.
Klienter som anvender snitflader ældre end 1.4.4.E2 skal som udgangspunkt angive om de understøtter udvidet validering, dvs. om hvorvidt de er i stand til at håndtere valideringsfejl fra udvidet validering. Fra og med 1.4.4.E2 skal klienter kunne håndtere fejl fra udvidet validering.
En klient angiver at den kan håndtere udvidet validering i xml elementet ModificationMetadata med strengen “Extended validation supported”. ModificationMetadata findes på xml-elementer der på en eller anden måde modificerer data.
Eksempel på et request i 1.4.4 der seponerer 3 lægemiddelordinationer og samtidig angiver at udvidet validering er understøttet
<WithdrawDrugMedicationRequest> <PersonIdentifier>1111111118</PersonIdentifier> <MedicineCardVersion>1341404077657004001</MedicineCardVersion> <WithdrawnBy> <AuthorisedHealthcareProfessional> <AuthorisationIdentifier>2Q5TK</AuthorisationIdentifier> <Name>Tess Christoffersen</Name> </AuthorisedHealthcareProfessional> <Organisation> <Name>Lægerne Vestergade</Name> <TelephoneNumber>86521348</TelephoneNumber> <Type>Yder</Type> <Identifier source="Yder">66974</Identifier> </Organisation> </WithdrawnBy> <DrugMedication> <Identifier>1971221231</Identifier> <ModificationMetadata>Extended validation supported</ModificationMetadata> </DrugMedication> <DrugMedication> <Identifier>1971221232</Identifier> <ModificationMetadata>Extended validation supported</ModificationMetadata> </DrugMedication> <DrugMedication> <Identifier>1971221233</Identifier> <ModificationMetadata>Extended validation supported</ModificationMetadata> </DrugMedication> </WithdrawDrugMedicationRequest>
I eksemplet vil der bliver udført udvidet validering på alle seponeringer i requestet, men i princippet behøver man ikke at angive det på alle. Udvidet validering vil kun blive udført på de seponeringer, hvor der er angivet at det er understøttet.
Bemærk at fra og med 1.4.4.E2, skal man ikke eksplicit angive at man understøtter udvidet validering, her vil der altid blive udført udvidet validering.
En klient kan tilsvarende angive at en eller flere valideringer ikke ønskes ved at angive strengen “Skip validation for (fejl_1, fejl_2, … fejl_n)” i ModificationMetadata-element. Bemærk at tilstedeværelsen af en valideringskode der skal ignoreres også implicit betyder at udvidet validering er understøttet og man skal derfor ikke samtidigt angive “Extended validation supported”.
Eksempel på et et request i 1.4.4 der seponerer 3 lægemiddelordinationer, og samtidig angiver at der for en enkelt seponering ikke skal udføres validering med koden 10001:
<WithdrawDrugMedicationRequest> <PersonIdentifier>1111111118</PersonIdentifier> <MedicineCardVersion>1341404077657004001</MedicineCardVersion> <WithdrawnBy> <AuthorisedHealthcareProfessional> <AuthorisationIdentifier>2Q5TK</AuthorisationIdentifier> <Name>Tess Christoffersen</Name> </AuthorisedHealthcareProfessional> <Organisation> <Name>Lægerne Vestergade</Name> <TelephoneNumber>86521348</TelephoneNumber> <Type>Yder</Type> <Identifier source="Yder">66974</Identifier> </Organisation> </WithdrawnBy> <DrugMedication> <Identifier>1971221231</Identifier> <ModificationMetadata>Extended validation supported</ModificationMetadata> </DrugMedication> <DrugMedication> <Identifier>1971221232</Identifier> <ModificationMetadata>Skip validation for (10001)</ModificationMetadata> </DrugMedication> <DrugMedication> <Identifier>1971221233</Identifier> <ModificationMetadata>Extended validation supported</ModificationMetadata> </DrugMedication> </WithdrawDrugMedicationRequest>
Udvidet validering på request niveau
Ovenstående validering er et eksempel på en validering der omhandler et konkret underelement i et request. Der kan også forekomme valideringer der går på tværs af et helt request. Et eksempel på en sådan validering på request-niveau, er validering af, at et CPR-nummer der potentielt kunne repræsentere en nyfødt, er kendt af FMK når der oprettes f.eks. lægemiddelordinationer. For fødeafdelinger er denne validering ikke ønskelig, da nyfødte ofte ikke er kendt i FMK før efter et stykke tid og dermed kan være en hindring i det daglige arbejde, mens den for andre aktører er ønskelig, da den sikrer mod fejlregistreringer.
For snitflader ældre end 1.4.4.E2 udføres valideringer på request-niveau, hvis der blot et vilkårligt sted i requestet er angivet “Extended validation supported”. Fra og med 1.4.4.E2 udføres de altid.
Når en validering på request-niveau ikke ønskes udført, skal valideringskoden angives på mindst ét ModificationMetada-element i requestet.
Eksempel på et request i 1.4.4 der opretter lægemiddelordination med en tilhørende recept, og hvor validering med koden 10000 ikke skal udføres.
… <CreateDrugMedication> <BeginEndDate> <TreatmentStartedPreviously /> <TreatmentEndingUndetermined /> </BeginEndDate> <CreatePrescriptionMedication> <ModificationMetadata>Extended validation supported but skip validation for (10000)</ModificationMetadata> </<CreatePrescriptionMedication> … </CreateDrugMedication> …
For eksemplets skyld bliver valideringkoden sat på et underelement til CreateDrugMedication, men som beskrevet i følgende afsnit, kan man sætte den på det element, som bliver udpeget af fejlen.
Signalering af udvidede valideringsfejl
Fejl der skyldes en udvidet validering ligner almindelige fejl bortset fra at fejlkoden ligger i intervallet 10000-10999 og at fejlen indeholder detaljer om hvor fejlen er opstået. Hvis fejlen f.eks. opstår i DrugMedication-element nr. 2 i et WithdrawDrugMedicationRequest, returnes følgende fejl:
… <soapenv:Fault> <faultcode>Server</faultcode> <detail> <medcom:FaultCode>10001</medcom:FaultCode> <medicinecard20120601:FaultText>Ej muligt at seponere lægemiddelordination 31237621536712 da der findes en åben recept</medicinecard20120601:FaultText> <medicinecard20120601:FaultDetails> <medicinecard20120601:KeyValueSet> <medicinecard20120601:Key>DrugMedicationIdentifier</medicinecard20120601:Key> <medicinecard20120601:Value>31237621536712</medicinecard20120601:Value> </medicinecard20120601:KeyValueSet> <medicinecard20120601:KeyValueSet> <medicinecard20120601:Key>ElementPath</medicinecard20120601:Key> <medicinecard20120601:Value>WithdrawDrugMedicationRequest .DrugMedication[1]</medicinecard20120601:Value> </medicinecard20120601:KeyValueSet> </medicinecard20120601:FaultDetails> </detail> <faultstring>Ej muligt at seponere lægemiddelordination 31237621536712 da der findes en åben recept</faultstring> </soapenv:Fault> …
ElementPath udpeger præcist hvor i requestet en fejl er opstået. Er det f.eks. 3. CreatePrescription i 2. DrugMedication i et CreateDrugMedicationRequest der fejler, indeholder ElementPath strengen “ CreateDrugMedicationRequest.DrugMedication[1].CreatePrescription[2]”. For samme fejl fra et UpdateMedicineCardRequest vil ElementPath være “UpdateMedicineCardRequest.CreateDrugMedication[1].CreatePrescription[2]”.
I langt de fleste Request-typer kan man ikke angive ModificationMetadata på rodniveau. For de typer hvor det er muligt, f.eks. RegisterPatientOrganisationRelationRequest kan ElementPath i princippet bestå kun af “RegisterPatientOrganisationRelationRequest”.
Signalering af udvidede valideringsfejls på requestniveau
Valideringsfejl på udvidet validering på requestniveau signaleres på samme måde som beskrevet i forrige afsnit. Da det ikke altid er muligt at angive et ModificationMetadata på request niveau udpeger ElementPath et vilkårlig (ofte det første) element i requestet, som indeholder ModificationMetadata. For fejl på opret lægemiddelordination kunne ElementPath være “CreateDrugMedicationRequest.DrugMedication[0]” eller “UpdateMedicineCardRequest.CreateDrugMedication[0]” for fejl opstået i henholdsvis CreateDrugMedicationRequest og UpdateMedicineCardRequest.
