DAV-ABDA / eRezept-Referenzvalidator

eRezept-Referenzvalidator auf Basis des HAPI-FHIR-Validators
Apache License 2.0
20 stars 8 forks source link

Referenzvalidator akzeptiert DAV-PR-Base-Abrechnungszeilen in meta profile #22

Open scanacs-agruhn opened 2 years ago

scanacs-agruhn commented 2 years ago

Im Rahmen des 11. Konnektathons haben wir folgende Abgabedaten bekommen:

<entry>
    <fullUrl value="urn:uuid:63a45342-144e-4552-bb1a-946f7a8bd1ec"/>
    <resource>
        <Invoice>
            <id value="63a45342-144e-4552-bb1a-946f7a8bd1ec"/>
            <meta>
                <profile
                        value="http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-Base-Abrechnungszeilen|1.1.0"/>
            </meta>
            <status value="issued"/>
            <type>
                <coding>
                    <system value="http://fhir.abda.de/eRezeptAbgabedaten/CodeSystem/DAV-CS-ERP-InvoiceTyp"/>
                    <code value="Abrechnungszeilen"/>
                </coding>
            </type>

korrekt müsste es aber so sein:

<entry>
  <fullUrl value="urn:uuid:31f4e0c8-89b9-4c4c-a4d5-89d192882c39"/>
  <resource>
    <Invoice>

      <id value="31f4e0c8-89b9-4c4c-a4d5-89d192882c39"/>
      <meta>
        <profile value="http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-Abrechnungszeilen|1.1.0"/>
      </meta>
      <status value="issued"/>
      <type>
        <coding>
          <system value="http://fhir.abda.de/eRezeptAbgabedaten/CodeSystem/DAV-CS-ERP-InvoiceTyp"/>
          <code value="Abrechnungszeilen"/>
        </coding>
      </type>

Der Referenzvalidator hat dies nicht bemerkt. Wie geht man damit um, wenn Base Profile genutzt werden.

In diesem Fall http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-Base-Abrechnungszeilen|1.1.0

Hier das Beispiel in welchem das Problem auftritt:

12245_160.000.104.799.502.85_eAbgabedaten.zip

DarthGizka commented 2 years ago

Vielleicht ist es zielführender, das Problem wie folgt zu beschreiben.

Slice 'Abrechnungszeilen' von DAV_PR_ERP_AbgabedatenBundle ist definiert als Ressource vom Typ http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-Abrechnungszeilen (Canonical; Simplifier zeigt das als Link mit dem Namen 'DAV__PR_ERP_Abrechnungszeilen' (== resource.title) an, aber das ist lediglich eine Vereinfachung für menschliche Konsumenten; relevant ist ausschließlich die Profil-URL):

  {
    "id": "Bundle.entry:Abrechnungszeilen.resource",
    "path": "Bundle.entry.resource",
    "type": [
      {
        "code": "Resource",
        "profile": [
          "http://fhir.abda.de/eRezeptAbgabedaten/StructureDefinition/DAV-PR-ERP-Abrechnungszeilen"
        ]
      }
    ]
  },

Damit sollte der Validator an dieser Stelle ausschließlich Ressourcen mit dieser Profil-URL akzeptieren. Das Basisprofil sollte hier genausowenig akzeptiert werden wie irgendwelche anderen Fremdprofile.

Das Slicing und die einzelnen Slices sind - so wie auch alle anderen Eigenschaften des Bundles - in der 'Basisklasse' definiert, also in DAV_PR_Base_AbgabedatenBundle. DAV_PR_ERP_AbgabedatenBundle überschreibt nur jeweils die Profil-URLs für die einzelnen Slices. Damit sind in dem der Validierung zugrundeliegenden Snapshot die Basis-URLs überhaupt nicht enthalten; die einzige überlebende Referenz auf Daten im Basis-Paket ist das baseDefinition-Property der Struktur. Ergo sollten die URLs der Basisprofile eigentlich genausowenig akzeptiert werden wie beliebige andere dahergelaufene Fremdprofile.

Das suggeriert zwei Experimente zum Einkreisen des Problems:

Sofern die beiden Experimente keine Auffälligkeiten ergeben, dann hilft nur Debugging. I.e. man muß dem Validator auf die Schliche kommen, wo und wie er unzulässigerweise das Basisprofil zum Validieren verwendet.