medizininformatik-initiative / kerndatensatzmodul-consent

Kerndatensatzmodul Consent
2 stars 0 forks source link

Problem bei Validierung der Beispiel Consent Ressource (u.a. Consent.category) #14

Open SebStaeubert opened 2 years ago

SebStaeubert commented 2 years ago

Siehe Validierungsergebnis: examplemiiconsenteinwilligung/$validate

Validierungsergbnis auf FHIR Server (Hapi) 20220930_Consent_Example_Validation.json.txt mit weiteren Fehlern.

Behebt sich das noch von selbst (z.B. durch die heute besprochenen Anpassungen), sind es Fehler des Validators oder muss noch etwas am Beispiel oder der Profilierung geändert werden?

julsas commented 8 months ago

Ich bekomme mit dem Java Validator Version 6.3.0 momentan Errors, wenn ich versuche MII Consent Ressourcen zu erstellen und gegen v1.0.6 von Modul Consent zu validieren. Konkret scheint das Problem in den rekursiven Elementen wie Consent.provision.provision zu sein. Bei diesen werden die Constraints aus der Ebene darüber Consent.provision geprüft. Validiere ich bspw. Beispiel für eine operationalisierte MII-Einwilligung, bekomme ich: Error @ Consent.provision.provision[0].type (line 77, col26): Value is 'permit' but must be 'deny' oder auch Error @ Consent.provision.provision[0] (line 75, col14): Consent.provision.code: max allowed = 0, but found 1 (from https://www.medizininformatik-initiative.de/fhir/modul-consent/StructureDefinition/mii-pr-consent-einwilligung|1.0.3) Hattet Ihr euch das schon angeschaut, oder soll ich mal bei #conformance nachfragen? @SebStaeubert @lhitc

ths-community commented 8 months ago

Hi Julian, in der Meldung steht aber dass die Resource gegen https://www.medizininformatik-initiative.de/fhir/modul-consent/StructureDefinition/mii-pr-consent-einwilligung|1.0.3) validiert wird. Ist das korrekt?

LG Martin

julsas commented 8 months ago

Hi @ths-community, das ist korrekt, weil das Consent-Profil innerhalb vom v1.0.6 Package noch die Version auf 1.0.3 gesetzt hat. https://github.com/medizininformatik-initiative/kerndatensatzmodul-consent/blob/9a826b43ab45b979d578156a28ba502c963dfdbf/ressourcen-profile/Profile_MII_Consent_Einwilligung.xml#L5

ths-community commented 8 months ago

@SebStaeubert das kann doch sicherlich fix angepasst werden, dann re-release v1.0.6 package oder einheitlich überall auf v1.0.7 erhöhen?

julsas commented 8 months ago

Es ist sicher gut, wenn die Version der Conformance-Ressourcen mit der Package-Version übereinstimmt. Es muss aber nicht der Fall sein.

SebStaeubert commented 8 months ago

@julsas @ths-community Ich habe die Version (hoffentlich bei allen Dateien, https://github.com/medizininformatik-initiative/kerndatensatzmodul-consent/commit/8f2c43b1a8da4b95ce810521dd45d84b78a415a4) auf Version 1.0.7 gesetzt und ein neues Packages 1.0.7 erzeugt.

Kann jemand prüfen, ob mit diesem Package noch Validierungsfehler auf den FHIR Server(n), z.B. HAPI, kommen?

julsas commented 8 months ago

Package in HAPI FHIR JPA server laden und dann Consent-Ressource gegen Consent/$validate validieren funktioniert. Die Errors bekomme ich nur, wenn ich die Validator jar lokal benutze. Habe jetzt auch rausgefunden, dass es vermutlich an den von Simplifier generierten Snapshots liegt. Und zwar hier:

            {
                "id": "Consent.provision.provision",
                "path": "Consent.provision.provision",
                "short": "Nested Exception Rules",
                "definition": "Rules which provide exceptions to the base rule or subrules.",
                "min": 0,
                "max": "*",
                "base": {
                    "path": "Consent.provision.provision",
                    "min": 0,
                    "max": "*"
                },
                "contentReference": "http://hl7.org/fhir/StructureDefinition/Consent#Consent.provision",
                "mustSupport": true
            },

"contentReference": "http://hl7.org/fhir/StructureDefinition/Consent#Consent.provision" ist meiner Ansicht nach hier falsch und verursacht die Fehler. Also kein Problem des Profils.

mosaic-hgw commented 8 months ago

Danke @julsas :)

julsas commented 7 months ago

Ich hatte nochmal nachgefragt hier: https://chat.fhir.org/#narrow/stream/179252-IG-creation/topic/Clarification.20on.20contentReference/near/426098325

Da ist man teilweise der Meinung, dass der Java Validator hier richtig liegt und Consent.provision.type mit einer Invariante profiliert werden müsste.

@SebStaeubert @ths-community

eriCCsan commented 1 month ago

Siehe Validierungsergebnis: examplemiiconsenteinwilligung/$validate

Validierungsergbnis auf FHIR Server (Hapi) 20220930_Consent_Example_Validation.json.txt mit weiteren Fehlern.

Behebt sich das noch von selbst (z.B. durch die heute besprochenen Anpassungen), sind es Fehler des Validators oder muss noch etwas am Beispiel oder der Profilierung geändert werden?

Ich kann ähnliche Fehler bestätigen. Ich habe mit hapi fhir und meiner Test-Implementierung in Java die folgenden Fehler:

Can't find Extension definition for http://fhir.de/ConsentManagement/StructureDefinition/DomainReference but trying to go on
Can't find Extension definition for http://fhir.de/ConsentManagement/StructureDefinition/Xacml but trying to go on
ERROR: Consent.extension[0] - Slicing kann nicht ausgewertet werden: Profil CanonicalType[http://fhir.de/ConsentManagement/StructureDefinition/DomainReference] kann nicht gefunden werden
INFORMATION: Consent.extension[0] - Unbekannte extension http://fhir.de/ConsentManagement/StructureDefinition/DomainReference
WARNING: Consent.category[1] - Keiner der angegebenen Codes ist im Valueset 'Consent Category Codes' (http://hl7.org/fhir/ValueSet/consent-category|4.0.1), und ein Code sollte aus diesem Valueset stammen, es sei denn, er enthält keinen geeigneten Code) (Codes = https://www.medizininformatik-initiative.de/fhir/modul-consent/CodeSystem/mii-cs-consent-consent_category#2.16.840.1.113883.3.1937.777.24.2.184)
WARNING: Consent.policyRule - Kein Code gesetzt, und es sollte ein Code aus ValueSet'Consent PolicyRule Codes' (http://hl7.org/fhir/ValueSet/consent-policy|4.0.1) ({1}) gesetzt werden
INFORMATION: Consent.policyRule.extension[0] - Unbekannte extension http://fhir.de/ConsentManagement/StructureDefinition/Xacml
ERROR: Consent.policyRule.extension[0] - Slicing kann nicht ausgewertet werden: Problem bei der Verwendung von resolve() - Profil [CanonicalType[http://fhir.de/ConsentManagement/StructureDefinition/Xacml]] auf Consent.policyRule.extension:xacml konnte nicht aufgelöst werden (@char 1)

Meine Testimplementierung in Java

FhirContext ctx = FhirContext.forR4();

        String content = new String(Files.readAllBytes(Paths.get("src/test/resources/package/examples/Example_MII_Consent_Einwilligung.json")));
        IParser jsonParser = ctx.newJsonParser();
        Consent consent = jsonParser.parseResource(Consent.class, content);

        NpmPackageValidationSupport npmPackageSupport = new NpmPackageValidationSupport(ctx);

        npmPackageSupport.loadPackageFromClasspath("classpath:de.medizininformatikinitiative.kerndatensatz.consent-1.0.7.tgz");

        ValidationSupportChain validationSupportChain = new ValidationSupportChain(
                npmPackageSupport,
                new DefaultProfileValidationSupport(ctx),
                new CommonCodeSystemsTerminologyService(ctx),
                new InMemoryTerminologyServerValidationSupport(ctx),
                new SnapshotGeneratingValidationSupport(ctx));

        CachingValidationSupport validationSupport = new CachingValidationSupport(validationSupportChain);

        FhirInstanceValidator validatorModule = new FhirInstanceValidator(validationSupport);
        FhirValidator validator = ctx.newValidator().registerValidatorModule(validatorModule);
        ValidationResult result = validator.validateWithResult(consent);

        result.getMessages().forEach(message -> {
            System.out.println(message.getSeverity() + ": " + message.getLocationString() + " - " + message.getMessage());
        });

        assertTrue(result.isSuccessful());

Ich habe dieses Package verwendet: https://simplifier.net/packages/de.medizininformatikinitiative.kerndatensatz.consent/1.0.7/

Ich verwende zur Validation das Example im Test und habe mich an diesem Beispiel orientiert: https://hapifhir.io/hapi-fhir/docs/validation/instance_validator.html#packages

Für mein Verständnis erwarte ich als Ergebnis true und maximal Hinweise aber keine "Error". @SebStaeubert @ths-community Habe ich einen Denkfehler oder etwas vergessen?

julsas commented 1 month ago

@eriCCsan das Package de.medizininformatikinitiative.kerndatensatz.consent-1.0.7 hat eine Dependency auf de.einwilligungsmanagement-1.0.1, die hier anscheinend von hapi nicht aufgelöst wird. Die Errors der fehlenden StructureDefinitions sollten verschwinden, wenn zusätzlich das Einwilligungsmanagement-Package geladen wird mit: npmPackageSupport.loadPackageFromClasspath("classpath:de.einwilligungsmanagement-1.0.1.tgz");

eriCCsan commented 1 month ago

@julsas Ich habe die Änderungen durchgeführt mit diesem Ergebnis:

WARNING: Consent.category[1] - Keiner der angegebenen Codes ist im Valueset 'Consent Category Codes' (http://hl7.org/fhir/ValueSet/consent-category|4.0.1), und ein Code sollte aus diesem Valueset stammen, es sei denn, er enthält keinen geeigneten Code) (Codes = https://www.medizininformatik-initiative.de/fhir/modul-consent/CodeSystem/mii-cs-consent-consent_category#2.16.840.1.113883.3.1937.777.24.2.184)
WARNING: Consent.policyRule - Kein Code gesetzt, und es sollte ein Code aus ValueSet'Consent PolicyRule Codes' (http://hl7.org/fhir/ValueSet/consent-policy|4.0.1) ({1}) gesetzt werden
WARNING: Consent - Constraint failed: dom-6: 'A resource should have narrative for robust management' (defined in http://hl7.org/fhir/StructureDefinition/DomainResource) (Best Practice Recommendation)

Ich nehme an das kann so sein?

julsas commented 1 month ago

@julsas Ich habe die Änderungen durchgeführt mit diesem Ergebnis:

WARNING: Consent.category[1] - Keiner der angegebenen Codes ist im Valueset 'Consent Category Codes' (http://hl7.org/fhir/ValueSet/consent-category|4.0.1), und ein Code sollte aus diesem Valueset stammen, es sei denn, er enthält keinen geeigneten Code) (Codes = https://www.medizininformatik-initiative.de/fhir/modul-consent/CodeSystem/mii-cs-consent-consent_category#2.16.840.1.113883.3.1937.777.24.2.184)
WARNING: Consent.policyRule - Kein Code gesetzt, und es sollte ein Code aus ValueSet'Consent PolicyRule Codes' (http://hl7.org/fhir/ValueSet/consent-policy|4.0.1) ({1}) gesetzt werden
WARNING: Consent - Constraint failed: dom-6: 'A resource should have narrative for robust management' (defined in http://hl7.org/fhir/StructureDefinition/DomainResource) (Best Practice Recommendation)

Ich nehme an das kann so sein?

Ja, das ist ok. Consent.category und Consent.policyRule haben schon in der Core FHIR Spec Extensible ValueSet Bindings. Davon weicht bspw. der Code der mii-category ab, daher die Warning. Das kannst du nicht beheben. Für dom-6 müsstest du narrative generieren. Ist aber nur best practice und würde ich ignorieren oder niedrig priorisieren.