Files
vigilcare-clinical/VigilCareClinicalAPI/Fhir/Mapping/MedicationAdministrationFhirMapper.cs

38 lines
1.4 KiB
C#

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);
}
}