diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6433c7a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,45 @@
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+replay_pid*
+
+# maven
+/target/
+
+# output
+/output/**
+
+# upload
+/upload/**
+
+# mac crud
+.DS_Store
+
+# vscode
+.vscode
+
+# secrets
+*.secret.properties
+
+# excel outputs
+*.xlsx
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e9e705d..abe819d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
au.csiro
labcodeset-fhir-transform
- 1.0.1
+ 1.1.0
jar
Nederlandse Labcodeset XML to FHIR Terminology Transforms
diff --git a/src/main/java/au/csiro/fhir/transforms/generators/LabcodesetResourceGenerator.java b/src/main/java/au/csiro/fhir/transforms/generators/LabcodesetResourceGenerator.java
index db34816..6a786b9 100644
--- a/src/main/java/au/csiro/fhir/transforms/generators/LabcodesetResourceGenerator.java
+++ b/src/main/java/au/csiro/fhir/transforms/generators/LabcodesetResourceGenerator.java
@@ -23,6 +23,9 @@
import org.hl7.fhir.r4.model.MetadataResource;
import org.hl7.fhir.r4.model.Resource;
import org.hl7.fhir.r4.model.ValueSet;
+
+import au.csiro.fhir.transform.xml.nl.labcodeset.LabConcept;
+import au.csiro.fhir.transform.xml.nl.labcodeset.LabConcept.Materials.Material;
import au.csiro.fhir.transform.xml.nl.labcodeset.MaterialDefinition;
import au.csiro.fhir.transform.xml.nl.labcodeset.Publication;
import au.csiro.fhir.transform.xml.nl.labcodeset.UnitDefinition;
@@ -56,7 +59,7 @@ public class LabcodesetResourceGenerator {
private Publication pub;
private File outputDir;
private String labcodesetVersion;
- private Map materialMap = new HashMap<>();
+ private Map materialMap = new HashMap<>();
private Map unitMap = new HashMap<>();
private TerminologyClient terminologyClient;
@@ -93,8 +96,10 @@ public LabcodesetResourceGenerator(File labcodesetFile, File outputDir, String l
this.labcodesetVersion = pub.getEffectiveDate().split("-")[0];
- for (MaterialDefinition material : pub.getMaterials().getMaterial()) {
- materialMap.put(material.getId(), material);
+ for (LabConcept concept : pub.getLabConcepts().getLabConcept()) {
+ for (Material material : concept.getMaterials().getMaterial()) {
+ materialMap.put(material.getCode(), material);
+ }
}
for (UnitDefinition unit : pub.getUnits().getUnit()) {
@@ -150,7 +155,7 @@ private void generateMaterialResources(Bundle bundle) {
}
private void generateUcumResources(Bundle bundle) {
- UcumResourceGenerator ucumResourceGenerator = new UcumResourceGenerator(labcodesetVersion, loincVersion, unitMap, materialMap);
+ UcumResourceGenerator ucumResourceGenerator = new UcumResourceGenerator(labcodesetVersion, loincVersion, unitMap);
CodeSystem ucumCodeSystem = ucumResourceGenerator.createUcumCodeSystem(pub);
outputResource(ucumCodeSystem, UCUM_CS_FILENAME);
@@ -165,7 +170,7 @@ private void generateUcumResources(Bundle bundle) {
private void generateLoincResources(Bundle bundle) {
LoincResourceGenerator loincResourceGenerator =
- new LoincResourceGenerator(labcodesetVersion, loincVersion, terminologyClient, unitMap, materialMap);
+ new LoincResourceGenerator(labcodesetVersion, loincVersion, terminologyClient, unitMap);
CodeSystem loincSupplement = loincResourceGenerator.createLoincCodeSystemSupplement(pub);
bundle.addEntry().setResource(loincSupplement);
diff --git a/src/main/java/au/csiro/fhir/transforms/generators/LoincResourceGenerator.java b/src/main/java/au/csiro/fhir/transforms/generators/LoincResourceGenerator.java
index 83ca2da..d2b4dde 100644
--- a/src/main/java/au/csiro/fhir/transforms/generators/LoincResourceGenerator.java
+++ b/src/main/java/au/csiro/fhir/transforms/generators/LoincResourceGenerator.java
@@ -34,8 +34,6 @@
import au.csiro.fhir.transform.xml.nl.labcodeset.LabConcept.Units;
import au.csiro.fhir.transform.xml.nl.labcodeset.LoincAxis;
import au.csiro.fhir.transform.xml.nl.labcodeset.LoincConcept;
-import au.csiro.fhir.transform.xml.nl.labcodeset.MaterialDefinition;
-import au.csiro.fhir.transform.xml.nl.labcodeset.MaterialOrMethodStatus;
import au.csiro.fhir.transform.xml.nl.labcodeset.Publication;
import au.csiro.fhir.transform.xml.nl.labcodeset.UnitDefinition;
import au.csiro.fhir.transforms.utility.Constants;
@@ -73,7 +71,6 @@ public class LoincResourceGenerator {
private String loincVersion;
private TerminologyClient terminologyClient;
private Map unitMap;
- private Map materialsMap;
/**
* @param labcodesetVersion version of the Labcodeset being transformed
@@ -81,15 +78,13 @@ public class LoincResourceGenerator {
* @param terminologyClient {@link TerminologyClient} that can be used to lookup details of LOINC
* codes
* @param unitMap Map of the unit references and their details in the Labcodeset file
- * @param materialsMap Map of the materials references and their details in the Labcodeset file
*/
public LoincResourceGenerator(String labcodesetVersion, String loincVersion, TerminologyClient terminologyClient,
- Map unitMap, Map materialsMap) {
+ Map unitMap) {
this.labcodesetVersion = labcodesetVersion;
this.loincVersion = loincVersion;
this.terminologyClient = terminologyClient;
this.unitMap = unitMap;
- this.materialsMap = materialsMap;
}
/**
@@ -163,20 +158,9 @@ private void setUnitProperties(Units units, ConceptDefinitionComponent concept)
private void setMaterialProperties(Materials materials, ConceptDefinitionComponent concept) {
if (materials != null && materials.getMaterial() != null) {
for (Material material : materials.getMaterial()) {
- if (material.getStatus() != null && !material.getStatus().equals(MaterialOrMethodStatus.ACTIVE)) {
- System.err.println("All materials should be active, yet material " + material.getRef() + " on code " + concept.getCode() + " is "
- + material.getStatus());
- }
-
- MaterialDefinition materialDefinition = materialsMap.get(material.getRef());
-
- if (materialDefinition != null) {
- concept.addProperty(new ConceptPropertyComponent(new CodeType(LABCODESET_MATERIAL_PROPERTY),
- new Coding(Constants.SCT_CS_URI, materialDefinition.getCode().toString(),
- terminologyClient.getSnomedDisplay(materialDefinition.getCode().toString(), materialDefinition.getDisplayName()))));
- } else {
- System.err.println("Could not find material for reference " + material.getRef() + " - omitting this property!");
- }
+ concept.addProperty(new ConceptPropertyComponent(new CodeType(LABCODESET_MATERIAL_PROPERTY),
+ new Coding(Constants.SCT_CS_URI, material.getCode().toString(),
+ terminologyClient.getSnomedDisplay(material.getCode().toString(), material.getDisplayName()))));
}
}
}
diff --git a/src/main/java/au/csiro/fhir/transforms/generators/MaterialsResourceGenerator.java b/src/main/java/au/csiro/fhir/transforms/generators/MaterialsResourceGenerator.java
index e8caf7d..2eb78b0 100644
--- a/src/main/java/au/csiro/fhir/transforms/generators/MaterialsResourceGenerator.java
+++ b/src/main/java/au/csiro/fhir/transforms/generators/MaterialsResourceGenerator.java
@@ -20,8 +20,6 @@
import org.hl7.fhir.r4.model.ValueSet.ValueSetComposeComponent;
import au.csiro.fhir.transform.xml.nl.labcodeset.LabConcept;
import au.csiro.fhir.transform.xml.nl.labcodeset.LabConcept.Materials.Material;
-import au.csiro.fhir.transform.xml.nl.labcodeset.MaterialDefinition;
-import au.csiro.fhir.transform.xml.nl.labcodeset.MaterialOrMethodStatus;
import au.csiro.fhir.transform.xml.nl.labcodeset.Publication;
import au.csiro.fhir.transforms.utility.Constants;
import au.csiro.fhir.transforms.utility.TerminologyClient;
@@ -43,7 +41,7 @@ public class MaterialsResourceGenerator {
private String labcodesetVersion;
private String loincVersion;
private TerminologyClient terminologyClient;
- private Map materialsMap;
+ private Map materialsMap;
/**
* @param labcodesetVersion version of the Labcodeset being transformed
@@ -53,7 +51,7 @@ public class MaterialsResourceGenerator {
* @param materialsMap Map of the materials references and their details in the Labcodeset file
*/
public MaterialsResourceGenerator(String labcodesetVersion, String loincVersion, TerminologyClient terminologyClient,
- Map materialsMap) {
+ Map materialsMap) {
this.labcodesetVersion = labcodesetVersion;
this.loincVersion = loincVersion;
this.terminologyClient = terminologyClient;
@@ -70,7 +68,7 @@ public ValueSet createMaterialsValueSet(Publication pub) {
ValueSet valueSet = new ValueSet();
String identifier = "Labconcepts-materials-" + labcodesetVersion;
valueSet.setId(identifier);
- valueSet.setName(identifier).setVersion(labcodesetVersion).setTitle(LABCODESET_MATERIALS_VS_TITLE).setStatus(PublicationStatus.DRAFT)
+ valueSet.setName(identifier).setVersion(labcodesetVersion).setTitle(LABCODESET_MATERIALS_VS_TITLE).setStatus(PublicationStatus.ACTIVE)
.setUrl(LABCODESET_MATERIALS_VS_URI).setDescription(LABCODESET_MATERIALS_VS_DESCRIPTION).setExperimental(false)
.setPublisher(Constants.LABCODESET_RESOURCE_PUBLISHER).setCopyright(Constants.LABCODESET_RESOURCE_COPYRIGHT)
.setLanguage(Constants.DUTCH_LANGUAGE_CODE);
@@ -82,11 +80,8 @@ public ValueSet createMaterialsValueSet(Publication pub) {
conceptSet.setSystem(Constants.SCT_CS_URI);
conceptSet.setVersion(Constants.NL_SCT_EDITION);
- for (MaterialDefinition material : pub.getMaterials().getMaterial()) {
- if (material.getStatus() != null && !material.getStatus().equals(MaterialOrMethodStatus.ACTIVE)) {
- System.err.println("All materials should be active, yet material " + material.getCode() + " is " + material.getStatus());
- }
-
+ for (Map.Entry entry : materialsMap.entrySet()) {
+ Material material = entry.getValue();
ConceptReferenceComponent con = new ConceptReferenceComponent();
con.setCode(material.getCode().toString());
@@ -128,11 +123,6 @@ public ConceptMap createMaterialsConceptMap(Publication pub) {
if (labConcept.getMaterials() != null) {
for (Material material : labConcept.getMaterials().getMaterial()) {
- if (material.getStatus() != null && !material.getStatus().equals(MaterialOrMethodStatus.ACTIVE)) {
- System.err.println("All materials should be active, yet material " + material.getRef() + " on code "
- + labConcept.getLoincConcept().getLoincNum() + " is " + material.getStatus());
- }
-
SourceElementComponent element = new SourceElementComponent();
element.setCode(labConcept.getLoincConcept().getLoincNum());
if (labConcept.getLoincConcept().getTranslation() != null
@@ -143,7 +133,7 @@ public ConceptMap createMaterialsConceptMap(Publication pub) {
}
TargetElementComponent targetElement = new TargetElementComponent();
- MaterialDefinition cachedMaterial = materialsMap.get(material.getRef());
+ Material cachedMaterial = materialsMap.get(material.getCode());
targetElement.setCode(cachedMaterial.getCode().toString());
targetElement.setDisplay(terminologyClient.getSnomedDisplay(targetElement.getCode(), cachedMaterial.getDisplayName()));
targetElement.setEquivalence(ConceptMapEquivalence.RELATEDTO);
diff --git a/src/main/java/au/csiro/fhir/transforms/generators/UcumResourceGenerator.java b/src/main/java/au/csiro/fhir/transforms/generators/UcumResourceGenerator.java
index 94a3999..cfae157 100644
--- a/src/main/java/au/csiro/fhir/transforms/generators/UcumResourceGenerator.java
+++ b/src/main/java/au/csiro/fhir/transforms/generators/UcumResourceGenerator.java
@@ -25,7 +25,6 @@
import org.hl7.fhir.r4.model.ValueSet.ValueSetComposeComponent;
import au.csiro.fhir.transform.xml.nl.labcodeset.LabConcept;
import au.csiro.fhir.transform.xml.nl.labcodeset.LabConcept.Units;
-import au.csiro.fhir.transform.xml.nl.labcodeset.MaterialDefinition;
import au.csiro.fhir.transform.xml.nl.labcodeset.Publication;
import au.csiro.fhir.transform.xml.nl.labcodeset.UnitDefinition;
import au.csiro.fhir.transforms.utility.Constants;
@@ -56,10 +55,8 @@ public class UcumResourceGenerator {
* @param terminologyClient {@link TerminologyClient} that can be used to lookup details of LOINC
* codes
* @param unitMap Map of the unit references and their details in the Labcodeset file
- * @param materialsMap Map of the materials references and their details in the Labcodeset file
*/
- public UcumResourceGenerator(String labcodesetVersion, String loincVersion, Map unitMap,
- Map materialsMap) {
+ public UcumResourceGenerator(String labcodesetVersion, String loincVersion, Map unitMap) {
this.labcodesetVersion = labcodesetVersion;
this.loincVersion = loincVersion;
this.unitMap = unitMap;
diff --git a/src/main/resources/labcodeset.xsd b/src/main/resources/labcodeset.xsd
index fed06a7..7a0d962 100644
--- a/src/main/resources/labcodeset.xsd
+++ b/src/main/resources/labcodeset.xsd
@@ -1,4 +1,3 @@
-
@@ -13,14 +12,9 @@
Lijst met alle actieve concepten in de Nederlandse Labcodeset
-
+
- Lijst met gebruikte Snomed materialen
-
-
-
-
- Lijst met gebruikte Snomed methoden
+ Lijst met gebruikte LOINC System op Snomed materialen mappings
@@ -38,10 +32,32 @@
Lijst met verwijzingen naar gebruikte nominale uitslagenlijsten
+
+
+ Lijst met panels
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53,10 +69,8 @@
-
+
-
-
@@ -64,8 +78,7 @@
- LOINC concept behorende bij dit Labcodeset concept. Bevat de Engelstalige en (waar aanwezig) Nederlandstalige
- assen.
+ LOINC concept behorende bij dit Labcodeset concept. Bevat de Engelstalige en (waar aanwezig) Nederlandstalige assen.
@@ -76,80 +89,68 @@
- Verwijst naar een materiaal in de materialenlijst.
+ Verwijst naar een SNOMED materiaal uit de mapping.
-
-
+
+
-
+
- Methoden die gebruikt kunnen worden bij dit concept.
+ Bevat de lijst van mogelijke nominale of ordinale uitkomsten.
+
+
+
+
+
+ Verwijst naar een referentieset in SNOMED. U kunt deze vinden in de Nederlandse SNOMED-editie met behulp van het gegeven conceptId.
+
+
+
+
+ "Verwijst naar de lijst van mogelijke ordinale uitkomsten."
+
+
+
+
+
+
+
+
+
+
+ Eenheden (units) die gebruikt worden bij dit concept.
-
+
- Verwijst naar een methode in de methodenlijst.
+ Verwijst naar een eenheid (unit) in de eenhedenlijst.
-
-
+
-
-
-
-
- Bevat de lijst van mogelijke nominale of ordinale uitkomsten.
-
-
-
-
-
- Verwijst naar een referentieset in SNOMED. U kunt deze vinden in de Nederlandse SNOMED-editie met behulp van het gegeven conceptId.
-
-
-
-
- "Verwijst naar de lijst van mogelijke ordinale uitkomsten."
-
-
-
-
-
-
-
-
-
-
- Eenheden (units) die gebruikt worden bij dit concept.
-
-
-
-
-
- Verwijst naar een eenheid (unit) in de eenhedenlijst.
-
-
-
-
-
-
-
-
-
-
-
+
+
+ Reden dat een concept status 'retired' heeft gekregen.
+
+
+
- Commentaar - m.n. tijdens ontwikkeling
+ Eventuele vervangende concepten voor een concept dat status 'retired' heeft gekregen.
+
+
+
+
+ Een release note met vrije toelichtende tekst bij een concept.
@@ -189,7 +190,7 @@
-
+ De LOINC-as component.
@@ -199,7 +200,7 @@
- De LOINC-as timing.
+ De LOINC-as timing ofwel tijdsduur.
@@ -229,9 +230,19 @@
- Bevat de Long Common Name (LCN) van een LOINC-concept. Naast name heeft het attributen count (het aantal tokens) en length (de totale lengte). Dit is de naam waarmee een LOINC-concept getoond dient te worden.
+ Bevat de Long Common Name (LCN) van een LOINC-concept. Dit is de naam waarmee een LOINC-concept getoond dient te worden.
+
+
+ Vervangend LOINC concept voor DISCOURAGED of DEPRECATED concepten. Attributen "from" (oude concept), "to" (nieuwe concept) en "comment" (toelichting).
+
+
+
+
+
+
+
Voor een panel van bepalingen zal dit element aanwezig zijn met de waarde 'Panel'. In andere gevallen is het afwezig.
@@ -258,7 +269,7 @@
-
+
@@ -269,6 +280,7 @@
+
@@ -279,14 +291,10 @@
-
-
-
-
-
+
-
+
@@ -295,77 +303,21 @@
Een materiaal, d.w.z. een monster (specimen) waarin een bepaling uitgevoerd kan worden, bv. urine.
-
-
-
- De Nederlandse weergavenaam.
-
-
-
-
- Het ouderconcept in SNOMED.
-
-
-
-
- De substantie die in SNOMED aan dit materiaal gekoppeld is, bv. ‘urine’ voor het materiaal ‘midstream-urine’.
-
-
-
-
- De herkomst van het materiaal, bv. ‘eye proper’ voor ‘eye fluid sample’.
-
-
-
-
- De morfologische afwijking waaruit het materiaal afkomstig is, bv. een wond of abces.
-
-
-
-
- Wanneer het materiaal in feite een object is, bv. een kathetertip, wordt dit object op deze as gespecificeerd.
-
-
-
-
- De verrichting waarmee het materiaal verkregen is, bv. een uitstrijk.
-
-
-
-
- Verwijzingen naar externe websites met informatie over dit concept.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Methodes dienen nog nader gedefinieerd te worden.
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ De SNOMED code.
+
+
+
+
+ De SNOMED weergavenaam.
+
+
+
+
+ Het LOINC System.
+
+
@@ -394,6 +346,7 @@
+
@@ -422,7 +375,7 @@
-
+
@@ -472,6 +425,64 @@
-
+
+
+
+
+
+ Lijst met alle panels in de NL Labcodeset.
+
+
+
+
+
+
+
+
+
+ Type van de LOINC concepten in een panel.
+ Ieder loincConcept in een panel verwijst naar een LOINC concept uit de NL Labcodeset.
+
+
+
+
+ Lijst met alle NL Labcodeset concepten
+
+
+
+
+ Korte naam van het concept. Alleen voor de leesbaarheid van deze lijst - gebruik de naam uit het hele LOINC concept in uw toepassing.
+
+
+
+
+ Een eventuele aanduiding de bepaling binnen het panel verplicht, optioneel of voorwaardelijk is.
+ Waarden: R (Required), O (Optional) of C (Conditional
+
+
+
+
+ Een eventuele tekstuele beschrijving van voorwaarde voor inclusie.
+
+
+
+
+ Een eventuele tekstuele beschrijving van voorwaarde voor inclusie.
+
+
+
+
+ Een lijst met de leden van het panel. Dit kunnen zelf weer panels zijn, of individuele testen.
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file