feature: FHIR R4 Inbound Facade
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
using Hl7.Fhir.Model;
|
||||
using Task = System.Threading.Tasks.Task;
|
||||
|
||||
public class MedicationAdministrationFhirMapper
|
||||
{
|
||||
private readonly FhirReferenceResolver _refs;
|
||||
|
||||
public MedicationAdministrationFhirMapper(FhirReferenceResolver refs) => _refs = refs;
|
||||
|
||||
public async Task<(CreateMedicationAdministrationRequest Request, Guid EncounterId)> ToCreateRequestAsync(
|
||||
Hl7.Fhir.Model.MedicationAdministration fhir)
|
||||
{
|
||||
if (fhir.Context is null)
|
||||
throw new FhirMappingException(
|
||||
"MedicationAdministration context is required.", "required");
|
||||
|
||||
var encounterId = await _refs.ResolveEncounterReferenceAsync(fhir.Context);
|
||||
|
||||
var drugName = fhir.Medication is CodeableConcept cc
|
||||
? cc.Text ?? cc.Coding?.FirstOrDefault()?.Display ?? "Unknown"
|
||||
: "Unknown";
|
||||
|
||||
var dose = fhir.Dosage?.Dose as Quantity;
|
||||
var route = fhir.Dosage?.Route?.Text ?? fhir.Dosage?.Route?.Coding?.FirstOrDefault()?.Display ?? "IV";
|
||||
var performer = fhir.Performer?.FirstOrDefault()?.Actor?.Display ?? "Unknown";
|
||||
|
||||
var req = new CreateMedicationAdministrationRequest(
|
||||
DrugName: drugName,
|
||||
Dose: dose?.Value ?? 0m,
|
||||
DoseUnit: dose?.Unit ?? "mg",
|
||||
Route: route,
|
||||
AdministeredAt: fhir.Effective.ToUtcDateTimeOffset(),
|
||||
AdministeredBy: performer);
|
||||
|
||||
return (req, encounterId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user