@Override
  public CdaCh getPatientDocument(Patient patient) {
    CdaChImpl ret = new CdaChImpl(CHFactory.eINSTANCE.createCDACH().init());

    ret.cSetPatient(EhcCoreMapper.getEhcPatient(patient));
    return ret;
  }
  @Override
  public CdaCh getPrescriptionDocument(Rezept rezept) {
    CDACH clinicalDocument = CHFactory.eINSTANCE.createCDACH().init();
    CdaChImpl ret = new CdaChImpl(clinicalDocument);

    ret.cSetPatient(EhcCoreMapper.getEhcPatient(rezept.getPatient()));

    // TODO OID muss richtig sein
    // create medication section
    MedicationsSection medicationsSection = IHEFactory.eINSTANCE.createMedicationsSection();
    medicationsSection.setTitle(DatatypesFactory.eINSTANCE.createST("Aktuelle Medikation"));
    StrucDocText sdText = CDAFactory.eINSTANCE.createStrucDocText();
    sdText.addText("Lisinopril HCT Streuli Tbl. 10/12.5 mg: 1-0-0");
    medicationsSection.setText(sdText);
    medicationsSection.setCode(
        DatatypesFactory.eINSTANCE.createCE(
            "10160-0", "2.16.840.1.113883.6.1", "LOINC", "HISTORY OF MEDICATION USE"));
    medicationsSection.setId(DatatypesFactory.eINSTANCE.createII("2.16.756.5.30.1.105.1.6"));

    // define substance administration
    SubstanceAdministration substanceAdministration =
        CDAFactory.eINSTANCE.createSubstanceAdministration();
    substanceAdministration
        .getTemplateIds()
        .add(DatatypesFactory.eINSTANCE.createII("2.16.756.5.30.1.1.1.1.1"));
    substanceAdministration
        .getIds()
        .add(DatatypesFactory.eINSTANCE.createII("2.16.756.5.30.2.6.1"));
    // code, system, systemname, displayname
    substanceAdministration.setCode(
        DatatypesFactory.eINSTANCE.createCD(
            "DRUG", "2.16.840.1.113883.5.4", "", "Medikamentöse Therapie"));
    substanceAdministration.setStatusCode(DatatypesFactory.eINSTANCE.createCS("completed"));
    substanceAdministration
        .getEffectiveTimes()
        .add(DatatypesFactory.eINSTANCE.createIVL_TS("20140807"));
    substanceAdministration.setPriorityCode(
        DatatypesFactory.eINSTANCE.createCE(
            "R", "2.16.840.1.113883.5.7", "ActPriority", "Routine"));
    substanceAdministration.setRouteCode(
        DatatypesFactory.eINSTANCE.createCE(
            "PO", "2.16.840.1.113883.5.112", "RouteOfAdministration", "schlucken, oral"));

    // set quantities
    IVL_PQ ivlQuantity = DatatypesFactory.eINSTANCE.createIVL_PQ();
    ivlQuantity.setCenter(DatatypesFactory.eINSTANCE.createPQ(1, "1"));
    substanceAdministration.setDoseQuantity(ivlQuantity);

    IVL_PQ ivlRateQuantity = DatatypesFactory.eINSTANCE.createIVL_PQ();
    ivlRateQuantity.setNullFlavor(NullFlavor.UNK);
    substanceAdministration.setRateQuantity(ivlQuantity);

    // set consumable medication
    Consumable consumable = CDAFactory.eINSTANCE.createConsumable();
    ManufacturedProduct manufacturedProduct = CDAFactory.eINSTANCE.createManufacturedProduct();
    Material material = CDAFactory.eINSTANCE.createMaterial();
    CE materialCode =
        DatatypesFactory.eINSTANCE.createCE("C09BA03SETN000000010TABL", "2.16.756.5.30.2.6.2");

    // set original text UNK

    materialCode
        .getTranslations()
        .add(DatatypesFactory.eINSTANCE.createCD("C09BA03", "2.16.840.1.113883.6.73", "", ""));
    material.setCode(
        DatatypesFactory.eINSTANCE.createCE("C09BA03SETN000000010TABL", "2.16.756.5.30.2.6.2"));
    EN name = DatatypesFactory.eINSTANCE.createEN();
    name.addText("LISINOPRIL HCT Streuli Tabl 10/12.5 30 Stk");
    material.setName(name);
    manufacturedProduct.setManufacturedMaterial(material);
    consumable.setManufacturedProduct(manufacturedProduct);

    substanceAdministration.setConsumable(consumable);
    medicationsSection.addSubstanceAdministration(substanceAdministration);

    clinicalDocument.addSection(medicationsSection);

    return ret;
  }