001package org.hl7.fhir.convertors.conv10_40.resources10_40;
002
003import org.hl7.fhir.convertors.context.ConversionContext10_40;
004import org.hl7.fhir.convertors.conv10_40.datatypes10_40.Reference10_40;
005import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.CodeableConcept10_40;
006import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.Duration10_40;
007import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.Identifier10_40;
008import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.Period10_40;
009import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.Ratio10_40;
010import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.SimpleQuantity10_40;
011import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.Timing10_40;
012import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.DateTime10_40;
013import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.String10_40;
014import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.UnsignedInt10_40;
015import org.hl7.fhir.dstu2.model.MedicationOrder;
016import org.hl7.fhir.exceptions.FHIRException;
017import org.hl7.fhir.r4.model.Dosage;
018
019public class MedicationRequest10_40 {
020  public static org.hl7.fhir.r4.model.MedicationRequest convertMedicationRequest(org.hl7.fhir.dstu2.model.MedicationOrder src) throws FHIRException {
021    if (src == null)
022      return null;
023    org.hl7.fhir.r4.model.MedicationRequest tgt = new org.hl7.fhir.r4.model.MedicationRequest();
024    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyDomainResource(src, tgt);
025    tgt.setIntent(org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestIntent.ORDER);
026    for (org.hl7.fhir.dstu2.model.Identifier identifier : src.getIdentifier())
027      tgt.addIdentifier(Identifier10_40.convertIdentifier(identifier));
028    if (src.hasDateWritten())
029      tgt.setAuthoredOnElement(DateTime10_40.convertDateTime(src.getDateWrittenElement()));
030    if (src.hasStatus())
031      tgt.setStatus(org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestStatus.fromCode(src.getStatus().toCode()));
032    else
033      tgt.setStatus(org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestStatus.UNKNOWN);
034    if (src.hasPatient())
035      tgt.setSubject(Reference10_40.convertReference(src.getPatient()));
036    if (src.hasPrescriber())
037      tgt.setRequester(Reference10_40.convertReference(src.getPrescriber()));
038    if (src.hasReasonCodeableConcept())
039      tgt.addReasonCode(CodeableConcept10_40.convertCodeableConcept(src.getReasonCodeableConcept()));
040    if (src.hasReasonReference())
041      tgt.addReasonReference(Reference10_40.convertReference((src.getReasonReference())));
042    if (src.hasNote())
043      tgt.addNote(new org.hl7.fhir.r4.model.Annotation(new org.hl7.fhir.r4.model.MarkdownType((src.getNote()))));
044    if (src.hasMedicationCodeableConcept())
045      tgt.setMedication(CodeableConcept10_40.convertCodeableConcept(src.getMedicationCodeableConcept()));
046    if (src.hasMedicationReference())
047      tgt.setMedication(Reference10_40.convertReference(src.getMedicationReference()));
048    for (MedicationOrder.MedicationOrderDosageInstructionComponent dosage : src.getDosageInstruction())
049      tgt.addDosageInstruction(medDosageInstruction(dosage));
050    if (src.hasDispenseRequest())
051      tgt.setDispenseRequest(medDispenseRequest(src.getDispenseRequest()));
052    if (src.hasSubstitution())
053      tgt.setSubstitution(medSubstitution(src.getSubstitution()));
054    if (src.hasPriorPrescription())
055      tgt.setPriorPrescription(Reference10_40.convertReference(src.getPriorPrescription()));
056    return tgt;
057  }
058
059  private static org.hl7.fhir.r4.model.Dosage medDosageInstruction(org.hl7.fhir.dstu2.model.MedicationOrder.MedicationOrderDosageInstructionComponent src) {
060    if (src == null || src.isEmpty())
061      return null;
062    org.hl7.fhir.r4.model.Dosage tgt = new org.hl7.fhir.r4.model.Dosage();
063    if (src.hasText())
064      tgt.setTextElement(String10_40.convertString(src.getTextElement()));
065    if (src.hasAdditionalInstructions())
066      tgt.addAdditionalInstruction(CodeableConcept10_40.convertCodeableConcept(src.getAdditionalInstructions()));
067    if (src.hasTiming())
068      tgt.setTiming(Timing10_40.convertTiming(src.getTiming()));
069    if (src.hasAsNeeded())
070      tgt.setAsNeeded(ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().convertType(src.getAsNeeded()));
071    if (src.hasSiteCodeableConcept())
072      tgt.setSite(CodeableConcept10_40.convertCodeableConcept(src.getSiteCodeableConcept()));
073    if (src.hasRoute())
074      tgt.setRoute(CodeableConcept10_40.convertCodeableConcept(src.getRoute()));
075    if (src.hasMethod())
076      tgt.setMethod(CodeableConcept10_40.convertCodeableConcept(src.getMethod()));
077    Dosage.DosageDoseAndRateComponent dose_and_rate = new Dosage.DosageDoseAndRateComponent();
078    if (src.hasDose())
079      dose_and_rate.setDose(ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().convertType(src.getDose()));
080    if (src.hasRate())
081      dose_and_rate.setRate(ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().convertType(src.getRate()));
082    tgt.addDoseAndRate(dose_and_rate);
083    if (src.hasMaxDosePerPeriod())
084      tgt.setMaxDosePerPeriod(Ratio10_40.convertRatio(src.getMaxDosePerPeriod()));
085    return tgt;
086  }
087
088  private static org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestDispenseRequestComponent medDispenseRequest(org.hl7.fhir.dstu2.model.MedicationOrder.MedicationOrderDispenseRequestComponent src) {
089    if (src == null || src.isEmpty())
090      return null;
091    org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestDispenseRequestComponent tgt = new org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestDispenseRequestComponent();
092    if (src.hasValidityPeriod())
093      tgt.setValidityPeriod(Period10_40.convertPeriod(src.getValidityPeriod()));
094    if (src.hasNumberOfRepeatsAllowed())
095      tgt.setNumberOfRepeatsAllowedElement(UnsignedInt10_40.convertUnsignedIntToPositive(src.getNumberOfRepeatsAllowedElement()));
096    if (src.hasQuantity())
097      tgt.setQuantity(SimpleQuantity10_40.convertSimpleQuantity(src.getQuantity()));
098    if (src.hasExpectedSupplyDuration())
099      tgt.setExpectedSupplyDuration(Duration10_40.convertDuration(src.getExpectedSupplyDuration()));
100    return tgt;
101  }
102
103  private static org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestSubstitutionComponent medSubstitution(org.hl7.fhir.dstu2.model.MedicationOrder.MedicationOrderSubstitutionComponent src) {
104    if (src == null || src.isEmpty())
105      return null;
106    org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestSubstitutionComponent tgt = new org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestSubstitutionComponent();
107    if (src.hasReason())
108      tgt.setReason(CodeableConcept10_40.convertCodeableConcept(src.getReason()));
109    return tgt;
110  }
111}