Support Method 3 (fetch by abha_address) as fallback to surface historical ABDM records
Per bridge gateway team guidance, GET /v1/hiu/data/fetch?abha_address=... returns ALL historical decrypted records across every past consent for a patient, unlike the consent/request-scoped Methods 1/2 previously used exclusively. Added M3HiuWorkflowService support for a fetch_by_abha_address flag on the data_fetch operation, and wired abdm_content_fetch_only() to automatically fall back to this broader lookup when the consent-scoped fetch finds nothing new -- this surfaced 14 previously-invisible historical documents (consultation reports, pathology/cytology) for the test patient that were never being fetched before.
This commit is contained in:
parent
690dbf9572
commit
c87928c2bc
|
|
@ -2070,6 +2070,40 @@ class Patient extends BaseController
|
||||||
$documentsPersisted = (int) ($fetchResult['documents_persisted'] ?? 0);
|
$documentsPersisted = (int) ($fetchResult['documents_persisted'] ?? 0);
|
||||||
$documentsUpdated = (int) ($fetchResult['documents_updated'] ?? 0);
|
$documentsUpdated = (int) ($fetchResult['documents_updated'] ?? 0);
|
||||||
|
|
||||||
|
// The consent-artifact-scoped fetch above (bridge "Method 1/2") only
|
||||||
|
// returns data for the ONE consent/request we targeted. Per the bridge
|
||||||
|
// gateway team, GET /v1/hiu/data/fetch?abha_address=... ("Method 3")
|
||||||
|
// separately returns ALL historical decrypted records already available
|
||||||
|
// at the bridge across every past consent for this patient. If the
|
||||||
|
// consent-scoped call above found nothing new, fall back to this
|
||||||
|
// broader by-ABHA-address lookup before telling the user there is
|
||||||
|
// truly nothing to fetch yet.
|
||||||
|
if ($documentsPersisted + $documentsUpdated === 0) {
|
||||||
|
try {
|
||||||
|
$abhaFetchResult = $service->runOperation('data_fetch', [
|
||||||
|
'abha_address' => $abhaContext['abha_address'],
|
||||||
|
'fetch_by_abha_address' => 1,
|
||||||
|
]);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$abhaFetchResult = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($abhaFetchResult) && (int) ($abhaFetchResult['ok'] ?? 0) === 1) {
|
||||||
|
$abhaDocumentsPersisted = (int) ($abhaFetchResult['documents_persisted'] ?? 0);
|
||||||
|
$abhaDocumentsUpdated = (int) ($abhaFetchResult['documents_updated'] ?? 0);
|
||||||
|
if ($abhaDocumentsPersisted + $abhaDocumentsUpdated > 0) {
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'ok' => 1,
|
||||||
|
'phase' => 'COMPLETED',
|
||||||
|
'message' => 'Records fetched successfully from historical ABDM records for this ABHA address.',
|
||||||
|
'documents_persisted' => $abhaDocumentsPersisted,
|
||||||
|
'documents_updated' => $abhaDocumentsUpdated,
|
||||||
|
'data' => ['data_fetch' => $fetchResult, 'data_fetch_by_abha_address' => $abhaFetchResult],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($documentsPersisted + $documentsUpdated === 0) {
|
if ($documentsPersisted + $documentsUpdated === 0) {
|
||||||
return $this->response->setJSON([
|
return $this->response->setJSON([
|
||||||
'ok' => 1,
|
'ok' => 1,
|
||||||
|
|
|
||||||
|
|
@ -976,6 +976,28 @@ class M3HiuWorkflowService
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($operation === 'data_fetch') {
|
if ($operation === 'data_fetch') {
|
||||||
|
// Method 3 (per bridge gateway team, 2026-07-29): GET /v1/hiu/data/fetch
|
||||||
|
// ?abha_address=... returns ALL historical decrypted records across every
|
||||||
|
// past consent for the patient, instead of only the single consent/request
|
||||||
|
// targeted by Methods 1/2. Callers opt into this broader lookup explicitly
|
||||||
|
// (fetch_by_abha_address=1) since it is not scoped to one consent artifact.
|
||||||
|
$fetchByAbha = (int) ($clean['fetch_by_abha_address'] ?? 0) === 1;
|
||||||
|
if ($fetchByAbha) {
|
||||||
|
$abhaAddress = trim((string) ($clean['abha_address'] ?? ''));
|
||||||
|
if ($abhaAddress === '') {
|
||||||
|
return [
|
||||||
|
'ok' => 0,
|
||||||
|
'http_code' => 422,
|
||||||
|
'error_text' => 'abha_address is required to fetch all historical records by ABHA address.',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'ok' => 1,
|
||||||
|
'payload' => ['abha_address' => $abhaAddress],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
$requestFallback = '';
|
$requestFallback = '';
|
||||||
if (! $requestIdGenerated) {
|
if (! $requestIdGenerated) {
|
||||||
$requestFallback = trim((string) (
|
$requestFallback = trim((string) (
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user