Skip to content

Commit

Permalink
Added in questionnaire/LM/maps for yellow fever.
Browse files Browse the repository at this point in the history
  • Loading branch information
lukeaduncan committed Jan 19, 2024
1 parent 34c9178 commit bada461
Show file tree
Hide file tree
Showing 7 changed files with 342 additions and 15 deletions.
47 changes: 47 additions & 0 deletions input/fsh/examples/IMMZ.D1.QuestionnaireResponse.YF.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
Instance: Example.IMMZ.D1.QuestionnaireResponse.YF
InstanceOf: QuestionnaireResponse
Usage: #example
* status = #completed
* authored = "2023-10-18T19:20:20.913Z"
* questionnaire = Canonical(QIMMZD1ClientHistoryYellowFever)
* subject = Reference(patient654321)

* item[+]
* linkId = "birth"
* answer.valueBoolean = false
* item[+]
* linkId = "booster"
* answer.valueBoolean = false
* item[+]
* linkId = "completedPrimarySeries"
* answer.valueBoolean = true
* item[+]
* linkId = "dateSeriesCompleted"
* answer.valueDate = "2023-01-01"
* item[+]
* linkId = "hivStatus"
* answer.valueCoding = IMMZ.D1#DE11
* item[+]
* linkId = "pretermBirth"
* answer.valueBoolean = false
* item[+]
* linkId = "immunocompromised"
* answer.valueBoolean = false
* item[+]
* linkId = "OnART"
* answer.valueBoolean = true
* item[+]
* linkId = "severelyImmunosuppressed"
* answer.valueBoolean = true
* item[+]
* linkId = "artStartDate"
* answer.valueDate = "2022-06-01"
* item[+]
* linkId = "vaccineHistory"
* item[+]
* linkId = "vaccineType"
* answer.valueCoding = $ICD11#XM0N24
* item[+]
* linkId = "vaccineDate"
* answer.valueDate = "2023-04-05"

7 changes: 1 addition & 6 deletions input/fsh/models/IMMZD1ClientHistoryYellowFever.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,12 @@ Description: "Data elements for the IMMZ.D1 Capture Client History Data Diction
* ^code[+] = $SCT#370388006
* onART 0..1 boolean "Currently on ART" "The client is currently receiving antiretroviral therapy (ART)"
* ^code[+] = IMMZ.D1#DE17
* severelyImmunosuppressed 1..1 boolean "Severely immunosuppressed" "The client is known to be severely immunocompromised or immunosuppressed"
* ^code[+] = IMMZ.D1#DE92
* ^code[=] = $LNC#96381-9
* artStartDate 1..1 date "ART start date" "The date on which the client started or restarted antiretroviral therapy (ART)"
* ^code[+] = IMMZ.D1#DE49
* vaccineHistory 0..* BackboneElement "Vaccine History" "History of previous vaccine doses."
* vaccineType 0..1 Coding "Vaccine type" "Vaccine type/category that was administered or was to be administered. Any vaccine code available in the IMMZ.Z Vaccine Library list of codes applies in this data element"
* ^code[+] = IMMZ.D#DE19
* ^code[+] = $LNC#39236-5
* ^code[+] = $SCT#787859002
* vaccineType from IMMZ.Z.DE9
* vaccineType from IMMZ.Z.DE23
* vaccineDate 0..1 date "Date and time of vaccination" "Represents the visit/encounter date, which is the date and time when the vaccine was administered to the client"
* ^code[+] = IMMZ.D#DE20
* ^code[+] = $LNC#30952-6
74 changes: 74 additions & 0 deletions input/fsh/questionnaires/QIMMZD1ClientHistoryYellowFever.fsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
Instance: QIMMZD1ClientHistoryYellowFever
InstanceOf: sdc-questionnaire-extr-smap
Title: "Capture Client History Questionnaire"
Description: "Immunization - Capture Client History Questionnaire"
Usage: #definition
* id = "IMMZD1ClientHistoryYellowFever"
* version = "2023"
* status = #draft
* subjectType = #Patient
* language = #en
* status = #draft
* contained[+] = IMMZ.D1.DE10
* contained[+] = IMMZ.D1.DE103

* extension[+].url = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-targetStructureMap"
* extension[=].valueCanonical = "http://smart.who.int/ig/smart-immunizations/StructureMap/IMMZD1QRToResources"


* insert Question(birth, Indicates if the client received a dose within 24 hours of birth. Whether a birth dose is counted as part of the primary series will depend on the antigen., boolean, false, false)
* item[=]
* code[+] = IMMZ.D1#DE109
* insert Question(type, The type of dose in a series that the client received, choice, false, true)
* item[=]
* answerValueSet = Canonical(IMMZ.D1.DE103)
* code[+] = IMMZ.D1#DE103
* insert Question(booster, Indicates if the client has completed the booster series of a product/antigen, boolean, false, false)
* item[=]
* code[+] = IMMZ.D1#DE102
* insert Question(completedPrimarySeries, Indicates if the client has completed the primary vaccination series of a product/antigen. If the client has not yet completed their primary series\, it means they may be expected to receive more doses to complete their vaccination regimen for the respective product/antigen., boolean, false, false)
* item[=]
* code[+] = IMMZ.D1#DE8
* insert Question(dateSeriesCompleted, The date when the client completed the primary vaccination series - per product/antigen, date, false, false)
* item[=]
* code[+] = IMMZ.D1#DE81
* insert Question(hivStatus, The current human immunodeficiency virus HIV status of the client, choice, false, false)
* item[=]
* answerValueSet = Canonical(IMMZ.D1.DE10)
* code[+] = IMMZ.D1#DE10
* code[+] = $LNC#55277-8
* code[+] = $SCT#278977008
* insert Question(pretermBirth, The infant was preterm; the mother gave birth to the infant when gestational age was less than 37 weeks, boolean, false, false)
* item[=]
* code[+] = IMMZ.D1#DE15
* code[+] = $ICD11#KA21.4
* code[+] = $LNC#76517-2
* code[+] = $SCT#395507008
* insert Question(immunocompromised, The client is known to be immunocompromised. This means the client has a weakened immune system and having a reduced ability to fight infections and other diseases, boolean, true, false)
* item[=]
* code[+] = IMMZ.D1#DE16
* code[+] = $ICD11#4B4Z
* code[+] = $LNC#96381-9
* code[+] = $SCT#370388006
* insert Question(onART, The client is currently receiving antiretroviral therapy - ART, boolean, false, false)
* item[=]
* code[+] = IMMZ.D1#DE17
* insert Question(severelyImmunosuppressed, The client is known to be severely immunocompromised or immunosuppressed, boolean, true, false)
* item[=]
* code[+] = IMMZ.D1#DE92
* code[+] = $LNC#96381-9
* insert Question(artStartDate, The date on which the client started or restarted antiretroviral therapy ART, date, false, false)
* item[=]
* code[+] = IMMZ.D1#DE49
* insert Question(vaccineHistory, Vaccine History, group, false, true)
* item[=]
* insert Question(vaccineType, Vaccine type/category that was administered or was to be administered. Any vaccine code available in the IMMZ.Z Vaccine Library list of codes applies in this data element, choice, true, false)
* item[=]
* answerValueSet = Canonical(IMMZ.Z.DE23)
* code[+] = IMMZ.D#DE19
* code[+] = $LNC#39236-5
* code[+] = $SCT#787859002
* insert Question(vaccineDate, Represents the visit/encounter date\, which is the date and time when the vaccine was administered to the client, date, true, false)
* item[=]
* code[+] = IMMZ.D#DE20
* code[+] = $LNC#30952-6
128 changes: 128 additions & 0 deletions input/maps/IMMZD1YellowFeverLMToResources.fml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
map "http://smart.who.int/ig/smart-immunizations/StructureMap/IMMZD1YellowFeverLMToResources" = "IMMZD1YellowFeverLMToResources"

uses "http://smart.who.int/ig/smart-immunizations/StructureDefinition/IMMZD1ClientHistoryYellowFever" alias IMMZD1 as source
uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias Bundle as target

group IMMZD1ToBundle (source immz : IMMZD1, target bundle: Bundle) {
immz -> bundle.type = 'collection' "SetCollection";

immz.patient as patient then {


immz.birth as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE109' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.value = content "SetValue";
} "SetBirthObservation";

immz.type as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE103' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.valueCodeableConcept as code then {
content -> code.coding = content "SetCoding";
} "SetCodeableConcept";
} "SetTypeObservation";

immz.booster as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE102' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.value = content "SetValue";
} "SetBoosterObservation";

immz.completedPrimarySeries as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE8' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.value = content "SetValue";
} "SetPrimarySeriesObservation";

immz.dateSeriesCompleted as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE81' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.value = content "SetValue";
} "SetDateSeriesObservation";

immz.hivStatus as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE10' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.valueCodeableConcept as code then {
content -> code.coding = content "SetCoding";
} "SetCodeableConcept";
} "SetHIVStatusObservation";

immz.pretermBirth as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE15' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.value = content "SetValue";
} "SetPretermBirthObservation";

immz.immunocompromised as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE16' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.value = content "SetValue";
} "SetImmunocompromisedObservation";

immz.onART as content -> bundle.entry as entry, entry.resource = create('Observation') as obs then {
patient -> obs.subject = patient "SetPatient";
content -> obs.code as code then {
content -> code.coding as coding then {
content -> coding.system = 'http://smart.who.int/ig/smart-immunizations/CodeSystem/IMMZ.D1' "SetObsSystem";
content -> coding.code = 'DE17' "SetObsCode";
} "SetObsCoding";
} "SetObsCode";
content -> obs.value = content "SetValue";
} "SetOnARTObservation";

immz.vaccineHistory as history -> bundle.entry as entry, entry.resource = create('Immunization') as imm then {
patient -> imm.patient = patient "SetPatient";
history -> imm.status = 'completed' "SetStatus";

history.vaccineType as vaccine -> imm.vaccineCode as code then {
vaccine -> code.coding = vaccine "SetVaccineCoding";
} "SetVaccineType";
history.vaccineDate as date -> imm.occurrence = cast(date, 'dateTime') "SetDate";

} "SetVaccineHistoryObservation";

} "GetPatient";

}
64 changes: 64 additions & 0 deletions input/maps/IMMZD1YellowFeverQRToLM.fml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
map "http://smart.who.int/ig/smart-immunizations/StructureMap/IMMZD1YellowFeverQRToLM" = "IMMZD1YellowFeverQRToLM"

uses "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse" alias QResp as source
uses "http://smart.who.int/ig/smart-immunizations/StructureDefinition/IMMZD1ClientHistoryYellowFever" alias IMMZD1 as target

group QRespToIMMZD1 ( source qr : QResp, target immz : IMMZD1) {

qr.subject as patient -> immz.patient = patient "SetPatient";

qr.item as item then {

item.answer first as answer where item.linkId = 'birth' then {
answer.value as content -> immz.birth = content "SetBirth";
} "FirstAnswerForBirth";

item.answer as answer where item.linkId = 'type' then {
answer.value as coding -> immz.type = coding "SetVaccineType";
} "AnswerForType";

item.answer first as answer where item.linkId = 'booster' then {
answer.value as content -> immz.booster = content "SetBooster";
} "FirstAnswerForBooster";

item.answer first as answer where item.linkId = 'completedPrimarySeries' then {
answer.value as content -> immz.completedPrimarySeries = content "SetCompletedPrimarySeries";
} "FirstAnswerForCompletedPrimarySeries";

item.answer first as answer where item.linkId = 'dateSeriesCompleted' then {
answer.value as content -> immz.dateSeriesCompleted = content "SetDateSeriesCompleted";
} "FirstAnswerDateSeriesCompleted";

item.answer first as answer where item.linkId = 'hivStatus' then {
answer.value as coding -> immz.hivStatus = coding "SetHIVStatus";
} "FirstAnswerForHIVStatus";

item.answer first as answer where item.linkId = 'pretermBirth' then {
answer.value as content -> immz.pretermBirth = content "SetPretermBirth";
} "FirstAnswerForPretermBirth";

item.answer first as answer where item.linkId = 'immunocompromised' then {
answer.value as content -> immz.immunocompromised = content "SetImmunocompromised";
} "FirstAnswerForImmunocompromised";

item.answer first as answer where item.linkId = 'onART' then {
answer.value as content -> immz.onART = content "SetOnART";
} "FirstAnswerForOnART";

item as history where item.linkId = 'vaccineHistory' -> immz.vaccineHistory as vaccine then {
history.item as entry then {
entry.answer as answer where entry.linkId = 'vaccineType' then {
answer.value as coding -> vaccine.vaccineType = coding "SetVaccineType";
} "AnswerForVaccineType";

entry.answer as answer where entry.linkId = 'vaccineDate' then {
answer.value as content -> vaccine.vaccineDate = content "SetVaccineDate";
} "AnswerForVaccineDate";

} "HistoryLoop";

} "ForVaccineHistory";

} "processItems";

}
19 changes: 19 additions & 0 deletions input/maps/IMMZD1YellowFeverQRToResources.fml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
map "http://smart.who.int/ig/smart-immunizations/StructureMap/IMMZD1YellowFeverQRToResources" = "IMMZD1YellowFeverQRToResources"

uses "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse" alias QResp as source
uses "http://smart.who.int/ig/smart-immunizations/StructureDefinition/IMMZD1ClientHistoryYellowFever" alias IMMZD1 as source
uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias Bundle as target

imports "http://smart.who.int/ig/smart-immunizations/StructureMap/IMMZD1YellowFeverQRToLM"
imports "http://smart.who.int/ig/smart-immunizations/StructureMap/IMMZD1YellowFeverLMToResources"

group QRespToBundle (
source qr : QResp,
target bundle: Bundle
) {
qr -> create("http://smart.who.int/ig/smart-immunizations/StructureDefinition/IMMZD1ClientHistoryYellowFever") as model
then{
qr -> model then QRespToIMMZD1( qr, model) "QRtoLM";
qr -> bundle then IMMZD1ToBundle( model, bundle ) "LMtoBundle";
} "QRtoBundle";
}
Loading

0 comments on commit bada461

Please sign in to comment.