fix(fhir): ensure strict canonical display values for SNOMED/LOINC/HL7 codings to prevent PHR validation errors
This commit is contained in:
parent
6525422af4
commit
a6bb1f7cda
|
|
@ -273,6 +273,7 @@ class DischargeFhirGenerator extends \App\Libraries\Abdm\Fhir\Generators\Abstrac
|
||||||
// ABDM PHR: use exam category for admission/discharge condition observations;
|
// ABDM PHR: use exam category for admission/discharge condition observations;
|
||||||
// vital-signs category only for true vital measurements.
|
// vital-signs category only for true vital measurements.
|
||||||
$obsCategoryCode = ($isAdm || $isDis) ? 'exam' : 'vital-signs';
|
$obsCategoryCode = ($isAdm || $isDis) ? 'exam' : 'vital-signs';
|
||||||
|
$obsCategoryCanonicalDisplay = ($isAdm || $isDis) ? 'Exam' : 'Vital Signs';
|
||||||
$obsCategorySystem = 'http://terminology.hl7.org/CodeSystem/observation-category';
|
$obsCategorySystem = 'http://terminology.hl7.org/CodeSystem/observation-category';
|
||||||
|
|
||||||
$coding = [];
|
$coding = [];
|
||||||
|
|
@ -314,7 +315,7 @@ class DischargeFhirGenerator extends \App\Libraries\Abdm\Fhir\Generators\Abstrac
|
||||||
'coding' => [[
|
'coding' => [[
|
||||||
'system' => $obsCategorySystem,
|
'system' => $obsCategorySystem,
|
||||||
'code' => $obsCategoryCode,
|
'code' => $obsCategoryCode,
|
||||||
'display' => $obsCategoryDisplay,
|
'display' => $obsCategoryCanonicalDisplay,
|
||||||
]],
|
]],
|
||||||
]],
|
]],
|
||||||
'code' => [
|
'code' => [
|
||||||
|
|
@ -595,12 +596,17 @@ class DischargeFhirGenerator extends \App\Libraries\Abdm\Fhir\Generators\Abstrac
|
||||||
|
|
||||||
$docTitle = trim((string) ($document['title'] ?? 'Clinical document'));
|
$docTitle = trim((string) ($document['title'] ?? 'Clinical document'));
|
||||||
$snomedCode = trim((string) ($document['snomed_code'] ?? ''));
|
$snomedCode = trim((string) ($document['snomed_code'] ?? ''));
|
||||||
|
$snomedDisplay = trim((string) ($document['snomed_display'] ?? ''));
|
||||||
if ($snomedCode === '') {
|
if ($snomedCode === '') {
|
||||||
if (stripos($docTitle, 'Bill') !== false || stripos($docTitle, 'Invoice') !== false) {
|
if (stripos($docTitle, 'Bill') !== false || stripos($docTitle, 'Invoice') !== false) {
|
||||||
$snomedCode = '823651000000106'; // Billing record
|
$snomedCode = '823651000000106'; // Billing record
|
||||||
|
$snomedDisplay = 'Billing record';
|
||||||
} else {
|
} else {
|
||||||
$snomedCode = '373942005'; // Discharge summary
|
$snomedCode = '373942005'; // Discharge summary
|
||||||
|
$snomedDisplay = 'Discharge summary';
|
||||||
}
|
}
|
||||||
|
} elseif ($snomedDisplay === '') {
|
||||||
|
$snomedDisplay = $docTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
$rawBytes = base64_decode($data);
|
$rawBytes = base64_decode($data);
|
||||||
|
|
@ -620,7 +626,7 @@ class DischargeFhirGenerator extends \App\Libraries\Abdm\Fhir\Generators\Abstrac
|
||||||
'type' => ['coding' => [[
|
'type' => ['coding' => [[
|
||||||
'system' => 'http://snomed.info/sct',
|
'system' => 'http://snomed.info/sct',
|
||||||
'code' => $snomedCode,
|
'code' => $snomedCode,
|
||||||
'display' => $docTitle,
|
'display' => $snomedDisplay,
|
||||||
]], 'text' => $docTitle],
|
]], 'text' => $docTitle],
|
||||||
'subject' => [
|
'subject' => [
|
||||||
'reference' => $patientRef,
|
'reference' => $patientRef,
|
||||||
|
|
@ -812,7 +818,7 @@ class DischargeFhirGenerator extends \App\Libraries\Abdm\Fhir\Generators\Abstrac
|
||||||
return ['code' => '8462-4', 'display' => 'Diastolic blood pressure'];
|
return ['code' => '8462-4', 'display' => 'Diastolic blood pressure'];
|
||||||
}
|
}
|
||||||
if (str_contains($upper, 'SPO2') || str_contains($upper, 'OXYGEN')) {
|
if (str_contains($upper, 'SPO2') || str_contains($upper, 'OXYGEN')) {
|
||||||
return ['code' => '2708-6', 'display' => 'Oxygen saturation in Arterial blood by Pulse oximetry'];
|
return ['code' => '59408-5', 'display' => 'Oxygen saturation in Arterial blood by Pulse oximetry'];
|
||||||
}
|
}
|
||||||
if (str_contains($upper, 'RBS') || str_contains($upper, 'RANDOM BLOOD SUGAR') || str_contains($upper, 'GLUCOSE')) {
|
if (str_contains($upper, 'RBS') || str_contains($upper, 'RANDOM BLOOD SUGAR') || str_contains($upper, 'GLUCOSE')) {
|
||||||
return ['code' => '2345-7', 'display' => 'Glucose [Mass/volume] in Serum or Plasma'];
|
return ['code' => '2345-7', 'display' => 'Glucose [Mass/volume] in Serum or Plasma'];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user