diff --git a/app/Controllers/AbdmGateway.php b/app/Controllers/AbdmGateway.php index ea57abb..a43b571 100644 --- a/app/Controllers/AbdmGateway.php +++ b/app/Controllers/AbdmGateway.php @@ -12284,12 +12284,42 @@ class AbdmGateway extends BaseController $hospital = $this->getHospitalProfileForFhir(); $hospitalName = trim((string) ($hospital['name'] ?? '')) ?: 'Healthcare Facility'; $hospitalIdentifier = trim((string) ($hospital['hfr_id'] ?? '')) ?: 'local-hospital'; - $invoiceDateTimestamp = strtotime((string) ($invoice['inv_date'] ?? '')); - $invoiceDate = $invoiceDateTimestamp !== false ? date('Y-m-d', $invoiceDateTimestamp) : date('Y-m-d'); - $encounterStartTimestamp = strtotime((string) ($invoice['encounter_start'] ?? '')); - $encounterEndTimestamp = strtotime((string) ($invoice['encounter_end'] ?? '')); - $encounterStart = $encounterStartTimestamp !== false ? date('Y-m-d', $encounterStartTimestamp) : $invoiceDate; - $encounterEnd = $encounterEndTimestamp !== false ? date('Y-m-d', $encounterEndTimestamp) : $encounterStart; + $rawInvDate = trim((string) ($invoice['inv_date'] ?? '')); + $invoiceDateTimestamp = $rawInvDate !== '' ? strtotime($rawInvDate) : false; + $invoiceDateOnly = $invoiceDateTimestamp !== false ? date('Y-m-d', $invoiceDateTimestamp) : date('Y-m-d'); + if ($rawInvDate !== '') { + if (str_contains($rawInvDate, ':')) { + $invoiceDate = (new \DateTime($rawInvDate, new \DateTimeZone('Asia/Kolkata')))->format('Y-m-d\TH:i:sP'); + } elseif ($invoiceDateOnly === date('Y-m-d')) { + $invoiceDate = $issuedAt; + } else { + $invoiceDate = $invoiceDateOnly; + } + } else { + $invoiceDate = $issuedAt; + } + + $rawStart = trim((string) ($invoice['encounter_start'] ?? '')); + if ($rawStart !== '') { + if (str_contains($rawStart, ':')) { + $encounterStart = (new \DateTime($rawStart, new \DateTimeZone('Asia/Kolkata')))->format('Y-m-d\TH:i:sP'); + } else { + $encounterStart = $rawStart; + } + } else { + $encounterStart = $invoiceDate; + } + + $rawEnd = trim((string) ($invoice['encounter_end'] ?? '')); + if ($rawEnd !== '') { + if (str_contains($rawEnd, ':')) { + $encounterEnd = (new \DateTime($rawEnd, new \DateTimeZone('Asia/Kolkata')))->format('Y-m-d\TH:i:sP'); + } else { + $encounterEnd = $rawEnd; + } + } else { + $encounterEnd = $encounterStart; + } $netAmount = (float) ($invoice['net_amount'] ?? $invoice['total_amount'] ?? 0); $grossAmount = (float) ($invoice['total_amount'] ?? $invoice['net_amount'] ?? 0); $invoiceTypeCode = trim((string) ($invoice['invoice_type_code'] ?? '99')) ?: '99'; @@ -12565,7 +12595,7 @@ class AbdmGateway extends BaseController 'text' => [ 'status' => 'generated', 'div' => '

' . $escape($invoiceTypeDisplay) - . ' visit on ' . $escape($invoiceDate) . ' at ' . $escape($hospitalName) . '

', + . ' visit on ' . $escape($invoiceDateOnly) . ' at ' . $escape($hospitalName) . '

', ], 'identifier' => [['system' => $identifierSystem . '/encounter', 'value' => $invoiceNumber]], 'status' => 'finished', diff --git a/app/Libraries/Abdm/Fhir/Generators/HealthDocumentFhirGenerator.php b/app/Libraries/Abdm/Fhir/Generators/HealthDocumentFhirGenerator.php index 9ef7298..7a250df 100644 --- a/app/Libraries/Abdm/Fhir/Generators/HealthDocumentFhirGenerator.php +++ b/app/Libraries/Abdm/Fhir/Generators/HealthDocumentFhirGenerator.php @@ -20,8 +20,7 @@ class HealthDocumentFhirGenerator extends AbstractModuleFhirGenerator $docTitle = 'Medical Certificate'; } - $cleanDate = str_replace('-', '', $visitDate); - $defaultRef = 'DOC-' . $recordId . '-' . $cleanDate; + $defaultRef = 'DOC-' . $recordId . '-' . $visitDate; $careContextReference = (string) ($source['care_context_reference'] ?? $defaultRef); $careContextDisplay = (string) ($source['care_context_display'] ?? ($docTitle . ' (' . $visitDate . ')')); diff --git a/app/Libraries/Abdm/Fhir/Generators/WellnessFhirGenerator.php b/app/Libraries/Abdm/Fhir/Generators/WellnessFhirGenerator.php index d81f120..c0f9f4c 100644 --- a/app/Libraries/Abdm/Fhir/Generators/WellnessFhirGenerator.php +++ b/app/Libraries/Abdm/Fhir/Generators/WellnessFhirGenerator.php @@ -24,6 +24,11 @@ class WellnessFhirGenerator extends AbstractModuleFhirGenerator $composition = $this->buildBaseComposition($source, 'Wellness Record', '94500-6', 'Health and Wellness Record'); $composition['meta']['profile'] = ['https://nrces.in/ndhm/fhir/r4/StructureDefinition/WellnessRecord']; $composition['type'] = [ + 'coding' => [[ + 'system' => 'http://loinc.org', + 'code' => '94500-6', + 'display' => 'Wellness Record', + ]], 'text' => 'Wellness Record', ]; diff --git a/app/Libraries/FhirR4Builder.php b/app/Libraries/FhirR4Builder.php index c3aa0f3..17a024e 100644 --- a/app/Libraries/FhirR4Builder.php +++ b/app/Libraries/FhirR4Builder.php @@ -1607,7 +1607,7 @@ class FhirR4Builder */ public function buildClaimBundle(array $patient, array $encounter, array $claim): array { - $issuedAt = Time::now('Asia/Kolkata')->toDateTimeString(); + $issuedAt = $this->isoTimestamp(); $patientRef = 'Patient/' . (string) ($patient['id'] ?? 'unknown'); $encounterRef = 'Encounter/' . (string) ($encounter['id'] ?? 'unknown'); @@ -3019,7 +3019,7 @@ class FhirR4Builder ?array $practitioner = null, ?array $organization = null ): array { - $issuedAt = Time::now('Asia/Kolkata')->toDateTimeString(); + $issuedAt = $this->isoTimestamp(); $patientRef = 'Patient/' . (string) ($patient['id'] ?? 'unknown'); $reportId = 'lab-rpt-' . (string) ($diagnosticReport['id'] ?? date('YmdHis')); @@ -3290,7 +3290,7 @@ class FhirR4Builder array $encounter, array $summary ): array { - $issuedAt = Time::now('Asia/Kolkata')->toDateTimeString(); + $issuedAt = $this->isoTimestamp(); $encounterId = (string) ($encounter['id'] ?? 'enc-' . date('YmdHis')); $patientRef = 'Patient/' . (string) ($patient['id'] ?? 'unknown'); $encounterRef = 'Encounter/' . $encounterId; @@ -3640,7 +3640,7 @@ class FhirR4Builder array $lifestyle = [], ?array $practitioner = null ): array { - $issuedAt = Time::now('Asia/Kolkata')->toDateTimeString(); + $issuedAt = $this->isoTimestamp(); $patientRef = 'Patient/' . (string) ($patient['id'] ?? 'unknown'); $entries = [['resource' => $this->buildPatientResource($patient)]];