001package org.hl7.fhir.convertors.conv30_50.resources30_50;
002
003import java.util.ArrayList;
004import java.util.List;
005
006import org.hl7.fhir.convertors.context.ConversionContext30_50;
007import org.hl7.fhir.convertors.conv30_50.datatypes30_50.Reference30_50;
008import org.hl7.fhir.convertors.conv30_50.datatypes30_50.complextypes30_50.Annotation30_50;
009import org.hl7.fhir.convertors.conv30_50.datatypes30_50.complextypes30_50.CodeableConcept30_50;
010import org.hl7.fhir.convertors.conv30_50.datatypes30_50.complextypes30_50.Identifier30_50;
011import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.DateTime30_50;
012import org.hl7.fhir.exceptions.FHIRException;
013import org.hl7.fhir.r5.model.CodeableConcept;
014import org.hl7.fhir.r5.model.Coding;
015
016public class Condition30_50 {
017
018  private static final String CODE_SYSTEM_LEGACY_CONDITION_VER_CLINICAL_URL = "http://hl7.org/fhir/condition-ver-status";
019
020  private static final String CODE_SYSTEM_CONDITION_VER_CLINICAL_URL = "http://terminology.hl7.org/CodeSystem/condition-ver-status";
021
022  private static final String CODE_SYSTEM_LEGACY_CONDITION_CLINICAL_URL = "http://hl7.org/fhir/condition-clinical";
023
024  private static final String CODE_SYSTEM_CONDITION_CLINICAL_URL = "http://terminology.hl7.org/CodeSystem/condition-clinical";
025
026  public static org.hl7.fhir.r5.model.Condition convertCondition(org.hl7.fhir.dstu3.model.Condition src) throws FHIRException {
027    if (src == null)
028      return null;
029    org.hl7.fhir.r5.model.Condition tgt = new org.hl7.fhir.r5.model.Condition();
030    ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyDomainResource(src, tgt);
031    for (org.hl7.fhir.dstu3.model.Identifier t : src.getIdentifier())
032      tgt.addIdentifier(Identifier30_50.convertIdentifier(t));
033    if (src.hasClinicalStatus())
034      tgt.setClinicalStatus(convertConditionClinicalStatus(src.getClinicalStatus()));
035    if (src.hasVerificationStatus())
036      tgt.setVerificationStatus(convertConditionVerificationStatus(src.getVerificationStatus()));
037    for (org.hl7.fhir.dstu3.model.CodeableConcept t : src.getCategory())
038      tgt.addCategory(CodeableConcept30_50.convertCodeableConcept(t));
039    if (src.hasSeverity())
040      tgt.setSeverity(CodeableConcept30_50.convertCodeableConcept(src.getSeverity()));
041    if (src.hasCode())
042      tgt.setCode(CodeableConcept30_50.convertCodeableConcept(src.getCode()));
043    for (org.hl7.fhir.dstu3.model.CodeableConcept t : src.getBodySite())
044      tgt.addBodySite(CodeableConcept30_50.convertCodeableConcept(t));
045    if (src.hasSubject())
046      tgt.setSubject(Reference30_50.convertReference(src.getSubject()));
047    if (src.hasContext())
048      tgt.setEncounter(Reference30_50.convertReference(src.getContext()));
049    if (src.hasOnset())
050      tgt.setOnset(ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().convertType(src.getOnset()));
051    if (src.hasAbatement())
052      tgt.setAbatement(ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().convertType(src.getAbatement()));
053    if (src.hasAssertedDate())
054      tgt.setRecordedDateElement(DateTime30_50.convertDateTime(src.getAssertedDateElement()));
055    if (src.hasAsserter())
056      tgt.addParticipant().setFunction(new CodeableConcept(new Coding("http://terminology.hl7.org/CodeSystem/provenance-participant-type", "informant", "Informant"))).setActor(Reference30_50.convertReference(src.getAsserter()));
057    if (src.hasStage())
058      tgt.addStage(convertConditionStageComponent(src.getStage()));
059    for (org.hl7.fhir.dstu3.model.Condition.ConditionEvidenceComponent t : src.getEvidence())
060      tgt.getEvidence().addAll(convertConditionEvidenceComponent(t));
061    for (org.hl7.fhir.dstu3.model.Annotation t : src.getNote()) tgt.addNote(Annotation30_50.convertAnnotation(t));
062    return tgt;
063  }
064
065  public static org.hl7.fhir.dstu3.model.Condition convertCondition(org.hl7.fhir.r5.model.Condition src) throws FHIRException {
066    if (src == null)
067      return null;
068    org.hl7.fhir.dstu3.model.Condition tgt = new org.hl7.fhir.dstu3.model.Condition();
069    ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyDomainResource(src, tgt);
070    for (org.hl7.fhir.r5.model.Identifier t : src.getIdentifier())
071      tgt.addIdentifier(Identifier30_50.convertIdentifier(t));
072    if (src.hasClinicalStatus())
073      tgt.setClinicalStatus(convertConditionClinicalStatus(src.getClinicalStatus()));
074    if (src.hasVerificationStatus())
075      tgt.setVerificationStatus(convertConditionVerificationStatus(src.getVerificationStatus()));
076    for (org.hl7.fhir.r5.model.CodeableConcept t : src.getCategory())
077      tgt.addCategory(CodeableConcept30_50.convertCodeableConcept(t));
078    if (src.hasSeverity())
079      tgt.setSeverity(CodeableConcept30_50.convertCodeableConcept(src.getSeverity()));
080    if (src.hasCode())
081      tgt.setCode(CodeableConcept30_50.convertCodeableConcept(src.getCode()));
082    for (org.hl7.fhir.r5.model.CodeableConcept t : src.getBodySite())
083      tgt.addBodySite(CodeableConcept30_50.convertCodeableConcept(t));
084    if (src.hasSubject())
085      tgt.setSubject(Reference30_50.convertReference(src.getSubject()));
086    if (src.hasEncounter())
087      tgt.setContext(Reference30_50.convertReference(src.getEncounter()));
088    if (src.hasOnset())
089      tgt.setOnset(ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().convertType(src.getOnset()));
090    if (src.hasAbatement())
091      tgt.setAbatement(ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().convertType(src.getAbatement()));
092    if (src.hasRecordedDate())
093      tgt.setAssertedDateElement(DateTime30_50.convertDateTime(src.getRecordedDateElement()));
094    for (org.hl7.fhir.r5.model.Condition.ConditionParticipantComponent t : src.getParticipant()) {
095      if (t.getFunction().hasCoding("http://terminology.hl7.org/CodeSystem/provenance-participant-type", "informant"))
096        tgt.setAsserter(Reference30_50.convertReference(t.getActor()));
097    }
098    if (src.hasStage())
099      tgt.setStage(convertConditionStageComponent(src.getStageFirstRep()));
100    for (org.hl7.fhir.r5.model.CodeableReference t : src.getEvidence())
101      tgt.addEvidence(convertConditionEvidenceComponent(t));
102    for (org.hl7.fhir.r5.model.Annotation t : src.getNote()) tgt.addNote(Annotation30_50.convertAnnotation(t));
103    return tgt;
104  }
105
106  static public org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus convertConditionClinicalStatus(org.hl7.fhir.r5.model.CodeableConcept src) throws FHIRException {
107    if (src == null)
108      return null;
109    if (src.hasCoding(CODE_SYSTEM_CONDITION_CLINICAL_URL, "active") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_CLINICAL_URL, "active"))
110      return org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus.ACTIVE;
111    if (src.hasCoding(CODE_SYSTEM_CONDITION_CLINICAL_URL, "recurrence") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_CLINICAL_URL, "recurrence"))
112      return org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus.RECURRENCE;
113    if (src.hasCoding(CODE_SYSTEM_CONDITION_CLINICAL_URL, "inactive") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_CLINICAL_URL, "inactive"))
114      return org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus.INACTIVE;
115    if (src.hasCoding(CODE_SYSTEM_CONDITION_CLINICAL_URL, "remission") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_CLINICAL_URL, "remission"))
116      return org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus.REMISSION;
117    if (src.hasCoding(CODE_SYSTEM_CONDITION_CLINICAL_URL, "resolved") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_CLINICAL_URL, "resolved"))
118      return org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus.RESOLVED;
119    return org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus.NULL;
120  }
121
122  static public org.hl7.fhir.r5.model.CodeableConcept convertConditionClinicalStatus(org.hl7.fhir.dstu3.model.Condition.ConditionClinicalStatus src) throws FHIRException {
123    if (src == null)
124      return null;
125    org.hl7.fhir.r5.model.CodeableConcept cc = new org.hl7.fhir.r5.model.CodeableConcept();
126    switch (src) {
127      case ACTIVE:
128        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_CLINICAL_URL).setCode("active");
129        return cc;
130      case RECURRENCE:
131        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_CLINICAL_URL).setCode("recurrence");
132        return cc;
133      case INACTIVE:
134        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_CLINICAL_URL).setCode("inactive");
135        return cc;
136      case REMISSION:
137        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_CLINICAL_URL).setCode("remission");
138        return cc;
139      case RESOLVED:
140        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_CLINICAL_URL).setCode("resolved");
141        return cc;
142      default:
143        return null;
144    }
145  }
146
147  public static List<org.hl7.fhir.r5.model.CodeableReference> convertConditionEvidenceComponent(org.hl7.fhir.dstu3.model.Condition.ConditionEvidenceComponent src) throws FHIRException {
148    if (src == null)
149      return null;
150    List<org.hl7.fhir.r5.model.CodeableReference> list = new ArrayList<>();
151    for (org.hl7.fhir.dstu3.model.CodeableConcept t : src.getCode()) {
152      org.hl7.fhir.r5.model.CodeableReference tgt = new org.hl7.fhir.r5.model.CodeableReference();
153      ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyElement(src, tgt);
154      tgt.setConcept(CodeableConcept30_50.convertCodeableConcept(t));
155      list.add(tgt);
156    }
157    for (org.hl7.fhir.dstu3.model.Reference t : src.getDetail()) {
158      org.hl7.fhir.r5.model.CodeableReference tgt = new org.hl7.fhir.r5.model.CodeableReference();
159      ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyElement(src, tgt);
160      tgt.setReference(Reference30_50.convertReference(t));
161      list.add(tgt);
162    }
163    return list;
164  }
165
166  public static org.hl7.fhir.dstu3.model.Condition.ConditionEvidenceComponent convertConditionEvidenceComponent(org.hl7.fhir.r5.model.CodeableReference src) throws FHIRException {
167    if (src == null)
168      return null;
169    org.hl7.fhir.dstu3.model.Condition.ConditionEvidenceComponent tgt = new org.hl7.fhir.dstu3.model.Condition.ConditionEvidenceComponent();
170    ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyElement(src, tgt);
171    if (src.hasConcept())
172      tgt.addCode(CodeableConcept30_50.convertCodeableConcept(src.getConcept()));
173    if (src.hasReference())
174      tgt.addDetail(Reference30_50.convertReference(src.getReference()));
175    return tgt;
176  }
177
178  public static org.hl7.fhir.dstu3.model.Condition.ConditionStageComponent convertConditionStageComponent(org.hl7.fhir.r5.model.Condition.ConditionStageComponent src) throws FHIRException {
179    if (src == null)
180      return null;
181    org.hl7.fhir.dstu3.model.Condition.ConditionStageComponent tgt = new org.hl7.fhir.dstu3.model.Condition.ConditionStageComponent();
182    ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyBackboneElement(src,tgt);
183    if (src.hasSummary())
184      tgt.setSummary(CodeableConcept30_50.convertCodeableConcept(src.getSummary()));
185    for (org.hl7.fhir.r5.model.Reference t : src.getAssessment()) tgt.addAssessment(Reference30_50.convertReference(t));
186    return tgt;
187  }
188
189  public static org.hl7.fhir.r5.model.Condition.ConditionStageComponent convertConditionStageComponent(org.hl7.fhir.dstu3.model.Condition.ConditionStageComponent src) throws FHIRException {
190    if (src == null)
191      return null;
192    org.hl7.fhir.r5.model.Condition.ConditionStageComponent tgt = new org.hl7.fhir.r5.model.Condition.ConditionStageComponent();
193    ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyBackboneElement(src,tgt);
194    if (src.hasSummary())
195      tgt.setSummary(CodeableConcept30_50.convertCodeableConcept(src.getSummary()));
196    for (org.hl7.fhir.dstu3.model.Reference t : src.getAssessment())
197      tgt.addAssessment(Reference30_50.convertReference(t));
198    return tgt;
199  }
200
201  static public org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus convertConditionVerificationStatus(org.hl7.fhir.r5.model.CodeableConcept src) throws FHIRException {
202    if (src == null)
203      return null;
204    if (src.hasCoding(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL, "provisional") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_VER_CLINICAL_URL, "provisional"))
205      return org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus.PROVISIONAL;
206    if (src.hasCoding(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL, "differential") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_VER_CLINICAL_URL, "differential"))
207      return org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus.DIFFERENTIAL;
208    if (src.hasCoding(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL, "confirmed") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_VER_CLINICAL_URL, "confirmed"))
209      return org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus.CONFIRMED;
210    if (src.hasCoding(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL, "refuted") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_VER_CLINICAL_URL, "refuted"))
211      return org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus.REFUTED;
212    if (src.hasCoding(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL, "entered-in-error") || src.hasCoding(CODE_SYSTEM_LEGACY_CONDITION_VER_CLINICAL_URL, "entered-in-error"))
213      return org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus.ENTEREDINERROR;
214    return org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus.NULL;
215  }
216
217  static public org.hl7.fhir.r5.model.CodeableConcept convertConditionVerificationStatus(org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus src) throws FHIRException {
218    if (src == null)
219      return null;
220    org.hl7.fhir.r5.model.CodeableConcept cc = new org.hl7.fhir.r5.model.CodeableConcept();
221    switch (src) {
222      case PROVISIONAL:
223        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL).setCode("provisional");
224        return cc;
225      case DIFFERENTIAL:
226        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL).setCode("differential");
227        return cc;
228      case CONFIRMED:
229        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL).setCode("confirmed");
230        return cc;
231      case REFUTED:
232        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL).setCode("refuted");
233        return cc;
234      case ENTEREDINERROR:
235        cc.addCoding().setSystem(CODE_SYSTEM_CONDITION_VER_CLINICAL_URL).setCode("entered-in-error");
236        return cc;
237      default:
238        return null;
239    }
240  }
241}