diff --git a/input/bd.fhir.core.xml b/input/bd.fhir.core.xml index 117fc63..7d956eb 100644 --- a/input/bd.fhir.core.xml +++ b/input/bd.fhir.core.xml @@ -13,7 +13,7 @@ --> - + <status value="active"/> diff --git a/input/fsh/codeSystems/BDDGDADrugCS.fsh b/input/fsh/codeSystems/BDDGDADrugCS.fsh new file mode 100644 index 0000000..3b304c1 --- /dev/null +++ b/input/fsh/codeSystems/BDDGDADrugCS.fsh @@ -0,0 +1,33 @@ +CodeSystem: BDDGDADrugCS +Id: dgda-drug-registry +Title: "DGDA Drug Registry Code System" +Description: """ +Code system representing the Drug Registration Authority (DGDA) of Bangladesh's +official drug registry. Concepts are maintained in the national OCL terminology +server at https://tr.ocl.dghs.gov.bd and are not enumerated within this +Implementation Guide. + +This code system contains two concept classes: +- **Drug**: Finished pharmaceutical drug products (identified by DAR number and trade name) +- **Ingredient**: Raw material / active pharmaceutical ingredients + +Concept IDs follow the format: `{DAR-number}--{trade-name-slug}` +Example: `353-0026-039--marvelous-fe` + +**Canonical URL note:** `https://dgda.gov.bd/drug-registry` is a logical identifier +only and does not resolve to a web endpoint. +""" + +* ^url = "https://dgda.gov.bd/drug-registry" +* ^version = "v1.0.0" +* ^status = #active +* ^experimental = false +* ^publisher = "Directorate General of Drug Administration (DGDA), Government of Bangladesh" +* ^contact.name = "DGHS Health Informatics Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^content = #not-present +* ^count = 39196 +* ^caseSensitive = true +* ^valueSet = "https://dgda.gov.bd/fhir/ValueSet/registered-drugs" \ No newline at end of file diff --git a/input/fsh/examples/BDMedicationExample.fsh b/input/fsh/examples/BDMedicationExample.fsh new file mode 100644 index 0000000..a25ed7d --- /dev/null +++ b/input/fsh/examples/BDMedicationExample.fsh @@ -0,0 +1,33 @@ +Instance: BDMedicationExample +InstanceOf: BDMedication +Title: "Medication Example — Marvelous Fe (Combination Drug)" +Description: """ +Example BDMedication instance for Marvelous Fe, a combination drug containing +ferrous sulphate and folic acid. Demonstrates multi-ingredient handling with +ICD-11 MMS substance codes populated from OCL Has-active-ingredient mappings. +Dose form coded using EDQM Standard Terms. +""" +Usage: #example + +* code.coding[0].system = "https://dgda.gov.bd/drug-registry" +* code.coding[0].code = #353-0026-039--marvelous-fe +* code.coding[0].display = "Marvelous Fe" +* code.text = "Marvelous Fe" + +* form.coding[0].system = "http://standardterms.edqm.eu" +* form.coding[0].code = #10219000 +* form.coding[0].display = "Tablet" + +// Ingredient 1: Ferrous Sulphate → ICD-11 XM substance code +* ingredient[0].itemCodeableConcept.coding[0].system = "http://id.who.int/icd/release/11/mms" +* ingredient[0].itemCodeableConcept.coding[0].code = #XM3SQ1 +* ingredient[0].itemCodeableConcept.coding[0].display = "Ferrous sulphate" +* ingredient[0].itemCodeableConcept.text = "Ferrous sulphate" +* ingredient[0].isActive = true + +// Ingredient 2: Folic Acid → ICD-11 XM substance code +* ingredient[1].itemCodeableConcept.coding[0].system = "http://id.who.int/icd/release/11/mms" +* ingredient[1].itemCodeableConcept.coding[0].code = #XM7R82 +* ingredient[1].itemCodeableConcept.coding[0].display = "Folic acid" +* ingredient[1].itemCodeableConcept.text = "Folic acid" +* ingredient[1].isActive = true \ No newline at end of file diff --git a/input/fsh/examples/BDMedicationRequestExample.fsh b/input/fsh/examples/BDMedicationRequestExample.fsh new file mode 100644 index 0000000..c56055c --- /dev/null +++ b/input/fsh/examples/BDMedicationRequestExample.fsh @@ -0,0 +1,41 @@ +Instance: BDMedicationRequestExample +InstanceOf: BDMedicationRequest +Title: "Medication Request Example — Marvelous Fe Prescription" +Description: """ +Example BDMedicationRequest instance prescribing Marvelous Fe. Demonstrates +the full prescription chain: BDMedicationRequest → BDMedication → DGDA code +→ ICD-11 substance ingredients. Route of administration coded using HL7 v3 +RouteOfAdministration. +""" +Usage: #example + +* identifier[0].system = "https://fhir.dghs.gov.bd/identifier/prescription" +* identifier[0].value = "RX-2024-BD-000001" + +* status = #active +* intent = #order + +* medicationReference = Reference(BDMedicationExample) + +* subject = Reference(BDPatientExample) +* subject.display = "Example Patient" + +* encounter = Reference(BDEncounterExample) +* encounter.display = "Example Outpatient Encounter" + +* authoredOn = "2024-11-01T10:30:00+06:00" + +* requester = Reference(BDPractitionerExample) +* requester.display = "Example Practitioner" + +* dosageInstruction[0].text = "Take 1 tablet daily after meals" +* dosageInstruction[0].timing.repeat.frequency = 1 +* dosageInstruction[0].timing.repeat.period = 1 +* dosageInstruction[0].timing.repeat.periodUnit = #d +* dosageInstruction[0].route.coding[0].system = "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration" +* dosageInstruction[0].route.coding[0].code = #PO +* dosageInstruction[0].route.coding[0].display = "Swallow, oral" +* dosageInstruction[0].doseAndRate[0].doseQuantity.value = 1 +* dosageInstruction[0].doseAndRate[0].doseQuantity.unit = "tablet" +* dosageInstruction[0].doseAndRate[0].doseQuantity.system = "http://unitsofmeasure.org" +* dosageInstruction[0].doseAndRate[0].doseQuantity.code = #{tbl} \ No newline at end of file diff --git a/input/fsh/profile/BDLabPanelObservation.fsh b/input/fsh/profile/BDLabPanelObservation.fsh new file mode 100644 index 0000000..0c0882a --- /dev/null +++ b/input/fsh/profile/BDLabPanelObservation.fsh @@ -0,0 +1,77 @@ +Profile: BDLabPanelObservationProfile +Id: bd-lab-panel-observation +Parent: bd-observation +Title: "Bangladesh Laboratory Panel Observation" +Description: """ +Profile for laboratory panel (order-level) Observations in Bangladesh. +Represents an ordered laboratory test panel (e.g. CBC, LFT, RFT) as the +parent Observation in a hasMember hierarchy. + +Usage: + - Observation.code is the panel/order code (from BD LOINC Lab Panels ValueSet) + - Observation.hasMember references individual result Observations + (bd-lab-result-observation) for each component + - Observation.value[x] is prohibited — panels do not carry a direct result value + - Observation.category is fixed to 'laboratory' + +FHIR hasMember pattern: + DiagnosticReport.result --> bd-lab-panel-observation + └── hasMember --> bd-lab-result-observation (x N) +""" + +* ^url = "https://fhir.dghs.gov.bd/core/StructureDefinition/bd-lab-panel-observation" +* ^version = "0.1.0" +* ^status = #draft + +// ── Identifier ──────────────────────────────────────────────────────────── +// Lab panels must carry an identifier (accession number or order ID). +* identifier 1..* MS +* identifier.value 1..1 + +// ── Category ────────────────────────────────────────────────────────────── +// Fixed to 'laboratory' for all lab panel observations. +* category = http://terminology.hl7.org/CodeSystem/observation-category#laboratory +* category ^definition = "Fixed to 'laboratory' for laboratory panel observations" + +// ── Code ────────────────────────────────────────────────────────────────── +// Bound to BD LOINC Lab Panels ValueSet — orderable panel codes only. +* code 1..1 MS +* code from https://fhir.dghs.gov.bd/core/ValueSet/loinc-lab-panels (extensible) +* code ^definition = "LOINC panel/order code for this laboratory panel" +* code ^comment = "E.g. 58410-2 CBC panel, 24323-8 Comprehensive metabolic panel" + +// ── Status ──────────────────────────────────────────────────────────────── +// Restrict to statuses relevant to lab reporting. +* status from http://hl7.org/fhir/ValueSet/observation-status (required) + +// ── Effective ───────────────────────────────────────────────────────────── +// When the panel was performed — required for lab context. +* effective[x] 1..1 MS +* effective[x] only dateTime or Period +* effectiveDateTime ^definition = "Date/time the laboratory panel was performed" + +// ── Value[x] ────────────────────────────────────────────────────────────── +// Panels do not carry a direct result value — results are in hasMember children. +* value[x] 0..0 + +// ── hasMember ───────────────────────────────────────────────────────────── +// Must reference at least one component result Observation. +// Typed to bd-lab-result-observation. +* hasMember 1..* MS +* hasMember only Reference(BDLabResultObservationProfile) +* hasMember ^definition = "References to individual component result Observations for this panel" +* hasMember ^comment = "Each hasMember entry is a bd-lab-result-observation" + +// ── derivedFrom ─────────────────────────────────────────────────────────── +// Panels are not derived from other observations — prohibited at this level. +* derivedFrom 0..0 + +// ── Specimen ────────────────────────────────────────────────────────────── +// SHOULD be present for laboratory panels per IPS alignment. +* specimen 0..1 MS +* specimen ^definition = "Specimen collected for this laboratory panel" +* specimen ^comment = "Should be present when specimen information is available" + +// ── Note ────────────────────────────────────────────────────────────────── +* note 0..* MS +* note ^definition = "Comments about the laboratory panel" diff --git a/input/fsh/profile/BDLabReport.fsh b/input/fsh/profile/BDLabReport.fsh new file mode 100644 index 0000000..62a1782 --- /dev/null +++ b/input/fsh/profile/BDLabReport.fsh @@ -0,0 +1,122 @@ +Profile: BDLabReportProfile +Id: bd-lab-report +Parent: DiagnosticReport +Title: "Bangladesh Laboratory Report" +Description: """ +Profile for laboratory DiagnosticReport in Bangladesh, aligned with IPS +(International Patient Summary) DiagnosticReport pattern. + +Usage: + - Represents a complete laboratory report for a patient encounter + - DiagnosticReport.result references panel-level Observations + (bd-lab-panel-observation) or standalone result Observations + (bd-lab-result-observation) where no panel grouping exists + - DiagnosticReport.code is fixed to LOINC 11502-2 (Laboratory report) + - specimen is SHOULD (MS, 0..*) + +Report structure: + bd-lab-report (DiagnosticReport) + ├── result --> bd-lab-panel-observation + │ └── hasMember --> bd-lab-result-observation (x N) + └── result --> bd-lab-result-observation (standalone, no panel) +""" + +* ^url = "https://fhir.dghs.gov.bd/core/StructureDefinition/bd-lab-report" +* ^version = "0.1.0" +* ^status = #draft + +// ── Identifier ──────────────────────────────────────────────────────────── +// Lab reports must carry an accession number or report ID. +* identifier 1..* MS +* identifier.value 1..1 + +// ── Status ──────────────────────────────────────────────────────────────── +* status 1..1 +* status from http://hl7.org/fhir/ValueSet/diagnostic-report-status (required) +* status ^definition = "Status of the laboratory report" +* status ^comment = "E.g. registered, partial, preliminary, final, amended, corrected" + +// ── Category ────────────────────────────────────────────────────────────── +// Fixed to LAB (laboratory) category. +* category 1..* MS +* category = http://terminology.hl7.org/CodeSystem/v2-0074#LAB "Laboratory" +* category ^definition = "Fixed to 'LAB' for laboratory diagnostic reports" + +// ── Code ────────────────────────────────────────────────────────────────── +// Fixed to LOINC 11502-2 (Laboratory report) — IPS-aligned. +* code 1..1 MS +* code = http://loinc.org#11502-2 "Laboratory report" +* code ^definition = "Fixed to LOINC 11502-2 — Laboratory report" + +// ── Subject ─────────────────────────────────────────────────────────────── +* subject 1..1 MS +* subject only Reference(Patient) +* subject.reference 1..1 MS +* subject.display 1..1 MS +* subject ^definition = "Reference to the Patient this report is about" + +// ── Encounter ───────────────────────────────────────────────────────────── +* encounter 1..1 MS +* encounter.reference 1..1 MS +* encounter ^definition = "Reference to the Encounter during which this report was ordered" + +// ── Effective ───────────────────────────────────────────────────────────── +// When the report was clinically relevant — required for lab context. +* effective[x] 1..1 MS +* effective[x] only dateTime or Period +* effectiveDateTime ^definition = "Date/time the specimen was collected or the report period" + +// ── Issued ──────────────────────────────────────────────────────────────── +// Date/time the report was released — required for lab reports. +* issued 1..1 MS +* issued ^definition = "Date/time the report was issued by the laboratory" + +// ── Performer ───────────────────────────────────────────────────────────── +// Who performed the laboratory test (laboratory organization or practitioner). +// Kept flexible — may be Organization, Practitioner, or PractitionerRole. +* performer 1..* MS +* performer ^definition = "Laboratory or practitioner who performed the test" +* performer ^comment = "Typically the laboratory Organization. May also include the responsible Practitioner." + +// ── Results Interpreter ─────────────────────────────────────────────────── +// Who interpreted the results (clinician, pathologist). +// Optional but MustSupport — include when a formal interpretation was made. +* resultsInterpreter 0..* MS +* resultsInterpreter ^definition = "Clinician or pathologist who interpreted the laboratory results" +* resultsInterpreter ^comment = "Include when a formal interpretation or authorisation was made by a named clinician." + +// ── Specimen ────────────────────────────────────────────────────────────── +// SHOULD be present per IPS alignment — MustSupport, optional cardinality. +* specimen 0..* MS +* specimen ^definition = "Specimen(s) used for this laboratory report" +* specimen ^comment = "Should be present when specimen information is available. IPS alignment: SHOULD." + +// ── Result ──────────────────────────────────────────────────────────────── +// References panel-level Observations or standalone result Observations. +// At least one result is required for a meaningful report. +* result 1..* MS +* result only Reference(BDLabPanelObservationProfile or BDLabResultObservationProfile) +* result ^definition = "References to Observation resources that are part of this report" +* result ^comment = """ +Use BDLabPanelObservationProfile for ordered panels (CBC, LFT, RFT, etc.) +where individual results are grouped under a panel using hasMember. +Use BDLabResultObservationProfile directly for standalone results +that are not part of a named panel. +""" + +// ── Conclusion ──────────────────────────────────────────────────────────── +// Free-text clinical interpretation of the overall report. +* conclusion 0..1 MS +* conclusion ^definition = "Clinical interpretation or summary of the laboratory report" + +// ── Conclusion Code ─────────────────────────────────────────────────────── +// Coded clinical finding — may reference ICD-11 diagnosis codes. +* conclusionCode 0..* MS +* conclusionCode ^definition = "Coded representation of the clinical conclusion" +* conclusionCode ^comment = "May use ICD-11 MMS codes consistent with bd-condition-icd11-diagnosis-valueset" + +// ── Presented Form ──────────────────────────────────────────────────────── +// Attach the original PDF or HL7 CDA report if available. +* presentedForm 0..* MS +* presentedForm ^definition = "Entire report as issued — e.g. PDF attachment" +* presentedForm ^comment = "Include the original report document when available" diff --git a/input/fsh/profile/BDLabResultObservation.fsh b/input/fsh/profile/BDLabResultObservation.fsh new file mode 100644 index 0000000..0557c4e --- /dev/null +++ b/input/fsh/profile/BDLabResultObservation.fsh @@ -0,0 +1,103 @@ +Profile: BDLabResultObservationProfile +Id: bd-lab-result-observation +Parent: bd-observation +Title: "Bangladesh Laboratory Result Observation" +Description: """ +Profile for individual laboratory result (component-level) Observations +in Bangladesh. Represents a single test result within a laboratory panel +(e.g. Haemoglobin within a CBC panel). + +Usage: + - Observation.code is the result/component code (from BD LOINC Lab Results ValueSet) + - Observation.value[x] is required — every leaf result must carry a value + - Observation.hasMember is prohibited — leaf results cannot group further + - Observation.derivedFrom references the parent panel Observation + - Observation.category is fixed to 'laboratory' + +FHIR hasMember pattern: + bd-lab-panel-observation + └── hasMember --> bd-lab-result-observation (this profile) + +Coded results (Ord/Nom scale): + Use valueCodeableConcept with codes from BD LOINC Answer Lists ValueSet. +""" + +* ^url = "https://fhir.dghs.gov.bd/core/StructureDefinition/bd-lab-result-observation" +* ^version = "0.1.0" +* ^status = #draft + +// ── Identifier ──────────────────────────────────────────────────────────── +// Result observations carry the accession number or result ID. +* identifier 1..* MS +* identifier.value 1..1 + +// ── Category ────────────────────────────────────────────────────────────── +// Fixed to 'laboratory' for all lab result observations. +* category = http://terminology.hl7.org/CodeSystem/observation-category#laboratory +* category ^definition = "Fixed to 'laboratory' for laboratory result observations" + +// ── Code ────────────────────────────────────────────────────────────────── +// Bound to BD LOINC Lab Results ValueSet — leaf result codes only. +* code 1..1 MS +* code from https://fhir.dghs.gov.bd/core/ValueSet/loinc-lab-results (extensible) +* code ^definition = "LOINC result/component code for this individual laboratory result" +* code ^comment = "E.g. 718-7 Hemoglobin, 2160-0 Creatinine" + +// ── Status ──────────────────────────────────────────────────────────────── +* status from http://hl7.org/fhir/ValueSet/observation-status (required) + +// ── Effective ───────────────────────────────────────────────────────────── +* effective[x] 1..1 MS +* effective[x] only dateTime or Period +* effectiveDateTime ^definition = "Date/time the result was obtained" + +// ── Value[x] ────────────────────────────────────────────────────────────── +// Required — every leaf result must carry a value. +* value[x] 1..1 MS +* value[x] ^definition = "The actual result value for this laboratory test" + +// Numeric results (Qn scale) — UCUM units required +* valueQuantity MS +* valueQuantity.value 1..1 +* valueQuantity.unit 1..1 +* valueQuantity.system 1..1 +* valueQuantity.system = "http://unitsofmeasure.org" +* valueQuantity.code 1..1 +* valueQuantity ^comment = "Use for quantitative (Qn scale) results. Units must be UCUM." + +// Coded results (Ord/Nom scale) — bound to LOINC Answer Lists +* valueCodeableConcept MS +* valueCodeableConcept from https://fhir.dghs.gov.bd/core/ValueSet/loinc-answer-lists (extensible) +* valueCodeableConcept ^comment = "Use for ordinal or nominal (Ord/Nom scale) results." + +// ── hasMember ───────────────────────────────────────────────────────────── +// Leaf results cannot group further observations. +* hasMember 0..0 + +// ── derivedFrom ─────────────────────────────────────────────────────────── +// References the parent panel Observation. +* derivedFrom 0..* MS +* derivedFrom only Reference(BDLabPanelObservationProfile) +* derivedFrom ^definition = "Reference to the parent panel Observation this result belongs to" + +// ── Interpretation ──────────────────────────────────────────────────────── +// Strongly recommended for lab results — High, Low, Normal, etc. +* interpretation 0..* MS +* interpretation from http://hl7.org/fhir/ValueSet/observation-interpretation (extensible) +* interpretation ^definition = "Clinical interpretation of the result value" +* interpretation ^comment = "E.g. H (High), L (Low), N (Normal), A (Abnormal)" + +// ── Reference Range ─────────────────────────────────────────────────────── +* referenceRange 0..* MS +* referenceRange ^definition = "Normal reference range for this result" +* referenceRange ^comment = "Should be present when reference ranges are known" + +// ── Specimen ────────────────────────────────────────────────────────────── +// May reference the same specimen as the parent panel. +* specimen 0..1 MS +* specimen ^definition = "Specimen used for this result observation" +* specimen ^comment = "Should be consistent with the parent panel specimen" + +// ── Note ────────────────────────────────────────────────────────────────── +* note 0..* MS +* note ^definition = "Comments about this individual result" diff --git a/input/fsh/profile/BDMedication.fsh b/input/fsh/profile/BDMedication.fsh index 9b26198..ab6659f 100644 --- a/input/fsh/profile/BDMedication.fsh +++ b/input/fsh/profile/BDMedication.fsh @@ -1,17 +1,76 @@ -// @Name: Profile -// @Description: Example of a profile of the Medication resource. This example includes a few of the most commonly used constraints and documentation features of FHIR profiles. - Profile: BDMedication Id: bd-medication Parent: Medication -Title: "Medication Profile for Bangladesh-V2" -Description: "Profile of Medication Bangladesh Standard V2" +Title: "Medication Profile for Bangladesh" +Description: """ +Profile of the Medication resource for the Bangladesh National Health Information +Exchange (HIE). Drug products are coded using the DGDA Drug Registry maintained +by the Drug Registration Authority of Bangladesh and served via the national OCL +terminology server at https://tr.ocl.dghs.gov.bd. -* form 1..1 MS -* form from BDMedicationDoseFormVS +Ingredient coding uses ICD-11 MMS substance codes (XM-prefix) to support +International Patient Summary (IPS) generation and cross-border data exchange. +Ingredient data is system-populated from OCL Has-active-ingredient mappings and +is not required to be entered manually by clinicians. + +Combination drugs are supported via the repeating `ingredient` element. +Unmatched ingredients (not yet mapped to ICD-11 substances) may be represented +using `ingredient.itemCodeableConcept.text` without a coded value. + +Dose form is optional and should be coded using EDQM Standard Terms when +populated. Dose form is derivable from the DGDA drug concept via OCL lookup. +A DGDA plain text dose form to EDQM code mapping is planned for a future +IG version. +""" * code 1..1 MS -* code from BDMedicationVS +* code from BDDGDADrugsVS (required) +* code ^short = "DGDA registered drug product code" +* code ^definition = """ +The DGDA drug registry code identifying the finished pharmaceutical product. +Concept ID format: {DAR-number}--{trade-name-slug} +Example: 353-0026-039--marvelous-fe +""" +* code.text 1..1 MS +* code.text ^short = "Trade name of the drug product" +* code.text ^definition = """ +The trade name of the drug product as registered with DGDA. Mandatory for +human readability in IPS documents and cross-border data exchange scenarios. +""" -* ingredient 1..* MS -* ingredient.strength 1..1 MS \ No newline at end of file +* form 0..1 MS +* form from BDMedicationDoseFormVS (preferred) +* form ^short = "Pharmaceutical dose form — EDQM Standard Terms (optional)" +* form ^definition = """ +The pharmaceutical dose form of the drug product. Optional in this profile +as dose form is carried as plain text in the DGDA drug concept and is +derivable via OCL lookup. When populated, EDQM Standard Terms codes served +from the national OCL terminology server should be used. +A DGDA dose form to EDQM mapping is planned for a future IG version. +""" + +* ingredient MS +* ingredient ^short = "Active ingredient(s) of the drug product" +* ingredient ^definition = """ +Active pharmaceutical ingredients of the drug product, coded using ICD-11 MMS +substance codes (XM-prefix). Populated automatically by clinical systems via +OCL Has-active-ingredient mappings. Combination drugs will carry multiple +ingredient entries. Unmatched ingredients may use text only without a coded value. +""" +* ingredient.item[x] only CodeableConcept +* ingredient.itemCodeableConcept 1..1 MS +* ingredient.itemCodeableConcept from BDICD11SubstancesVS (extensible) +* ingredient.itemCodeableConcept ^short = "ICD-11 substance code for the ingredient" +* ingredient.itemCodeableConcept ^definition = """ +ICD-11 MMS substance code (XM-prefix) identifying the active ingredient. +Source value set: https://fhir.dghs.gov.bd/core/ValueSet/icd11-substances-valueset +served from the national OCL terminology server. +For ingredients not yet mapped to ICD-11 substances, use text only. +""" +* ingredient.strength 0..1 +* ingredient.strength ^short = "Strength of the ingredient (optional)" +* ingredient.strength ^definition = """ +Strength of the active ingredient. Optional in this profile as strength data +is maintained in the DGDA registry and accessible via OCL. May be populated +by dispensing systems for precision medication management. +""" \ No newline at end of file diff --git a/input/fsh/profile/BDMedicationRequest.fsh b/input/fsh/profile/BDMedicationRequest.fsh index 0f97eb9..bb732bf 100644 --- a/input/fsh/profile/BDMedicationRequest.fsh +++ b/input/fsh/profile/BDMedicationRequest.fsh @@ -1,24 +1,64 @@ -// @Name: Profile -// @Description: Example of a profile of the MedicationRequest resource. This example includes a few of the most commonly used constraints and documentation features of FHIR profiles. - Profile: BDMedicationRequest Id: bd-medication-request Parent: MedicationRequest -Title: "Medication Request Profile for Bangladesh-V2" -Description: "Profile of MedicationRequest Bangladesh Standard V2" +Title: "Medication Request Profile for Bangladesh" +Description: """ +Profile of the MedicationRequest resource for the Bangladesh National Health +Information Exchange (HIE). Prescriptions must reference a `BDMedication` +resource coded against the DGDA Drug Registry, ensuring all prescribed +medications are traceable to DGDA-registered drug products. + +This profile constrains medication references to `BDMedication` only. +Inline `medicationCodeableConcept` is not permitted — all medication data +must be carried in a referenced `BDMedication` resource to support ingredient +coding for IPS and cross-border data exchange. + +Route of administration is coded using HL7 v3 RouteOfAdministration served +via the national OCL terminology server. +""" + +* identifier 1..* MS +* identifier ^short = "Prescription identifier" +* identifier ^definition = """ +Business identifier for this prescription. At least one identifier is required +to support prescription tracking within the Bangladesh HIE. +""" -* identifier 1..* * medication[x] 1..1 MS -* medication[x] only Reference(BDMedication) or CodeableConcept +* medication[x] only Reference(BDMedication) +* medication[x] ^short = "Reference to DGDA-registered medication" +* medication[x] ^definition = """ +Reference to a BDMedication resource identifying the prescribed drug product. +The referenced BDMedication must carry a valid DGDA drug registry code. +Inline CodeableConcept is not permitted in this profile. +""" + +* subject 1..1 MS * subject only Reference(BDPatientProfile) +* subject ^short = "Patient for whom the medication is prescribed" * encounter 0..1 MS * encounter only Reference(BDEncounterProfile) -* encounter ^definition = "The encounter during which this prescription was created." -* authoredOn 1..1 -* requester 1..1 +* encounter ^short = "Encounter during which this prescription was created" +* encounter ^definition = """ +The encounter during which this prescription was created. Should be populated +for inpatient and outpatient prescriptions where an encounter record exists. +""" + +* authoredOn 1..1 MS +* authoredOn ^short = "Date and time the prescription was authored" + +* requester 1..1 MS +* requester only Reference(BDPractitioner or BDOrganization) +* requester ^short = "Practitioner or organisation that authored the prescription" * reportedReference only Reference(BDPractitioner or BDOrganization or BDPatientProfile) -* requester only Reference(BDPractitioner or BDOrganization) + * priorPrescription only Reference(BDMedicationRequest) -* basedOn only Reference(BDMedicationRequest or ServiceRequest or CarePlan or ImmunizationRecommendation) \ No newline at end of file +* priorPrescription ^short = "Reference to a prior prescription this replaces" + +* basedOn only Reference(BDMedicationRequest or ServiceRequest or CarePlan or ImmunizationRecommendation) +* basedOn ^short = "Plan or request this prescription is based on" + +* dosageInstruction.route from BDRouteOfAdministrationVS (required) +* dosageInstruction.route ^short = "Route of administration coded using HL7 v3 RouteOfAdministration" \ No newline at end of file diff --git a/input/fsh/profile/BDObservation.fsh b/input/fsh/profile/BDObservation.fsh index 53d5f7e..6e3e913 100644 --- a/input/fsh/profile/BDObservation.fsh +++ b/input/fsh/profile/BDObservation.fsh @@ -2,51 +2,83 @@ Profile: BDObservationProfile Id: bd-observation Parent: Observation Title: "Bangladesh Observation Profile" -Description: "Bangladesh Observation Profile" -* ^url = "https://fhir.dghs.gov.bd/core/StructureDefinition/bd-observation" -* ^version = "1.0.0" -* ^status = #active +Description: """ +Base observation profile for Bangladesh. This is an abstract-style base profile +from which all BD-Core observation profiles are derived. It is not intended to +be used directly in clinical resources — use a derived profile instead. -* identifier 1..* MS +Derived profiles (v0.4.0): + - bd-lab-panel-observation : Laboratory panel/order (hasMember pattern) + - bd-lab-result-observation : Laboratory leaf result (child of hasMember) + +Planned derived profiles (v0.5.0+): + - bd-vital-signs-observation + - bd-exam-observation +""" + +* ^url = "https://fhir.dghs.gov.bd/core/StructureDefinition/bd-observation" +* ^version = "2.0.0" +* ^status = #draft + +// ── Identifier ──────────────────────────────────────────────────────────── +// 0..* at base — not all observation types carry identifiers. +// Child profiles (e.g. lab results) constrain to 1..*. +* identifier 0..* MS * identifier.value 1..1 +// ── Status ──────────────────────────────────────────────────────────────── * status 1..1 -* partOf 0..* - +// ── Category ────────────────────────────────────────────────────────────── +// Preferred binding at base — child profiles fix to specific category codes +// (e.g. laboratory, vital-signs). Required binding here would block child +// profiles from narrowing to a fixed category slice. * category 1..* MS -* category from http://hl7.org/fhir/ValueSet/observation-category (required) -* category ^definition = "Type of category" -* category ^comment = "E.g. vital, physical examination" +* category from http://hl7.org/fhir/ValueSet/observation-category (preferred) +* category ^definition = "Type of observation category" +* category ^comment = "E.g. laboratory, vital-signs, exam. Child profiles fix this to a specific value." +// ── Code ────────────────────────────────────────────────────────────────── +// Extensible binding at base — child profiles bind to narrower ValueSets +// (e.g. BD LOINC lab panels, BD LOINC lab results). Required binding here +// would prevent child profiles from using a subset binding. * code 1..1 MS -* code from http://hl7.org/fhir/ValueSet/observation-codes (required) -* code ^definition = "Type of test/measurement" -* code ^comment = "E.g., Hb, RBS, CBC" +* code from http://hl7.org/fhir/ValueSet/observation-codes (extensible) +* code ^definition = "Type of observation / test / measurement" +* code ^comment = "E.g. Hb, RBS, CBC. Child profiles bind to specific ValueSets." -// Subject: Reference to Patient Profile (Required) +// ── Subject ─────────────────────────────────────────────────────────────── * subject 1..1 MS +* subject only Reference(Patient) * subject.reference 1..1 MS * subject.display 1..1 MS * subject.identifier 0..1 -* subject ^definition = "Reference to Patient Profile" +* subject ^definition = "Reference to the Patient this observation is about" * subject ^comment = "EX: http://mci.mcishr.dghs.gov.bd/api/v1/patients/98002412586" - +// ── Encounter ───────────────────────────────────────────────────────────── * encounter 1..1 MS * encounter.reference 1..1 MS -* encounter ^definition = "Reference to Patient Profile" -* encounter ^comment = "EX: uuid:34c38499-58ab-41e0-8e94-c3931491ad0e - bundle encounter uuid from local" +* encounter ^definition = "Reference to the Encounter during which this observation was made" +* encounter ^comment = "EX: uuid:34c38499-58ab-41e0-8e94-c3931491ad0e" +// ── Performer ───────────────────────────────────────────────────────────── * performer 1..* * performer.reference 1..1 -// Value[x]: Result value (Optional, but constrained) +// ── Part Of ─────────────────────────────────────────────────────────────── +* partOf 0..* + +// ── Value[x] ────────────────────────────────────────────────────────────── +// 0..1 at base — child profiles constrain presence and type. +// Panel observations set value[x] to 0..0. +// Result observations set value[x] to 1..1. * value[x] 0..1 * value[x] ^definition = "Result value (Quantity, string, code, boolean, etc.)" * valueQuantity 0..1 * valueQuantity ^comment = "If numeric, must include UCUM unit" * valueQuantity.system 0..1 +* valueQuantity.system = "http://unitsofmeasure.org" * valueQuantity.code 0..1 * valueString 0..1 * valueCodeableConcept 0..1 @@ -59,26 +91,43 @@ Description: "Bangladesh Observation Profile" * valueDateTime 0..1 * valuePeriod 0..1 +// ── Interpretation ──────────────────────────────────────────────────────── +// Extensible at base — required was too strict for general observation use. * interpretation 0..* -* interpretation from http://hl7.org/fhir/ValueSet/observation-interpretation (required) -* interpretation ^definition = "Type of test/measurement" -* interpretation ^comment = "E.g.: High, low, normal, etc" +* interpretation from http://hl7.org/fhir/ValueSet/observation-interpretation (extensible) +* interpretation ^definition = "Assessment of the observation result" +* interpretation ^comment = "E.g. High, Low, Normal" +// ── Method ──────────────────────────────────────────────────────────────── +// Extensible at base — required was too strict for general observation use. * method 0..1 -* method from http://hl7.org/fhir/ValueSet/observation-methods (required) +* method from http://hl7.org/fhir/ValueSet/observation-methods (extensible) * method ^definition = "Type of observation method" -* method ^comment = "E.g.: Technique, Total measurement" +* method ^comment = "E.g. Technique, Total measurement" -// Issued: Date/time result was issued (Optional) +// ── Issued ──────────────────────────────────────────────────────────────── * issued 0..1 -* issued ^definition = "Date/time result was issued" +* issued ^definition = "Date/time the result was issued" -// Reference Range: Normal reference range (Optional) +// ── Reference Range ─────────────────────────────────────────────────────── * referenceRange 0..* -* referenceRange ^definition = "Normal reference range" -* referenceRange ^comment = "Optional" +* referenceRange ^definition = "Normal reference range for the observation" -// Specimen: Specimen used for the observation (Optional) -* specimen 0..1 -* specimen ^definition = "Specimen used for the observation" -* specimen ^comment = "Optional" \ No newline at end of file +// ── Specimen ────────────────────────────────────────────────────────────── +// MustSupport at base — relevant for lab, pathology, and future imaging. +* specimen 0..1 MS +* specimen ^definition = "Specimen used for this observation" + +// ── hasMember ───────────────────────────────────────────────────────────── +// Defined at base to support the panel/component pattern. +// bd-lab-panel-observation constrains this to 1..* typed references. +// bd-lab-result-observation constrains this to 0..0. +* hasMember 0..* MS +* hasMember ^definition = "References to component result Observations that belong to this panel" +* hasMember ^comment = "Used in panel-type Observations. Leaf result Observations must not use hasMember." + +// ── derivedFrom ─────────────────────────────────────────────────────────── +// Defined at base to support child results referencing their parent panel. +* derivedFrom 0..* MS +* derivedFrom ^definition = "References to the panel Observation from which this result is derived" +* derivedFrom ^comment = "Used in leaf result Observations to reference their parent panel." diff --git a/input/fsh/valueSets/BDDGDADrugsVS.fsh b/input/fsh/valueSets/BDDGDADrugsVS.fsh new file mode 100644 index 0000000..ba196bf --- /dev/null +++ b/input/fsh/valueSets/BDDGDADrugsVS.fsh @@ -0,0 +1,34 @@ +ValueSet: BDDGDADrugsVS +Id: dgda-registered-drugs +Title: "DGDA Registered Drugs Value Set" +Description: """ +Value set containing all registered drug products from the Drug Registration +Authority (DGDA) of Bangladesh. This value set includes 39,196 finished +pharmaceutical drug product concepts maintained in the national OCL terminology +server at https://tr.ocl.dghs.gov.bd. + +This value set is the normative binding for `BDMedication.code` and represents +the only permitted drug coding vocabulary for medication resources in the +Bangladesh national health information exchange. + +Validation is performed via `$validate-code` and `$lookup` against the national +OCL terminology server. `$expand` is not supported for this value set due to its +size. + +**Source collection:** dgda-registered-drugs-valueset (MoHFW organisation, OCL) +**OCL collection canonical:** https://dgda.gov.bd/fhir/ValueSet/registered-drugs +**OCL FHIR endpoint:** https://tr.ocl.dghs.gov.bd/orgs/MoHFW/collections/dgda-registered-drugs-valueset/ +""" + +* ^url = "https://dgda.gov.bd/fhir/ValueSet/registered-drugs" +* ^version = "v1.0.0" +* ^status = #active +* ^experimental = false +* ^publisher = "Directorate General of Drug Administration (DGDA), Government of Bangladesh" +* ^contact.name = "DGHS Health Informatics Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^immutable = false + +* include codes from system "https://dgda.gov.bd/drug-registry" \ No newline at end of file diff --git a/input/fsh/valueSets/BDICD11SubstancesVS.fsh b/input/fsh/valueSets/BDICD11SubstancesVS.fsh new file mode 100644 index 0000000..210ad3f --- /dev/null +++ b/input/fsh/valueSets/BDICD11SubstancesVS.fsh @@ -0,0 +1,32 @@ +ValueSet: BDICD11SubstancesVS +Id: icd11-substances-valueset +Title: "ICD-11 Substances Value Set" +Description: """ +Value set containing all ICD-11 MMS substance and medicament concepts +(XM-prefix concept class: Substance) maintained in the national OCL +terminology server at https://tr.ocl.dghs.gov.bd. + +This value set contains 7,776 substance concepts and is used for coding +active pharmaceutical ingredients in the `BDMedication.ingredient` element +to support IPS generation and cross-border data exchange. + +This value set is defined and maintained in OCL. It is declared here as a +minimal stub to allow IG publisher binding resolution only. + +**OCL collection canonical:** https://fhir.dghs.gov.bd/core/ValueSet/icd11-substances-valueset +**OCL FHIR endpoint:** https://tr.ocl.dghs.gov.bd/orgs/MoHFW/collections/icd11-substances-valueset/ +""" + +* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/icd11-substances-valueset" +* ^version = "2025-01" +* ^status = #active +* ^experimental = false +* ^publisher = "World Health Organization (WHO) — served via DGHS National OCL" +* ^contact.name = "DGHS Health Informatics Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^immutable = false + +* include codes from system "http://id.who.int/icd/release/11/mms" + where concept-class = "Substance" \ No newline at end of file diff --git a/input/fsh/valueSets/BDLoincAnswerListsVS.fsh b/input/fsh/valueSets/BDLoincAnswerListsVS.fsh new file mode 100644 index 0000000..e792f94 --- /dev/null +++ b/input/fsh/valueSets/BDLoincAnswerListsVS.fsh @@ -0,0 +1,22 @@ +ValueSet: BDLoincAnswerListsVS +Id: bd-loinc-answer-lists-valueset +Title: "Bangladesh LOINC Answer Lists ValueSet" +Description: "LOINC answer codes (LA-prefixed) and answer list groupers (LL-prefixed) +for Bangladesh laboratory results. Includes all answer codes referenced by in-scope +lab result codes from LOINC 2.82. Used as Observation.valueCodeableConcept in +bd-lab-result-observation for ordinal and nominal scale results." + +* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-loinc-answer-lists-valueset" +* ^status = #draft +* ^experimental = true +* ^version = "0.1.0" +* ^publisher = "Directorate General of Health Services (DGHS), MoHFW, Bangladesh" +* ^contact.name = "DGHS Health Information Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^copyright = "This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at http://loinc.org/terms-of-use." +* ^immutable = false + +* include codes from system http://loinc.org + where concept in "https://fhir.dghs.gov.bd/core/ValueSet/loinc-answer-lists" diff --git a/input/fsh/valueSets/BDLoincLabPanelsVS.fsh b/input/fsh/valueSets/BDLoincLabPanelsVS.fsh new file mode 100644 index 0000000..ce3d15e --- /dev/null +++ b/input/fsh/valueSets/BDLoincLabPanelsVS.fsh @@ -0,0 +1,21 @@ +ValueSet: BDLoincLabPanelsVS +Id: bd-loinc-lab-panels-valueset +Title: "Bangladesh LOINC Lab Panels ValueSet" +Description: "LOINC orderable laboratory panel codes for Bangladesh. Includes universal +lab order panel codes from LOINC 2.82 scoped to the Universal Lab Orders ValueSet. +Used as Observation.code in bd-lab-panel-observation." + +* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-loinc-lab-panels-valueset" +* ^status = #draft +* ^experimental = true +* ^version = "0.1.0" +* ^publisher = "Directorate General of Health Services (DGHS), MoHFW, Bangladesh" +* ^contact.name = "DGHS Health Information Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^copyright = "This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at http://loinc.org/terms-of-use." +* ^immutable = false + +* include codes from system http://loinc.org + where concept in "https://fhir.dghs.gov.bd/core/ValueSet/loinc-lab-panels" diff --git a/input/fsh/valueSets/BDLoincLabResultsVS.fsh b/input/fsh/valueSets/BDLoincLabResultsVS.fsh new file mode 100644 index 0000000..3637146 --- /dev/null +++ b/input/fsh/valueSets/BDLoincLabResultsVS.fsh @@ -0,0 +1,22 @@ +ValueSet: BDLoincLabResultsVS +Id: bd-loinc-lab-results-valueset +Title: "Bangladesh LOINC Lab Results ValueSet" +Description: "LOINC leaf-level laboratory result codes for Bangladesh. Includes +individual component/result codes from LOINC 2.82 scoped to the Universal Lab Orders +ValueSet. Excludes discouraged and non-laboratory codes. Used as Observation.code +in bd-lab-result-observation." + +* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-loinc-lab-results-valueset" +* ^status = #draft +* ^experimental = true +* ^version = "0.1.0" +* ^publisher = "Directorate General of Health Services (DGHS), MoHFW, Bangladesh" +* ^contact.name = "DGHS Health Information Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^copyright = "This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at http://loinc.org/terms-of-use." +* ^immutable = false + +* include codes from system http://loinc.org + where concept in "https://fhir.dghs.gov.bd/core/ValueSet/loinc-lab-results" diff --git a/input/fsh/valueSets/BDMedicationDoseFormVS.fsh b/input/fsh/valueSets/BDMedicationDoseFormVS.fsh new file mode 100644 index 0000000..24f16c8 --- /dev/null +++ b/input/fsh/valueSets/BDMedicationDoseFormVS.fsh @@ -0,0 +1,36 @@ +ValueSet: BDMedicationDoseFormVS +Id: bd-medication-dose-form +Title: "Medication Dose Form Value Set" +Description: """ +Value set containing pharmaceutical dose form concepts from the European +Directorate for the Quality of Medicines (EDQM) Standard Terms, domain: +Pharmaceutical Dose Forms (PDF). + +This value set is used to code the physical form of a medication product +in `BDMedication.form`. EDQM Standard Terms are maintained and versioned +by the Council of Europe and are the WHO-recommended international standard +for pharmaceutical dose form coding. + +Concepts are loaded into the national OCL terminology server at +https://tr.ocl.dghs.gov.bd under the MoHFW organisation as source EDQM-PDF. + +**Binding:** preferred on `BDMedication.form` — systems should use EDQM +codes when populating dose form, but omission is permitted. A mapping from +DGDA plain text dose forms to EDQM codes is planned for a future IG version. + +**Code system canonical:** https://standardterms.edqm.eu +**OCL source:** https://tr.ocl.dghs.gov.bd/#/orgs/MoHFW/sources/EDQM-PDF/ +""" + +* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-medication-dose-form" +* ^version = "1.0.0" +* ^status = #active +* ^experimental = false +* ^publisher = "DGHS Health Informatics Unit" +* ^contact.name = "DGHS Health Informatics Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^immutable = false + +* include codes from system "https://standardterms.edqm.eu" \ No newline at end of file diff --git a/input/fsh/valueSets/BDRouteOfAdministrationVS.fsh b/input/fsh/valueSets/BDRouteOfAdministrationVS.fsh new file mode 100644 index 0000000..5375409 --- /dev/null +++ b/input/fsh/valueSets/BDRouteOfAdministrationVS.fsh @@ -0,0 +1,31 @@ +ValueSet: BDRouteOfAdministrationVS +Id: bd-route-of-administration +Title: "Route of Administration Value Set" +Description: """ +Value set containing route of administration concepts from the HL7 Version 3 +RouteOfAdministration code system. + +This value set is used to code the route by which a medication is administered +in `MedicationRequest.dosageInstruction.route`. HL7 v3 RouteOfAdministration +is a license-free, internationally recognised vocabulary already embedded in +the FHIR ecosystem. + +Concepts are loaded into the national OCL terminology server at +https://tr.ocl.dghs.gov.bd under the MoHFW organisation. + +**Code system canonical:** http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration +**Binding:** required on `BDMedicationRequest.dosageInstruction.route` +""" + +* ^url = "https://fhir.dghs.gov.bd/core/ValueSet/bd-route-of-administration" +* ^version = "1.0.0" +* ^status = #active +* ^experimental = false +* ^publisher = "DGHS Health Informatics Unit" +* ^contact.name = "DGHS Health Informatics Unit" +* ^contact.telecom.system = #url +* ^contact.telecom.value = "https://dghs.gov.bd" +* ^jurisdiction = urn:iso:std:iso:3166#BD "Bangladesh" +* ^immutable = false + +* include codes from system "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration" \ No newline at end of file diff --git a/input/package-list.json b/input/package-list.json index 8dcbbd0..55cc518 100644 --- a/input/package-list.json +++ b/input/package-list.json @@ -11,7 +11,15 @@ "status": "ci-build", "current": true }, - { + { + "version": "0.3.0", + "date": "2026-03-08", + "desc": "ICD-11 MMS integration and minor bug fixes", + "path": "https://fhir.dghs.gov.bd/core/0.3.0/", + "status": "trial-use", + "sequence": "STU 1" + }, + { "version": "0.2.5", "date": "2025-10-06", "desc": "Minor bug fix release", diff --git a/package-list.json b/package-list.json index 8dcbbd0..55cc518 100644 --- a/package-list.json +++ b/package-list.json @@ -11,7 +11,15 @@ "status": "ci-build", "current": true }, - { + { + "version": "0.3.0", + "date": "2026-03-08", + "desc": "ICD-11 MMS integration and minor bug fixes", + "path": "https://fhir.dghs.gov.bd/core/0.3.0/", + "status": "trial-use", + "sequence": "STU 1" + }, + { "version": "0.2.5", "date": "2025-10-06", "desc": "Minor bug fix release",