fix(abdm): enhance m2HealthInformationFetch and assembleFhirBundleForCareContext for standalone wellness records
This commit is contained in:
parent
49f6a8327d
commit
0b1d545a3c
|
|
@ -364,13 +364,28 @@ class AbdmGateway extends BaseController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$patRow = $this->findPatientMasterRow(0, $abhaAddress, $abhaId);
|
||||||
|
$patId = (int) ($patRow['id'] ?? 0);
|
||||||
|
$allAbhaIdentifiers = array_values(array_filter(array_unique([
|
||||||
|
$abhaLookup,
|
||||||
|
$abhaAddress,
|
||||||
|
$abhaId,
|
||||||
|
str_replace('-', '', $abhaId),
|
||||||
|
(string) ($patRow['abha_id'] ?? ''),
|
||||||
|
(string) ($patRow['abha_address'] ?? ''),
|
||||||
|
])));
|
||||||
|
|
||||||
$rows = [];
|
$rows = [];
|
||||||
if ($this->db->tableExists('patient_records')) {
|
if ($this->db->tableExists('patient_records')) {
|
||||||
$rows = $this->db->table('patient_records')
|
$pRecBuilder = $this->db->table('patient_records')
|
||||||
->select('record_id, patient_id, abha_id, consent_id, record_type, fhir_resource, created_at')
|
->select('record_id, patient_id, abha_id, consent_id, record_type, fhir_resource, created_at')
|
||||||
->where('abha_id', $abhaLookup)
|
->where('status', 'ACTIVE');
|
||||||
->where('status', 'ACTIVE')
|
if (! empty($allAbhaIdentifiers)) {
|
||||||
->orderBy('record_id', 'DESC')
|
$pRecBuilder->whereIn('abha_id', $allAbhaIdentifiers);
|
||||||
|
} else {
|
||||||
|
$pRecBuilder->where('abha_id', $abhaLookup);
|
||||||
|
}
|
||||||
|
$rows = $pRecBuilder->orderBy('record_id', 'DESC')
|
||||||
->limit(300)
|
->limit(300)
|
||||||
->get()
|
->get()
|
||||||
->getResultArray();
|
->getResultArray();
|
||||||
|
|
@ -384,14 +399,24 @@ class AbdmGateway extends BaseController
|
||||||
if (in_array('record_data', $healthFields, true) && in_array('care_context_reference', $healthFields, true)) {
|
if (in_array('record_data', $healthFields, true) && in_array('care_context_reference', $healthFields, true)) {
|
||||||
$healthBuilder = $this->db->table('health_records')
|
$healthBuilder = $this->db->table('health_records')
|
||||||
->select('id, care_context_reference, record_data, entity_type, entity_id, push_status')
|
->select('id, care_context_reference, record_data, entity_type, entity_id, push_status')
|
||||||
->where('abha_id', $abhaLookup)
|
|
||||||
->where('care_context_reference !=', '')
|
->where('care_context_reference !=', '')
|
||||||
->whereIn('push_status', ['local_discovery_ready', 'queued', 'pushed', 'linked'])
|
->whereIn('push_status', ['local_discovery_ready', 'queued', 'pushed', 'linked']);
|
||||||
->orderBy('id', 'DESC')
|
|
||||||
->limit(300);
|
if (! empty($allAbhaIdentifiers) || $patId > 0) {
|
||||||
|
$healthBuilder->groupStart();
|
||||||
|
if (! empty($allAbhaIdentifiers)) {
|
||||||
|
$healthBuilder->whereIn('abha_id', $allAbhaIdentifiers);
|
||||||
|
}
|
||||||
|
if ($patId > 0) {
|
||||||
|
$healthBuilder->orWhere('patient_id', $patId);
|
||||||
|
}
|
||||||
|
$healthBuilder->groupEnd();
|
||||||
|
}
|
||||||
|
|
||||||
if (! empty($requestedRefs)) {
|
if (! empty($requestedRefs)) {
|
||||||
$healthBuilder->whereIn('care_context_reference', $requestedRefs);
|
$healthBuilder->whereIn('care_context_reference', $requestedRefs);
|
||||||
}
|
}
|
||||||
|
$healthBuilder->orderBy('id', 'DESC')->limit(300);
|
||||||
foreach ($healthBuilder->get()->getResultArray() as $healthRow) {
|
foreach ($healthBuilder->get()->getResultArray() as $healthRow) {
|
||||||
$ccRef = trim((string) ($healthRow['care_context_reference'] ?? ''));
|
$ccRef = trim((string) ($healthRow['care_context_reference'] ?? ''));
|
||||||
if ($ccRef === '' || isset($resolvedRefs[$ccRef])) {
|
if ($ccRef === '' || isset($resolvedRefs[$ccRef])) {
|
||||||
|
|
@ -5238,6 +5263,25 @@ class AbdmGateway extends BaseController
|
||||||
if ($patientId === 0) {
|
if ($patientId === 0) {
|
||||||
$patientId = $extractedId;
|
$patientId = $extractedId;
|
||||||
}
|
}
|
||||||
|
} elseif (preg_match('/WELLNESS-(\d+)(?:-W(\d+))?/i', $careContextRef, $matches)) {
|
||||||
|
$wellnessPatientId = (int) $matches[1];
|
||||||
|
$wellnessId = (int) ($matches[2] ?? 0);
|
||||||
|
if ($db->tableExists('patient_wellness_records')) {
|
||||||
|
$wBuilder = $db->table('patient_wellness_records');
|
||||||
|
if ($wellnessId > 0) {
|
||||||
|
$wBuilder->where('id', $wellnessId);
|
||||||
|
} else {
|
||||||
|
$wBuilder->where('patient_id', $wellnessPatientId)->orderBy('id', 'DESC');
|
||||||
|
}
|
||||||
|
$wRow = $wBuilder->get(1)->getRowArray();
|
||||||
|
if (! empty($wRow['fhir_bundle_json'])) {
|
||||||
|
$wBundle = json_decode((string) $wRow['fhir_bundle_json'], true);
|
||||||
|
if (is_array($wBundle)) {
|
||||||
|
return $wBundle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$patientId = $wellnessPatientId;
|
||||||
} elseif (preg_match('/(?:HR|PAT|REG|P)-(\d+)/i', $careContextRef, $matches)) {
|
} elseif (preg_match('/(?:HR|PAT|REG|P)-(\d+)/i', $careContextRef, $matches)) {
|
||||||
$patientId = (int) $matches[1];
|
$patientId = (int) $matches[1];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user