@imranq2/fhirpatientsummary 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +81 -0
- package/lib/src/generators/fhir_summary_generator.d.ts +46 -0
- package/lib/src/generators/fhir_summary_generator.js +228 -0
- package/lib/src/generators/narrative_generator.d.ts +40 -0
- package/lib/src/generators/narrative_generator.js +80 -0
- package/lib/src/narratives/templates/typescript/AdvanceDirectivesTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/AdvanceDirectivesTemplate.js +70 -0
- package/lib/src/narratives/templates/typescript/AllergyIntoleranceTemplate.d.ts +31 -0
- package/lib/src/narratives/templates/typescript/AllergyIntoleranceTemplate.js +155 -0
- package/lib/src/narratives/templates/typescript/ClinicalImpressionTemplate.d.ts +15 -0
- package/lib/src/narratives/templates/typescript/ClinicalImpressionTemplate.js +111 -0
- package/lib/src/narratives/templates/typescript/DiagnosticResultsTemplate.d.ts +50 -0
- package/lib/src/narratives/templates/typescript/DiagnosticResultsTemplate.js +153 -0
- package/lib/src/narratives/templates/typescript/FamilyHistoryTemplate.d.ts +15 -0
- package/lib/src/narratives/templates/typescript/FamilyHistoryTemplate.js +103 -0
- package/lib/src/narratives/templates/typescript/FunctionalStatusTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/FunctionalStatusTemplate.js +70 -0
- package/lib/src/narratives/templates/typescript/HistoryOfProceduresTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/HistoryOfProceduresTemplate.js +66 -0
- package/lib/src/narratives/templates/typescript/ImmunizationsTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/ImmunizationsTemplate.js +73 -0
- package/lib/src/narratives/templates/typescript/MedicalDevicesTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/MedicalDevicesTemplate.js +67 -0
- package/lib/src/narratives/templates/typescript/MedicationSummaryTemplate.d.ts +50 -0
- package/lib/src/narratives/templates/typescript/MedicationSummaryTemplate.js +206 -0
- package/lib/src/narratives/templates/typescript/PastHistoryOfIllnessTemplate.d.ts +15 -0
- package/lib/src/narratives/templates/typescript/PastHistoryOfIllnessTemplate.js +59 -0
- package/lib/src/narratives/templates/typescript/PatientTemplate.d.ts +65 -0
- package/lib/src/narratives/templates/typescript/PatientTemplate.js +158 -0
- package/lib/src/narratives/templates/typescript/PlanOfCareTemplate.d.ts +15 -0
- package/lib/src/narratives/templates/typescript/PlanOfCareTemplate.js +63 -0
- package/lib/src/narratives/templates/typescript/PregnancyTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/PregnancyTemplate.js +68 -0
- package/lib/src/narratives/templates/typescript/ProblemListTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/ProblemListTemplate.js +119 -0
- package/lib/src/narratives/templates/typescript/SocialHistoryTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/SocialHistoryTemplate.js +70 -0
- package/lib/src/narratives/templates/typescript/TemplateUtilities.d.ts +251 -0
- package/lib/src/narratives/templates/typescript/TemplateUtilities.js +696 -0
- package/lib/src/narratives/templates/typescript/TypeScriptTemplateMapper.d.ts +17 -0
- package/lib/src/narratives/templates/typescript/TypeScriptTemplateMapper.js +64 -0
- package/lib/src/narratives/templates/typescript/VitalSignsTemplate.d.ts +22 -0
- package/lib/src/narratives/templates/typescript/VitalSignsTemplate.js +74 -0
- package/lib/src/narratives/templates/typescript/interfaces/ITemplate.d.ts +13 -0
- package/lib/src/narratives/templates/typescript/interfaces/ITemplate.js +2 -0
- package/lib/src/profiles/ips_resource_profile_registry.d.ts +7 -0
- package/lib/src/profiles/ips_resource_profile_registry.js +143 -0
- package/lib/src/structures/ips_mandatory_sections.d.ts +7 -0
- package/lib/src/structures/ips_mandatory_sections.js +11 -0
- package/lib/src/structures/ips_recommended_sections.d.ts +8 -0
- package/lib/src/structures/ips_recommended_sections.js +12 -0
- package/lib/src/structures/ips_resource_profile.d.ts +7 -0
- package/lib/src/structures/ips_resource_profile.js +2 -0
- package/lib/src/structures/ips_section_loinc_codes.d.ts +4 -0
- package/lib/src/structures/ips_section_loinc_codes.js +48 -0
- package/lib/src/structures/ips_section_resource_map.d.ts +8 -0
- package/lib/src/structures/ips_section_resource_map.js +69 -0
- package/lib/src/structures/ips_sections.d.ts +19 -0
- package/lib/src/structures/ips_sections.js +27 -0
- package/lib/src/types/partials/Address.d.ts +16 -0
- package/lib/src/types/partials/Address.js +3 -0
- package/lib/src/types/partials/AllergyIntoleranceReaction.d.ts +16 -0
- package/lib/src/types/partials/AllergyIntoleranceReaction.js +3 -0
- package/lib/src/types/partials/Annotation.d.ts +12 -0
- package/lib/src/types/partials/Annotation.js +3 -0
- package/lib/src/types/partials/Attachment.d.ts +17 -0
- package/lib/src/types/partials/Attachment.js +3 -0
- package/lib/src/types/partials/BundleEntry.d.ts +18 -0
- package/lib/src/types/partials/BundleEntry.js +3 -0
- package/lib/src/types/partials/BundleLink.d.ts +9 -0
- package/lib/src/types/partials/BundleLink.js +3 -0
- package/lib/src/types/partials/BundleRequest.d.ts +14 -0
- package/lib/src/types/partials/BundleRequest.js +3 -0
- package/lib/src/types/partials/BundleResponse.d.ts +14 -0
- package/lib/src/types/partials/BundleResponse.js +3 -0
- package/lib/src/types/partials/BundleSearch.d.ts +9 -0
- package/lib/src/types/partials/BundleSearch.js +3 -0
- package/lib/src/types/partials/CarePlanActivity.d.ts +15 -0
- package/lib/src/types/partials/CarePlanActivity.js +3 -0
- package/lib/src/types/partials/CarePlanDetail.d.ts +33 -0
- package/lib/src/types/partials/CarePlanDetail.js +3 -0
- package/lib/src/types/partials/ClinicalImpressionFinding.d.ts +11 -0
- package/lib/src/types/partials/ClinicalImpressionFinding.js +3 -0
- package/lib/src/types/partials/ClinicalImpressionInvestigation.d.ts +10 -0
- package/lib/src/types/partials/ClinicalImpressionInvestigation.js +3 -0
- package/lib/src/types/partials/CodeableConcept.d.ts +8 -0
- package/lib/src/types/partials/CodeableConcept.js +3 -0
- package/lib/src/types/partials/CodeableReference.d.ts +9 -0
- package/lib/src/types/partials/CodeableReference.js +3 -0
- package/lib/src/types/partials/Coding.d.ts +11 -0
- package/lib/src/types/partials/Coding.js +3 -0
- package/lib/src/types/partials/CompositionAttester.d.ts +11 -0
- package/lib/src/types/partials/CompositionAttester.js +3 -0
- package/lib/src/types/partials/CompositionEvent.d.ts +12 -0
- package/lib/src/types/partials/CompositionEvent.js +3 -0
- package/lib/src/types/partials/CompositionRelatesTo.d.ts +11 -0
- package/lib/src/types/partials/CompositionRelatesTo.js +3 -0
- package/lib/src/types/partials/CompositionSection.d.ts +19 -0
- package/lib/src/types/partials/CompositionSection.js +3 -0
- package/lib/src/types/partials/ConditionEvidence.d.ts +10 -0
- package/lib/src/types/partials/ConditionEvidence.js +3 -0
- package/lib/src/types/partials/ConditionStage.d.ts +11 -0
- package/lib/src/types/partials/ConditionStage.js +3 -0
- package/lib/src/types/partials/ConsentActor.d.ts +10 -0
- package/lib/src/types/partials/ConsentActor.js +3 -0
- package/lib/src/types/partials/ConsentData.d.ts +9 -0
- package/lib/src/types/partials/ConsentData.js +3 -0
- package/lib/src/types/partials/ConsentPolicy.d.ts +9 -0
- package/lib/src/types/partials/ConsentPolicy.js +3 -0
- package/lib/src/types/partials/ConsentProvision.d.ts +22 -0
- package/lib/src/types/partials/ConsentProvision.js +3 -0
- package/lib/src/types/partials/ConsentVerification.d.ts +11 -0
- package/lib/src/types/partials/ConsentVerification.js +3 -0
- package/lib/src/types/partials/ContactDetail.d.ts +8 -0
- package/lib/src/types/partials/ContactDetail.js +3 -0
- package/lib/src/types/partials/ContactPoint.d.ts +12 -0
- package/lib/src/types/partials/ContactPoint.js +3 -0
- package/lib/src/types/partials/Contributor.d.ts +9 -0
- package/lib/src/types/partials/Contributor.js +3 -0
- package/lib/src/types/partials/DataRequirement.d.ts +21 -0
- package/lib/src/types/partials/DataRequirement.js +3 -0
- package/lib/src/types/partials/DataRequirementCodeFilter.d.ts +11 -0
- package/lib/src/types/partials/DataRequirementCodeFilter.js +3 -0
- package/lib/src/types/partials/DataRequirementDateFilter.d.ts +13 -0
- package/lib/src/types/partials/DataRequirementDateFilter.js +3 -0
- package/lib/src/types/partials/DataRequirementSort.d.ts +7 -0
- package/lib/src/types/partials/DataRequirementSort.js +3 -0
- package/lib/src/types/partials/DeviceDeviceName.d.ts +8 -0
- package/lib/src/types/partials/DeviceDeviceName.js +3 -0
- package/lib/src/types/partials/DeviceProperty.d.ts +11 -0
- package/lib/src/types/partials/DeviceProperty.js +3 -0
- package/lib/src/types/partials/DeviceSpecialization.d.ts +9 -0
- package/lib/src/types/partials/DeviceSpecialization.js +3 -0
- package/lib/src/types/partials/DeviceUdiCarrier.d.ts +14 -0
- package/lib/src/types/partials/DeviceUdiCarrier.js +3 -0
- package/lib/src/types/partials/DeviceVersion.d.ts +11 -0
- package/lib/src/types/partials/DeviceVersion.js +3 -0
- package/lib/src/types/partials/DiagnosticReportMedia.d.ts +9 -0
- package/lib/src/types/partials/DiagnosticReportMedia.js +3 -0
- package/lib/src/types/partials/Dosage.d.ts +26 -0
- package/lib/src/types/partials/Dosage.js +3 -0
- package/lib/src/types/partials/DosageDoseAndRate.d.ts +16 -0
- package/lib/src/types/partials/DosageDoseAndRate.js +3 -0
- package/lib/src/types/partials/Expression.d.ts +12 -0
- package/lib/src/types/partials/Expression.js +3 -0
- package/lib/src/types/partials/Extension.d.ts +99 -0
- package/lib/src/types/partials/Extension.js +3 -0
- package/lib/src/types/partials/FamilyMemberHistoryCondition.d.ts +19 -0
- package/lib/src/types/partials/FamilyMemberHistoryCondition.js +3 -0
- package/lib/src/types/partials/HumanName.d.ts +13 -0
- package/lib/src/types/partials/HumanName.js +3 -0
- package/lib/src/types/partials/Identifier.d.ts +15 -0
- package/lib/src/types/partials/Identifier.js +3 -0
- package/lib/src/types/partials/ImmunizationEducation.d.ts +12 -0
- package/lib/src/types/partials/ImmunizationEducation.js +3 -0
- package/lib/src/types/partials/ImmunizationPerformer.d.ts +10 -0
- package/lib/src/types/partials/ImmunizationPerformer.js +3 -0
- package/lib/src/types/partials/ImmunizationProtocolApplied.d.ts +16 -0
- package/lib/src/types/partials/ImmunizationProtocolApplied.js +3 -0
- package/lib/src/types/partials/ImmunizationReaction.d.ts +11 -0
- package/lib/src/types/partials/ImmunizationReaction.js +3 -0
- package/lib/src/types/partials/MedicationBatch.d.ts +9 -0
- package/lib/src/types/partials/MedicationBatch.js +3 -0
- package/lib/src/types/partials/MedicationIngredient.d.ts +13 -0
- package/lib/src/types/partials/MedicationIngredient.js +3 -0
- package/lib/src/types/partials/MedicationRequestDispenseRequest.d.ts +18 -0
- package/lib/src/types/partials/MedicationRequestDispenseRequest.js +3 -0
- package/lib/src/types/partials/MedicationRequestInitialFill.d.ts +9 -0
- package/lib/src/types/partials/MedicationRequestInitialFill.js +3 -0
- package/lib/src/types/partials/MedicationRequestSubstitution.d.ts +10 -0
- package/lib/src/types/partials/MedicationRequestSubstitution.js +3 -0
- package/lib/src/types/partials/Meta.d.ts +16 -0
- package/lib/src/types/partials/Meta.js +3 -0
- package/lib/src/types/partials/Money.d.ts +8 -0
- package/lib/src/types/partials/Money.js +3 -0
- package/lib/src/types/partials/Narrative.d.ts +8 -0
- package/lib/src/types/partials/Narrative.js +3 -0
- package/lib/src/types/partials/ObservationComponent.d.ts +31 -0
- package/lib/src/types/partials/ObservationComponent.js +3 -0
- package/lib/src/types/partials/ObservationReferenceRange.d.ts +15 -0
- package/lib/src/types/partials/ObservationReferenceRange.js +3 -0
- package/lib/src/types/partials/OrganizationContact.d.ts +14 -0
- package/lib/src/types/partials/OrganizationContact.js +3 -0
- package/lib/src/types/partials/ParameterDefinition.d.ts +14 -0
- package/lib/src/types/partials/ParameterDefinition.js +3 -0
- package/lib/src/types/partials/PatientCommunication.d.ts +9 -0
- package/lib/src/types/partials/PatientCommunication.js +3 -0
- package/lib/src/types/partials/PatientContact.d.ts +19 -0
- package/lib/src/types/partials/PatientContact.js +3 -0
- package/lib/src/types/partials/PatientLink.d.ts +9 -0
- package/lib/src/types/partials/PatientLink.js +3 -0
- package/lib/src/types/partials/Period.d.ts +8 -0
- package/lib/src/types/partials/Period.js +3 -0
- package/lib/src/types/partials/ProcedureFocalDevice.d.ts +10 -0
- package/lib/src/types/partials/ProcedureFocalDevice.js +3 -0
- package/lib/src/types/partials/ProcedurePerformer.d.ts +11 -0
- package/lib/src/types/partials/ProcedurePerformer.js +3 -0
- package/lib/src/types/partials/Quantity.d.ts +12 -0
- package/lib/src/types/partials/Quantity.js +3 -0
- package/lib/src/types/partials/Range.d.ts +8 -0
- package/lib/src/types/partials/Range.js +3 -0
- package/lib/src/types/partials/Ratio.d.ts +8 -0
- package/lib/src/types/partials/Ratio.js +3 -0
- package/lib/src/types/partials/RatioRange.d.ts +9 -0
- package/lib/src/types/partials/RatioRange.js +3 -0
- package/lib/src/types/partials/Reference.d.ts +14 -0
- package/lib/src/types/partials/Reference.js +3 -0
- package/lib/src/types/partials/RelatedArtifact.d.ts +16 -0
- package/lib/src/types/partials/RelatedArtifact.js +3 -0
- package/lib/src/types/partials/SampledData.d.ts +15 -0
- package/lib/src/types/partials/SampledData.js +3 -0
- package/lib/src/types/partials/Signature.d.ts +16 -0
- package/lib/src/types/partials/Signature.js +3 -0
- package/lib/src/types/partials/Timing.d.ts +12 -0
- package/lib/src/types/partials/Timing.js +3 -0
- package/lib/src/types/partials/TimingRepeat.d.ts +30 -0
- package/lib/src/types/partials/TimingRepeat.js +3 -0
- package/lib/src/types/partials/TriggerDefinition.d.ts +19 -0
- package/lib/src/types/partials/TriggerDefinition.js +3 -0
- package/lib/src/types/partials/UsageContext.d.ts +15 -0
- package/lib/src/types/partials/UsageContext.js +3 -0
- package/lib/src/types/resources/AllergyIntolerance.d.ts +45 -0
- package/lib/src/types/resources/AllergyIntolerance.js +3 -0
- package/lib/src/types/resources/Bundle.d.ts +22 -0
- package/lib/src/types/resources/Bundle.js +3 -0
- package/lib/src/types/resources/CarePlan.d.ts +47 -0
- package/lib/src/types/resources/CarePlan.js +3 -0
- package/lib/src/types/resources/ClinicalImpression.d.ts +45 -0
- package/lib/src/types/resources/ClinicalImpression.js +3 -0
- package/lib/src/types/resources/Composition.d.ts +39 -0
- package/lib/src/types/resources/Composition.js +3 -0
- package/lib/src/types/resources/Condition.d.ts +51 -0
- package/lib/src/types/resources/Condition.js +3 -0
- package/lib/src/types/resources/Consent.d.ts +38 -0
- package/lib/src/types/resources/Consent.js +3 -0
- package/lib/src/types/resources/Device.d.ts +53 -0
- package/lib/src/types/resources/Device.js +3 -0
- package/lib/src/types/resources/DeviceUseStatement.d.ts +38 -0
- package/lib/src/types/resources/DeviceUseStatement.js +3 -0
- package/lib/src/types/resources/DiagnosticReport.d.ts +43 -0
- package/lib/src/types/resources/DiagnosticReport.js +3 -0
- package/lib/src/types/resources/DomainResource.d.ts +16 -0
- package/lib/src/types/resources/DomainResource.js +3 -0
- package/lib/src/types/resources/FamilyMemberHistory.d.ts +53 -0
- package/lib/src/types/resources/FamilyMemberHistory.js +3 -0
- package/lib/src/types/resources/Immunization.d.ts +56 -0
- package/lib/src/types/resources/Immunization.js +3 -0
- package/lib/src/types/resources/Medication.d.ts +30 -0
- package/lib/src/types/resources/Medication.js +3 -0
- package/lib/src/types/resources/MedicationRequest.d.ts +59 -0
- package/lib/src/types/resources/MedicationRequest.js +3 -0
- package/lib/src/types/resources/MedicationStatement.d.ts +42 -0
- package/lib/src/types/resources/MedicationStatement.js +3 -0
- package/lib/src/types/resources/Observation.d.ts +69 -0
- package/lib/src/types/resources/Observation.js +3 -0
- package/lib/src/types/resources/Organization.d.ts +32 -0
- package/lib/src/types/resources/Organization.js +3 -0
- package/lib/src/types/resources/Patient.d.ts +47 -0
- package/lib/src/types/resources/Patient.js +3 -0
- package/lib/src/types/resources/Procedure.d.ts +59 -0
- package/lib/src/types/resources/Procedure.js +3 -0
- package/lib/src/types/simpleTypes/Base64Binary.d.ts +1 -0
- package/lib/src/types/simpleTypes/Base64Binary.js +2 -0
- package/lib/src/types/simpleTypes/Canonical.d.ts +1 -0
- package/lib/src/types/simpleTypes/Canonical.js +2 -0
- package/lib/src/types/simpleTypes/Date.d.ts +1 -0
- package/lib/src/types/simpleTypes/Date.js +2 -0
- package/lib/src/types/simpleTypes/DateTime.d.ts +1 -0
- package/lib/src/types/simpleTypes/DateTime.js +2 -0
- package/lib/src/types/simpleTypes/Decimal.d.ts +1 -0
- package/lib/src/types/simpleTypes/Decimal.js +2 -0
- package/lib/src/types/simpleTypes/Id.d.ts +1 -0
- package/lib/src/types/simpleTypes/Id.js +2 -0
- package/lib/src/types/simpleTypes/Instant.d.ts +1 -0
- package/lib/src/types/simpleTypes/Instant.js +2 -0
- package/lib/src/types/simpleTypes/Int.d.ts +1 -0
- package/lib/src/types/simpleTypes/Int.js +2 -0
- package/lib/src/types/simpleTypes/Markdown.d.ts +1 -0
- package/lib/src/types/simpleTypes/Markdown.js +2 -0
- package/lib/src/types/simpleTypes/Oid.d.ts +1 -0
- package/lib/src/types/simpleTypes/Oid.js +2 -0
- package/lib/src/types/simpleTypes/ResourceContainer.d.ts +1 -0
- package/lib/src/types/simpleTypes/ResourceContainer.js +2 -0
- package/lib/src/types/simpleTypes/Time.d.ts +1 -0
- package/lib/src/types/simpleTypes/Time.js +2 -0
- package/lib/src/types/simpleTypes/UnsignedInt.d.ts +1 -0
- package/lib/src/types/simpleTypes/UnsignedInt.js +2 -0
- package/lib/src/types/simpleTypes/Uri.d.ts +1 -0
- package/lib/src/types/simpleTypes/Uri.js +2 -0
- package/lib/src/types/simpleTypes/Url.d.ts +1 -0
- package/lib/src/types/simpleTypes/Url.js +2 -0
- package/lib/src/types/simpleTypes/Uuid.d.ts +1 -0
- package/lib/src/types/simpleTypes/Uuid.js +2 -0
- package/lib/src/types/simpleTypes/Xhtml.d.ts +1 -0
- package/lib/src/types/simpleTypes/Xhtml.js +2 -0
- package/lib/test/fhir-summary-bundle/fhir-summary-bundle.test.d.ts +1 -0
- package/lib/test/fhir-summary-bundle/fhir-summary-bundle.test.js +72 -0
- package/lib/test/ips-test/ips.test.d.ts +1 -0
- package/lib/test/ips-test/ips.test.js +389 -0
- package/lib/test/narrativeGenerator/narrativeGenerator.test.d.ts +1 -0
- package/lib/test/narrativeGenerator/narrativeGenerator.test.js +676 -0
- package/lib/test/summary.test.d.ts +1 -0
- package/lib/test/summary.test.js +452 -0
- package/lib/test/utilities/testHelpers.d.ts +21 -0
- package/lib/test/utilities/testHelpers.js +137 -0
- package/package.json +126 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { TBundle } from '../../../types/resources/Bundle';
|
|
2
|
+
import { ITemplate } from './interfaces/ITemplate';
|
|
3
|
+
/**
|
|
4
|
+
* Class to generate HTML narrative for Medication resources
|
|
5
|
+
* This replaces the Jinja2 medicationsummary.j2 template
|
|
6
|
+
*/
|
|
7
|
+
export declare class MedicationSummaryTemplate implements ITemplate {
|
|
8
|
+
/**
|
|
9
|
+
* Generate HTML narrative for Medication resources
|
|
10
|
+
* @param resource - FHIR Bundle containing Medication resources
|
|
11
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
12
|
+
* @returns HTML string for rendering
|
|
13
|
+
*/
|
|
14
|
+
generateNarrative(resource: TBundle, timezone: string | undefined): string;
|
|
15
|
+
/**
|
|
16
|
+
* Internal static implementation that actually generates the narrative
|
|
17
|
+
* @param resource - FHIR Bundle containing Medication resources
|
|
18
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
19
|
+
* @returns HTML string for rendering
|
|
20
|
+
*/
|
|
21
|
+
private static generateStaticNarrative;
|
|
22
|
+
/**
|
|
23
|
+
* Extract MedicationRequest resources from the bundle
|
|
24
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
25
|
+
* @param resource - FHIR Bundle
|
|
26
|
+
* @returns Array of MedicationRequest resources
|
|
27
|
+
*/
|
|
28
|
+
private static getMedicationRequests;
|
|
29
|
+
/**
|
|
30
|
+
* Extract MedicationStatement resources from the bundle
|
|
31
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
32
|
+
* @param resource - FHIR Bundle
|
|
33
|
+
* @returns Array of MedicationStatement resources
|
|
34
|
+
*/
|
|
35
|
+
private static getMedicationStatements;
|
|
36
|
+
/**
|
|
37
|
+
* Render HTML table for MedicationRequest resources
|
|
38
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
39
|
+
* @param medications - Array of MedicationRequest resources
|
|
40
|
+
* @returns HTML string for rendering
|
|
41
|
+
*/
|
|
42
|
+
private static renderMedicationRequests;
|
|
43
|
+
/**
|
|
44
|
+
* Render HTML table for MedicationStatement resources
|
|
45
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
46
|
+
* @param medications - Array of MedicationStatement resources
|
|
47
|
+
* @returns HTML string for rendering
|
|
48
|
+
*/
|
|
49
|
+
private static renderMedicationStatements;
|
|
50
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MedicationSummaryTemplate = void 0;
|
|
4
|
+
// MedicationSummaryTemplate.ts - TypeScript replacement for Jinja2 medicationsummary.j2
|
|
5
|
+
const TemplateUtilities_1 = require("./TemplateUtilities");
|
|
6
|
+
/**
|
|
7
|
+
* Class to generate HTML narrative for Medication resources
|
|
8
|
+
* This replaces the Jinja2 medicationsummary.j2 template
|
|
9
|
+
*/
|
|
10
|
+
class MedicationSummaryTemplate {
|
|
11
|
+
/**
|
|
12
|
+
* Generate HTML narrative for Medication resources
|
|
13
|
+
* @param resource - FHIR Bundle containing Medication resources
|
|
14
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
15
|
+
* @returns HTML string for rendering
|
|
16
|
+
*/
|
|
17
|
+
generateNarrative(resource, timezone) {
|
|
18
|
+
return MedicationSummaryTemplate.generateStaticNarrative(resource, timezone);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Internal static implementation that actually generates the narrative
|
|
22
|
+
* @param resource - FHIR Bundle containing Medication resources
|
|
23
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
24
|
+
* @returns HTML string for rendering
|
|
25
|
+
*/
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
27
|
+
static generateStaticNarrative(resource, timezone) {
|
|
28
|
+
const templateUtilities = new TemplateUtilities_1.TemplateUtilities(resource);
|
|
29
|
+
let html = '';
|
|
30
|
+
// Add Medication Requests section if we have any
|
|
31
|
+
const medicationRequests = this.getMedicationRequests(templateUtilities, resource);
|
|
32
|
+
if (medicationRequests.length > 0) {
|
|
33
|
+
html += this.renderMedicationRequests(templateUtilities, medicationRequests);
|
|
34
|
+
}
|
|
35
|
+
// Add Medication Statements section if we have any
|
|
36
|
+
const medicationStatements = this.getMedicationStatements(templateUtilities, resource);
|
|
37
|
+
if (medicationStatements.length > 0) {
|
|
38
|
+
html += this.renderMedicationStatements(templateUtilities, medicationStatements);
|
|
39
|
+
}
|
|
40
|
+
return html;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract MedicationRequest resources from the bundle
|
|
44
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
45
|
+
* @param resource - FHIR Bundle
|
|
46
|
+
* @returns Array of MedicationRequest resources
|
|
47
|
+
*/
|
|
48
|
+
static getMedicationRequests(templateUtilities, resource) {
|
|
49
|
+
if (!resource.entry || !Array.isArray(resource.entry)) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
return resource.entry
|
|
53
|
+
.filter(entry => { var _a; return ((_a = entry.resource) === null || _a === void 0 ? void 0 : _a.resourceType) === 'MedicationRequest'; })
|
|
54
|
+
.map(entry => ({
|
|
55
|
+
resource: entry.resource,
|
|
56
|
+
extension: templateUtilities.narrativeLinkExtension(entry.resource)
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Extract MedicationStatement resources from the bundle
|
|
61
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
62
|
+
* @param resource - FHIR Bundle
|
|
63
|
+
* @returns Array of MedicationStatement resources
|
|
64
|
+
*/
|
|
65
|
+
static getMedicationStatements(templateUtilities, resource) {
|
|
66
|
+
if (!resource.entry || !Array.isArray(resource.entry)) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
return resource.entry
|
|
70
|
+
.filter(entry => { var _a; return ((_a = entry.resource) === null || _a === void 0 ? void 0 : _a.resourceType) === 'MedicationStatement'; })
|
|
71
|
+
.map(entry => ({
|
|
72
|
+
resource: entry.resource,
|
|
73
|
+
extension: templateUtilities.narrativeLinkExtension(entry.resource)
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Render HTML table for MedicationRequest resources
|
|
78
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
79
|
+
* @param medications - Array of MedicationRequest resources
|
|
80
|
+
* @returns HTML string for rendering
|
|
81
|
+
*/
|
|
82
|
+
static renderMedicationRequests(templateUtilities, medications) {
|
|
83
|
+
var _a, _b, _c, _d;
|
|
84
|
+
let html = `<div xmlns="http://www.w3.org/1999/xhtml">
|
|
85
|
+
<table>
|
|
86
|
+
<thead>
|
|
87
|
+
<tr>
|
|
88
|
+
<th>Medication</th>
|
|
89
|
+
<th>Sig</th>
|
|
90
|
+
<th>Dispense Quantity</th>
|
|
91
|
+
<th>Refills</th>
|
|
92
|
+
<th>Start Date</th>
|
|
93
|
+
<th>End Date</th>
|
|
94
|
+
<th>Status</th>
|
|
95
|
+
</tr>
|
|
96
|
+
</thead>
|
|
97
|
+
<tbody>`;
|
|
98
|
+
for (const { resource: mr, extension } of medications) {
|
|
99
|
+
// Use the narrativeLinkId utility function to extract the ID
|
|
100
|
+
const narrativeLinkId = templateUtilities.narrativeLinkId(extension);
|
|
101
|
+
// Format status
|
|
102
|
+
const status = mr.status ? String(mr.status) : '-';
|
|
103
|
+
// Get medication name using the new shared function
|
|
104
|
+
const medication = templateUtilities.getMedicationName(mr.medicationReference || mr.medicationCodeableConcept);
|
|
105
|
+
// Get Sig/dosage instructions
|
|
106
|
+
const sig = templateUtilities.concat(mr.dosageInstruction, 'text') || '-';
|
|
107
|
+
// Get dispense quantity
|
|
108
|
+
let dispenseQuantity = '-';
|
|
109
|
+
if ((_a = mr.dispenseRequest) === null || _a === void 0 ? void 0 : _a.quantity) {
|
|
110
|
+
const quantity = mr.dispenseRequest.quantity;
|
|
111
|
+
if (quantity.value) {
|
|
112
|
+
dispenseQuantity = `${quantity.value} ${quantity.unit || quantity.code || ''}`.trim();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Get refills
|
|
116
|
+
const refills = ((_c = (_b = mr.dispenseRequest) === null || _b === void 0 ? void 0 : _b.numberOfRepeatsAllowed) === null || _c === void 0 ? void 0 : _c.toString()) || '-';
|
|
117
|
+
// Get dates
|
|
118
|
+
let startDate = '-';
|
|
119
|
+
let endDate = '-';
|
|
120
|
+
if ((_d = mr.dispenseRequest) === null || _d === void 0 ? void 0 : _d.validityPeriod) {
|
|
121
|
+
startDate = mr.dispenseRequest.validityPeriod.start || '-';
|
|
122
|
+
endDate = mr.dispenseRequest.validityPeriod.end || '-';
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Use authored date as fallback for start date
|
|
126
|
+
startDate = mr.authoredOn || '-';
|
|
127
|
+
}
|
|
128
|
+
// Add table row
|
|
129
|
+
html += `
|
|
130
|
+
<tr${narrativeLinkId ? ` id="${narrativeLinkId}"` : ''}>
|
|
131
|
+
<td>${medication}<ul></ul></td>
|
|
132
|
+
<td>${sig}</td>
|
|
133
|
+
<td>${dispenseQuantity}</td>
|
|
134
|
+
<td>${refills}</td>
|
|
135
|
+
<td>${startDate}</td>
|
|
136
|
+
<td>${endDate}</td>
|
|
137
|
+
<td>${status}</td>
|
|
138
|
+
</tr>`;
|
|
139
|
+
}
|
|
140
|
+
html += `
|
|
141
|
+
</tbody>
|
|
142
|
+
</table></div>`;
|
|
143
|
+
return html;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Render HTML table for MedicationStatement resources
|
|
147
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
148
|
+
* @param medications - Array of MedicationStatement resources
|
|
149
|
+
* @returns HTML string for rendering
|
|
150
|
+
*/
|
|
151
|
+
static renderMedicationStatements(templateUtilities, medications) {
|
|
152
|
+
let html = `<div xmlns="http://www.w3.org/1999/xhtml">
|
|
153
|
+
<table>
|
|
154
|
+
<thead>
|
|
155
|
+
<tr>
|
|
156
|
+
<th>Medication</th>
|
|
157
|
+
<th>Sig</th>
|
|
158
|
+
<th>Dispense Quantity</th>
|
|
159
|
+
<th>Refills</th>
|
|
160
|
+
<th>Start Date</th>
|
|
161
|
+
<th>End Date</th>
|
|
162
|
+
<th>Status</th>
|
|
163
|
+
</tr>
|
|
164
|
+
</thead>
|
|
165
|
+
<tbody>`;
|
|
166
|
+
for (const { resource: ms, extension } of medications) {
|
|
167
|
+
// Use the narrativeLinkId utility function to extract the ID
|
|
168
|
+
const narrativeLinkId = templateUtilities.narrativeLinkId(extension);
|
|
169
|
+
// Format status
|
|
170
|
+
const status = ms.status ? String(ms.status) : '-';
|
|
171
|
+
// Get medication name using the new shared function
|
|
172
|
+
const medication = templateUtilities.getMedicationName(ms.medicationReference || ms.medicationCodeableConcept);
|
|
173
|
+
// Get Sig/dosage instructions
|
|
174
|
+
const sig = templateUtilities.concat(ms.dosage, 'text') || '-';
|
|
175
|
+
// Dispense quantity and refills aren't typically in MedicationStatement
|
|
176
|
+
const dispenseQuantity = '-';
|
|
177
|
+
const refills = '-';
|
|
178
|
+
// Get dates
|
|
179
|
+
let startDate = '-';
|
|
180
|
+
let endDate = '-';
|
|
181
|
+
if (ms.effectiveDateTime) {
|
|
182
|
+
startDate = ms.effectiveDateTime;
|
|
183
|
+
}
|
|
184
|
+
else if (ms.effectivePeriod) {
|
|
185
|
+
startDate = ms.effectivePeriod.start || '-';
|
|
186
|
+
endDate = ms.effectivePeriod.end || '-';
|
|
187
|
+
}
|
|
188
|
+
// Add table row
|
|
189
|
+
html += `
|
|
190
|
+
<tr${narrativeLinkId ? ` id="${narrativeLinkId}"` : ''}>
|
|
191
|
+
<td>${medication}<ul></ul></td>
|
|
192
|
+
<td>${sig}</td>
|
|
193
|
+
<td>${dispenseQuantity}</td>
|
|
194
|
+
<td>${refills}</td>
|
|
195
|
+
<td>${startDate}</td>
|
|
196
|
+
<td>${endDate}</td>
|
|
197
|
+
<td>${status}</td>
|
|
198
|
+
</tr>`;
|
|
199
|
+
}
|
|
200
|
+
html += `
|
|
201
|
+
</tbody>
|
|
202
|
+
</table></div>`;
|
|
203
|
+
return html;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.MedicationSummaryTemplate = MedicationSummaryTemplate;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TBundle } from '../../../types/resources/Bundle';
|
|
2
|
+
import { ITemplate } from './interfaces/ITemplate';
|
|
3
|
+
/**
|
|
4
|
+
* Class to generate HTML narrative for Past History of Illness (Condition resources)
|
|
5
|
+
* This replaces the Jinja2 pasthistoryofillness.j2 template
|
|
6
|
+
*/
|
|
7
|
+
export declare class PastHistoryOfIllnessTemplate implements ITemplate {
|
|
8
|
+
/**
|
|
9
|
+
* Generate HTML narrative for Past History of Illnesses
|
|
10
|
+
* @param resource - FHIR Bundle containing Condition resources
|
|
11
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
12
|
+
* @returns HTML string for rendering
|
|
13
|
+
*/
|
|
14
|
+
generateNarrative(resource: TBundle, timezone: string | undefined): string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PastHistoryOfIllnessTemplate = void 0;
|
|
4
|
+
// PastHistoryOfIllnessTemplate.ts - TypeScript replacement for Jinja2 pasthistoryofillness.j2
|
|
5
|
+
const TemplateUtilities_1 = require("./TemplateUtilities");
|
|
6
|
+
/**
|
|
7
|
+
* Class to generate HTML narrative for Past History of Illness (Condition resources)
|
|
8
|
+
* This replaces the Jinja2 pasthistoryofillness.j2 template
|
|
9
|
+
*/
|
|
10
|
+
class PastHistoryOfIllnessTemplate {
|
|
11
|
+
/**
|
|
12
|
+
* Generate HTML narrative for Past History of Illnesses
|
|
13
|
+
* @param resource - FHIR Bundle containing Condition resources
|
|
14
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
15
|
+
* @returns HTML string for rendering
|
|
16
|
+
*/
|
|
17
|
+
generateNarrative(resource, timezone) {
|
|
18
|
+
const templateUtilities = new TemplateUtilities_1.TemplateUtilities(resource);
|
|
19
|
+
// Start building the HTML table
|
|
20
|
+
let html = `
|
|
21
|
+
<h5>Past History of Illnesses</h5>
|
|
22
|
+
<table class="hapiPropertyTable">
|
|
23
|
+
<thead>
|
|
24
|
+
<tr>
|
|
25
|
+
<th>Medical Problems</th>
|
|
26
|
+
<th>Status</th>
|
|
27
|
+
<th>Comments</th>
|
|
28
|
+
<th>Date</th>
|
|
29
|
+
</tr>
|
|
30
|
+
</thead>
|
|
31
|
+
<tbody>`;
|
|
32
|
+
// Check if we have entries in the bundle
|
|
33
|
+
if (resource.entry && Array.isArray(resource.entry)) {
|
|
34
|
+
// Loop through entries in the bundle
|
|
35
|
+
for (const entry of resource.entry) {
|
|
36
|
+
const cond = entry.resource;
|
|
37
|
+
// Skip Composition resources
|
|
38
|
+
if (cond.resourceType === 'Composition') {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Use the enhanced narrativeLinkId utility function to extract the ID directly from the resource
|
|
42
|
+
// Add a table row for this condition
|
|
43
|
+
html += `
|
|
44
|
+
<tr id="${(templateUtilities.narrativeLinkId(cond))}">
|
|
45
|
+
<td>${templateUtilities.codeableConcept(cond.code, 'display')}</td>
|
|
46
|
+
<td>${templateUtilities.codeableConcept(cond.clinicalStatus, 'code')}</td>
|
|
47
|
+
<td>${templateUtilities.renderNotes(cond.note, timezone)}</td>
|
|
48
|
+
<td>${templateUtilities.renderTime(cond.onsetDateTime, timezone)}</td>
|
|
49
|
+
</tr>`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Close the HTML table
|
|
53
|
+
html += `
|
|
54
|
+
</tbody>
|
|
55
|
+
</table>`;
|
|
56
|
+
return html;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.PastHistoryOfIllnessTemplate = PastHistoryOfIllnessTemplate;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { TBundle } from '../../../types/resources/Bundle';
|
|
2
|
+
import { ITemplate } from './interfaces/ITemplate';
|
|
3
|
+
/**
|
|
4
|
+
* Class to generate HTML narrative for Patient resources
|
|
5
|
+
* This replaces the Jinja2 patient.j2 template
|
|
6
|
+
*/
|
|
7
|
+
export declare class PatientTemplate implements ITemplate {
|
|
8
|
+
/**
|
|
9
|
+
* Generate HTML narrative for Patient resource
|
|
10
|
+
* @param resource - FHIR Bundle containing Patient resource
|
|
11
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
12
|
+
* @returns HTML string for rendering
|
|
13
|
+
*/
|
|
14
|
+
generateNarrative(resource: TBundle, timezone: string | undefined): string;
|
|
15
|
+
/**
|
|
16
|
+
* Internal static implementation that actually generates the narrative
|
|
17
|
+
* @param resource - FHIR Bundle containing Patient resource
|
|
18
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
19
|
+
* @returns HTML string for rendering
|
|
20
|
+
*/
|
|
21
|
+
private static generateStaticNarrative;
|
|
22
|
+
/**
|
|
23
|
+
* Renders patient names as HTML list items
|
|
24
|
+
* @param patient - Patient resource
|
|
25
|
+
* @returns HTML string of list items
|
|
26
|
+
*/
|
|
27
|
+
private static renderNames;
|
|
28
|
+
/**
|
|
29
|
+
* Renders patient identifiers as HTML list items
|
|
30
|
+
* @param patient - Patient resource
|
|
31
|
+
* @returns HTML string of list items
|
|
32
|
+
*/
|
|
33
|
+
private static renderIdentifiers;
|
|
34
|
+
/**
|
|
35
|
+
* Renders patient telecom information as HTML list items
|
|
36
|
+
* @param patient - Patient resource
|
|
37
|
+
* @returns HTML string of list items
|
|
38
|
+
*/
|
|
39
|
+
private static renderTelecom;
|
|
40
|
+
/**
|
|
41
|
+
* Renders patient addresses as HTML list items
|
|
42
|
+
* @param patient - Patient resource
|
|
43
|
+
* @returns HTML string of list items
|
|
44
|
+
*/
|
|
45
|
+
private static renderAddresses;
|
|
46
|
+
/**
|
|
47
|
+
* Renders patient deceased status
|
|
48
|
+
* @param patient - Patient resource
|
|
49
|
+
* @returns HTML string for deceased status
|
|
50
|
+
*/
|
|
51
|
+
private static renderDeceased;
|
|
52
|
+
/**
|
|
53
|
+
* Renders patient communication preferences as HTML list items
|
|
54
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
55
|
+
* @param patient - Patient resource
|
|
56
|
+
* @returns HTML string of list items
|
|
57
|
+
*/
|
|
58
|
+
private static renderCommunication;
|
|
59
|
+
/**
|
|
60
|
+
* Capitalizes first letter of a string
|
|
61
|
+
* @param str - String to capitalize
|
|
62
|
+
* @returns Capitalized string
|
|
63
|
+
*/
|
|
64
|
+
private static capitalize;
|
|
65
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PatientTemplate = void 0;
|
|
4
|
+
// PatientTemplate.ts - TypeScript replacement for Jinja2 patient.j2
|
|
5
|
+
const TemplateUtilities_1 = require("./TemplateUtilities");
|
|
6
|
+
/**
|
|
7
|
+
* Class to generate HTML narrative for Patient resources
|
|
8
|
+
* This replaces the Jinja2 patient.j2 template
|
|
9
|
+
*/
|
|
10
|
+
class PatientTemplate {
|
|
11
|
+
/**
|
|
12
|
+
* Generate HTML narrative for Patient resource
|
|
13
|
+
* @param resource - FHIR Bundle containing Patient resource
|
|
14
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
15
|
+
* @returns HTML string for rendering
|
|
16
|
+
*/
|
|
17
|
+
generateNarrative(resource, timezone) {
|
|
18
|
+
return PatientTemplate.generateStaticNarrative(resource, timezone);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Internal static implementation that actually generates the narrative
|
|
22
|
+
* @param resource - FHIR Bundle containing Patient resource
|
|
23
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
24
|
+
* @returns HTML string for rendering
|
|
25
|
+
*/
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
27
|
+
static generateStaticNarrative(resource, timezone) {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
const templateUtilities = new TemplateUtilities_1.TemplateUtilities(resource);
|
|
30
|
+
let html = '';
|
|
31
|
+
// Loop through bundle entries to find Patient resources
|
|
32
|
+
for (const entry of resource.entry || []) {
|
|
33
|
+
if (((_a = entry.resource) === null || _a === void 0 ? void 0 : _a.resourceType) === 'Patient') {
|
|
34
|
+
const patient = entry.resource;
|
|
35
|
+
html += `
|
|
36
|
+
<div>
|
|
37
|
+
<h2>Patient Summary</h2>
|
|
38
|
+
<ul>
|
|
39
|
+
<li><strong>Name(s):</strong>${this.renderNames(patient)}</li>
|
|
40
|
+
<li><strong>Gender:</strong>${patient.gender ? this.capitalize(patient.gender) : ''}</li>
|
|
41
|
+
<li><strong>Date of Birth:</strong>${patient.birthDate || ''}</li>
|
|
42
|
+
<li><strong>Identifier(s):</strong>${this.renderIdentifiers(patient)}</li>
|
|
43
|
+
<li><strong>Telecom:</strong>${this.renderTelecom(patient)}</li>
|
|
44
|
+
<li><strong>Address(es):</strong>${this.renderAddresses(patient)}</li>
|
|
45
|
+
<li><strong>Marital Status:</strong> ${((_b = patient.maritalStatus) === null || _b === void 0 ? void 0 : _b.text) || ''}</li>
|
|
46
|
+
<li><strong>Deceased:</strong>${this.renderDeceased(patient)}</li>
|
|
47
|
+
<li><strong>Language(s):</strong>${this.renderCommunication(templateUtilities, patient)}</li>
|
|
48
|
+
</ul>
|
|
49
|
+
</div>`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return html;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Renders patient names as HTML list items
|
|
56
|
+
* @param patient - Patient resource
|
|
57
|
+
* @returns HTML string of list items
|
|
58
|
+
*/
|
|
59
|
+
static renderNames(patient) {
|
|
60
|
+
if (!patient.name || patient.name.length === 0) {
|
|
61
|
+
return '';
|
|
62
|
+
}
|
|
63
|
+
return patient.name.map(name => {
|
|
64
|
+
const nameText = name.text ||
|
|
65
|
+
((name.given || []).join(' ') + ' ' + (name.family || '')).trim();
|
|
66
|
+
return `<ul><li>${nameText}</li></ul>`;
|
|
67
|
+
}).join('');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Renders patient identifiers as HTML list items
|
|
71
|
+
* @param patient - Patient resource
|
|
72
|
+
* @returns HTML string of list items
|
|
73
|
+
*/
|
|
74
|
+
static renderIdentifiers(patient) {
|
|
75
|
+
if (!patient.identifier || patient.identifier.length === 0) {
|
|
76
|
+
return '';
|
|
77
|
+
}
|
|
78
|
+
return patient.identifier.map(id => {
|
|
79
|
+
const system = id.system || '';
|
|
80
|
+
const value = id.value || '';
|
|
81
|
+
return `<ul><li>${system}: ${value}</li></ul>`;
|
|
82
|
+
}).join('');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Renders patient telecom information as HTML list items
|
|
86
|
+
* @param patient - Patient resource
|
|
87
|
+
* @returns HTML string of list items
|
|
88
|
+
*/
|
|
89
|
+
static renderTelecom(patient) {
|
|
90
|
+
if (!patient.telecom || patient.telecom.length === 0) {
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
return patient.telecom.map(telecom => {
|
|
94
|
+
const system = telecom.system ? this.capitalize(telecom.system) : '';
|
|
95
|
+
const value = telecom.value || '';
|
|
96
|
+
const use = telecom.use ? ` (${telecom.use})` : '';
|
|
97
|
+
return `<ul><li>${system}: ${value}${use}</li></ul>`;
|
|
98
|
+
}).join('');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Renders patient addresses as HTML list items
|
|
102
|
+
* @param patient - Patient resource
|
|
103
|
+
* @returns HTML string of list items
|
|
104
|
+
*/
|
|
105
|
+
static renderAddresses(patient) {
|
|
106
|
+
if (!patient.address || patient.address.length === 0) {
|
|
107
|
+
return '';
|
|
108
|
+
}
|
|
109
|
+
return patient.address.map(address => {
|
|
110
|
+
const addressText = address.text ||
|
|
111
|
+
((address.line || []).join(', ') + ', ' + (address.city || '') + ', ' + (address.country || '')).trim();
|
|
112
|
+
return `<ul><li>${addressText}</li></ul>`;
|
|
113
|
+
}).join('');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Renders patient deceased status
|
|
117
|
+
* @param patient - Patient resource
|
|
118
|
+
* @returns HTML string for deceased status
|
|
119
|
+
*/
|
|
120
|
+
static renderDeceased(patient) {
|
|
121
|
+
if (patient.deceasedBoolean !== undefined) {
|
|
122
|
+
return patient.deceasedBoolean ? 'Yes' : 'No';
|
|
123
|
+
}
|
|
124
|
+
if (patient.deceasedDateTime) {
|
|
125
|
+
return patient.deceasedDateTime;
|
|
126
|
+
}
|
|
127
|
+
return '';
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Renders patient communication preferences as HTML list items
|
|
131
|
+
* @param templateUtilities - Instance of TemplateUtilities for utility functions
|
|
132
|
+
* @param patient - Patient resource
|
|
133
|
+
* @returns HTML string of list items
|
|
134
|
+
*/
|
|
135
|
+
static renderCommunication(templateUtilities, patient) {
|
|
136
|
+
if (!patient.communication || patient.communication.length === 0) {
|
|
137
|
+
return '';
|
|
138
|
+
}
|
|
139
|
+
return patient.communication.map(comm => {
|
|
140
|
+
if (!comm.language)
|
|
141
|
+
return '';
|
|
142
|
+
const language = templateUtilities.codeableConcept(comm.language);
|
|
143
|
+
const preferred = comm.preferred ? ' (preferred)' : '';
|
|
144
|
+
return `<ul><li>${language}${preferred}</li></ul>`;
|
|
145
|
+
}).join('');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Capitalizes first letter of a string
|
|
149
|
+
* @param str - String to capitalize
|
|
150
|
+
* @returns Capitalized string
|
|
151
|
+
*/
|
|
152
|
+
static capitalize(str) {
|
|
153
|
+
if (!str)
|
|
154
|
+
return '';
|
|
155
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.PatientTemplate = PatientTemplate;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TBundle } from '../../../types/resources/Bundle';
|
|
2
|
+
import { ITemplate } from './interfaces/ITemplate';
|
|
3
|
+
/**
|
|
4
|
+
* Class to generate HTML narrative for Plan of Care (CarePlan resources)
|
|
5
|
+
* This replaces the Jinja2 planofcare.j2 template
|
|
6
|
+
*/
|
|
7
|
+
export declare class PlanOfCareTemplate implements ITemplate {
|
|
8
|
+
/**
|
|
9
|
+
* Generate HTML narrative for Plan of Care
|
|
10
|
+
* @param resource - FHIR Bundle containing CarePlan resources
|
|
11
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
12
|
+
* @returns HTML string for rendering
|
|
13
|
+
*/
|
|
14
|
+
generateNarrative(resource: TBundle, timezone: string | undefined): string;
|
|
15
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlanOfCareTemplate = void 0;
|
|
4
|
+
// PlanOfCareTemplate.ts - TypeScript replacement for Jinja2 planofcare.j2
|
|
5
|
+
const TemplateUtilities_1 = require("./TemplateUtilities");
|
|
6
|
+
/**
|
|
7
|
+
* Class to generate HTML narrative for Plan of Care (CarePlan resources)
|
|
8
|
+
* This replaces the Jinja2 planofcare.j2 template
|
|
9
|
+
*/
|
|
10
|
+
class PlanOfCareTemplate {
|
|
11
|
+
/**
|
|
12
|
+
* Generate HTML narrative for Plan of Care
|
|
13
|
+
* @param resource - FHIR Bundle containing CarePlan resources
|
|
14
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
15
|
+
* @returns HTML string for rendering
|
|
16
|
+
*/
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
+
generateNarrative(resource, timezone) {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const templateUtilities = new TemplateUtilities_1.TemplateUtilities(resource);
|
|
21
|
+
// Start building the HTML table
|
|
22
|
+
let html = `
|
|
23
|
+
<h5>Plan of Care</h5>
|
|
24
|
+
<table class="hapiPropertyTable">
|
|
25
|
+
<thead>
|
|
26
|
+
<tr>
|
|
27
|
+
<th>Activity</th>
|
|
28
|
+
<th>Intent</th>
|
|
29
|
+
<th>Comments</th>
|
|
30
|
+
<th>Planned Start</th>
|
|
31
|
+
<th>Planned End</th>
|
|
32
|
+
</tr>
|
|
33
|
+
</thead>
|
|
34
|
+
<tbody>`;
|
|
35
|
+
// Check if we have entries in the bundle
|
|
36
|
+
if (resource.entry && Array.isArray(resource.entry)) {
|
|
37
|
+
// Loop through entries in the bundle
|
|
38
|
+
for (const entry of resource.entry) {
|
|
39
|
+
const cp = entry.resource;
|
|
40
|
+
// Skip Composition resources
|
|
41
|
+
if (cp.resourceType === 'Composition') {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Use the enhanced narrativeLinkId utility function to extract the ID directly from the resource
|
|
45
|
+
// Add a table row for this care plan
|
|
46
|
+
html += `
|
|
47
|
+
<tr id="${(templateUtilities.narrativeLinkId(cp))}">
|
|
48
|
+
<td>${cp.description || ''}</td>
|
|
49
|
+
<td>${cp.intent || cp.intent || ''}</td>
|
|
50
|
+
<td>${templateUtilities.concat(cp.note, 'text')}</td>
|
|
51
|
+
<td>${((_a = cp.period) === null || _a === void 0 ? void 0 : _a.start) || ''}</td>
|
|
52
|
+
<td>${((_b = cp.period) === null || _b === void 0 ? void 0 : _b.end) || ''}</td>
|
|
53
|
+
</tr>`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Close the HTML table
|
|
57
|
+
html += `
|
|
58
|
+
</tbody>
|
|
59
|
+
</table>`;
|
|
60
|
+
return html;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.PlanOfCareTemplate = PlanOfCareTemplate;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TBundle } from '../../../types/resources/Bundle';
|
|
2
|
+
import { ITemplate } from './interfaces/ITemplate';
|
|
3
|
+
/**
|
|
4
|
+
* Class to generate HTML narrative for Pregnancy (Observation resources)
|
|
5
|
+
* This replaces the Jinja2 pregnancy.j2 template
|
|
6
|
+
*/
|
|
7
|
+
export declare class PregnancyTemplate implements ITemplate {
|
|
8
|
+
/**
|
|
9
|
+
* Generate HTML narrative for Pregnancy
|
|
10
|
+
* @param resource - FHIR Bundle containing Observation resources
|
|
11
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
12
|
+
* @returns HTML string for rendering
|
|
13
|
+
*/
|
|
14
|
+
generateNarrative(resource: TBundle, timezone: string | undefined): string;
|
|
15
|
+
/**
|
|
16
|
+
* Internal static implementation that actually generates the narrative
|
|
17
|
+
* @param resource - FHIR Bundle containing Observation resources
|
|
18
|
+
* @param timezone - Optional timezone to use for date formatting (e.g., 'America/New_York', 'Europe/London')
|
|
19
|
+
* @returns HTML string for rendering
|
|
20
|
+
*/
|
|
21
|
+
private static generateStaticNarrative;
|
|
22
|
+
}
|