package at.medevit.elexis.tarmed.model.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.math.BigInteger; import java.util.GregorianCalendar; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.junit.BeforeClass; import org.junit.Test; import at.medevit.elexis.tarmed.model.TarmedJaxbUtil; import ch.fd.invoice440.request.BalanceType; import ch.fd.invoice440.request.BillerAddressType; import ch.fd.invoice440.request.BodyType; import ch.fd.invoice440.request.CompanyType; import ch.fd.invoice440.request.DependsOnType; import ch.fd.invoice440.request.DiagnosisType; import ch.fd.invoice440.request.Esr9Type; import ch.fd.invoice440.request.EsrAddressType; import ch.fd.invoice440.request.GuarantorAddressType; import ch.fd.invoice440.request.InsuranceAddressType; import ch.fd.invoice440.request.InvoiceType; import ch.fd.invoice440.request.KvgLawType; import ch.fd.invoice440.request.PatientAddressType; import ch.fd.invoice440.request.PayantType; import ch.fd.invoice440.request.PayloadType; import ch.fd.invoice440.request.PersonType; import ch.fd.invoice440.request.PostalAddressType; import ch.fd.invoice440.request.ProcessingType; import ch.fd.invoice440.request.PrologType; import ch.fd.invoice440.request.ProviderAddressType; import ch.fd.invoice440.request.RecordDrugType; import ch.fd.invoice440.request.RequestType; import ch.fd.invoice440.request.ServicesType; import ch.fd.invoice440.request.SoftwareType; import ch.fd.invoice440.request.TelecomAddressType; import ch.fd.invoice440.request.TransportType; import ch.fd.invoice440.request.TransportType.Via; import ch.fd.invoice440.request.TreatmentType; import ch.fd.invoice440.request.VatRateType; import ch.fd.invoice440.request.VatType; import ch.fd.invoice440.request.ZipType; public class InvoiceRequest440Tests { private static File writeReq440; private static File readReq440; @BeforeClass public static void setUpBeforeClass() throws Exception{ writeReq440 = new File("rsc/writeReq440.xml"); if (!writeReq440.exists()) { writeReq440.createNewFile(); } readReq440 = new File("rsc/readReq440.xml"); } @Test public void testMarshallInvoiceRequest440() throws InstantiationException, IllegalAccessException, FileNotFoundException, DatatypeConfigurationException{ TarmedJaxbUtil.marshallInvoiceRequest(generateRequestSample(), new FileOutputStream( writeReq440)); assertTrue(writeReq440.exists()); } @Test public void testUnmarshalInvoiceRequest440() throws FileNotFoundException, InstantiationException, IllegalAccessException, DatatypeConfigurationException{ RequestType requestType = TarmedJaxbUtil.unmarshalInvoiceRequest440(new FileInputStream(readReq440)); assertNotNull(requestType); assertEquals("en", requestType.getLanguage()); assertEquals("UnitTest", requestType.getModus()); assertNotNull(requestType.getProcessing()); assertNotNull(requestType.getProcessing().getTransport()); assertEquals("2099988872462", requestType.getProcessing().getTransport().getFrom()); assertEquals("7601001302181", requestType.getProcessing().getTransport().getTo()); assertEquals(1, requestType.getProcessing().getTransport().getVia().size()); assertNotNull(requestType.getPayload()); assertNotNull(requestType.getPayload().getInvoice()); BodyType body = requestType.getPayload().getBody(); assertNotNull(body); assertNotNull(body.getEsr9()); assertNotNull(body.getTiersPayant()); assertEquals("6564564", body.getKvg().getInsuredId()); assertEquals(1, body.getServices().getRecordTarmedOrRecordDrgOrRecordLab().size()); } @Test public void testDomUnmarshalInvoiceRequest440() throws JDOMException, IOException{ SAXBuilder builder = new SAXBuilder(); Document jdomDoc = builder.build(readReq440); RequestType requestType = TarmedJaxbUtil.unmarshalInvoiceRequest440(jdomDoc); assertNotNull(requestType); assertEquals("en", requestType.getLanguage()); assertEquals("UnitTest", requestType.getModus()); assertNotNull(requestType.getProcessing()); assertNotNull(requestType.getProcessing().getTransport()); assertEquals("2099988872462", requestType.getProcessing().getTransport().getFrom()); assertEquals("7601001302181", requestType.getProcessing().getTransport().getTo()); assertEquals(1, requestType.getProcessing().getTransport().getVia().size()); assertNotNull(requestType.getPayload()); assertNotNull(requestType.getPayload().getInvoice()); BodyType body = requestType.getPayload().getBody(); assertNotNull(body); assertNotNull(body.getEsr9()); assertNotNull(body.getTiersPayant()); assertEquals("6564564", body.getKvg().getInsuredId()); assertEquals(1, body.getServices().getRecordTarmedOrRecordDrgOrRecordLab().size()); } @Test public void testGetXMLVersion() throws JDOMException, IOException{ SAXBuilder builder = new SAXBuilder(); Document jdomDoc = builder.build(readReq440); String version = TarmedJaxbUtil.getXMLVersion(jdomDoc); assertEquals("4.4", version); } private RequestType generateRequestSample() throws InstantiationException, IllegalAccessException, DatatypeConfigurationException{ RequestType request = new RequestType(); request.setModus("UnitTest"); request.setLanguage("en"); request.setProcessing(getProcessingSample()); request.setPayload(getPayloadSample()); return request; } private ProcessingType getProcessingSample(){ ProcessingType processing = new ProcessingType(); processing.setPrintAtIntermediate(false); processing.setPrintPatientCopy(true); // transport from - to TransportType transport = new TransportType(); transport.setFrom("2099988872462"); transport.setTo("7601001302181"); // transport via Via via = new Via(); via.setSequenceId(1); via.setVia("7601001304307"); transport.getVia().add(via); // add transport to processing processing.setTransport(transport); return processing; } private PayloadType getPayloadSample() throws InstantiationException, IllegalAccessException, DatatypeConfigurationException{ GregorianCalendar c = new GregorianCalendar(); c.set(2015, 01, 21, 13, 30); XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(c); PayloadType payload = new PayloadType(); payload.setType("invoice"); payload.setCopy(false); payload.setStorno(false); // set invoice InvoiceType invoice = new InvoiceType(); invoice.setRequestTimestamp(new BigInteger("1421827519")); invoice.setRequestId("001163000552"); payload.setInvoice(invoice); // body BodyType body = new BodyType(); //prolog PrologType prolog = new PrologType(); //package SoftwareType swPackage = new SoftwareType(); swPackage.setVersion(300l); swPackage.setName("Elexis Unit Test"); prolog.setPackage(swPackage); //generator SoftwareType generator = new SoftwareType(); generator.setVersion(100l); generator.setName("JDOM"); DependsOnType dependsOn = new DependsOnType(); dependsOn.setName("Elexis Tarmed"); dependsOn.setVersion(300l); generator.getDependsOn().add(dependsOn); prolog.setGenerator(generator); body.setProlog(prolog); //balance BalanceType balance = new BalanceType(); balance.setCurrency("CHF"); balance.setAmount(30.35); balance.setAmountDue(30.35); balance.setAmountObligations(30.35); //vat VatType vat = new VatType(); vat.setVat(0.0); VatRateType vatRate = new VatRateType(); vatRate.setAmount(30.35); vatRate.setVatRate(0.0); vatRate.setVat(0.0); vat.getVatRate().add(vatRate); balance.setVat(vat); body.setBalance(balance); //esr 9 Esr9Type esr9 = new Esr9Type(); esr9.setParticipantNumber("01-200020-9"); esr9.setType("16or27"); esr9.setReferenceNumber("81 17000 00000 00001 16300 05527"); esr9.setCodingLine("0100000030359>811700000000000011630005527+ 012000209>"); // add bank part EsrAddressType bank = new EsrAddressType(); CompanyType company = new CompanyType(); company.setCompanyname("Medevit"); // address PostalAddressType postal = new PostalAddressType(); ZipType zip = new ZipType(); zip.setValue("6840"); postal.setZip(zip); postal.setCity("Götzis"); postal.setStreet("St. Ulrich Straße 40"); company.setPostal(postal); //phone TelecomAddressType tele = new TelecomAddressType(); tele.getPhone().add("+4369919270505"); company.setTelecom(tele); bank.setCompany(company); esr9.setBank(bank); body.setEsr9(esr9); //Tiers Payant PayantType payant = new PayantType(); //biller BillerAddressType biller = new BillerAddressType(); CompanyType medevit = new CompanyType(); medevit.setCompanyname("Medevit"); // address & phone PostalAddressType adr = new PostalAddressType(); ZipType plz = new ZipType(); plz.setValue("6840"); adr.setZip(plz); adr.setCity("Götzis"); adr.setStreet("St. Ulrich Straße 40"); medevit.setPostal(adr); TelecomAddressType phone = new TelecomAddressType(); phone.getPhone().add("+4369919270505"); medevit.setTelecom(phone); biller.setCompany(medevit); biller.setSpecialty("Software Development"); payant.setBiller(biller); // provider ProviderAddressType provider = new ProviderAddressType(); provider.setCompany(medevit); payant.setProvider(provider); // insurance InsuranceAddressType insurance = new InsuranceAddressType(); CompanyType person = new CompanyType(); person.setCompanyname("Armeswesen"); PostalAddressType postAdr = new PostalAddressType(); postAdr.setStreet("Apfelgasse 2"); postAdr.setCity("Lenzburg"); TelecomAddressType mobil = new TelecomAddressType(); mobil.getPhone().add("555-7195217"); person.setPostal(postAdr); person.setTelecom(mobil); insurance.setCompany(person); payant.setInsurance(insurance); // patient PatientAddressType patAddress = new PatientAddressType(); patAddress.setGender("female"); PersonType pat = new PersonType(); pat.setTitle("Dr."); pat.setFamilyname("Armeswesen"); pat.setGivenname("Edeltraud"); pat.setPostal(postAdr); pat.setTelecom(mobil); patAddress.setPerson(pat); payant.setPatient(patAddress); //guarantor GuarantorAddressType guarantor = new GuarantorAddressType(); guarantor.setPerson(pat); payant.setGuarantor(guarantor); body.setTiersPayant(payant); // KVG KvgLawType kvg = new KvgLawType(); kvg.setInsuredId("6564564"); kvg.setCaseDate(cal); body.setKvg(kvg); // treatment and diagnosis TreatmentType treatment = new TreatmentType(); treatment.setReason("disease"); treatment.setCanton("AG"); treatment.setDateBegin(cal); treatment.setDateEnd(cal); DiagnosisType diagnosis = new DiagnosisType(); diagnosis.setType("ICD"); diagnosis.setCode("H00.0"); treatment.getDiagnosis().add(diagnosis); body.setTreatment(treatment); // services ServicesType services = new ServicesType(); RecordDrugType recDrug = new RecordDrugType(); recDrug.setUnit(17.50); recDrug.setUnitFactor(1.00); recDrug.setTariffType("400"); recDrug.setCode("4768637"); recDrug.setAmount(17.50); recDrug.setVatRate(0.0); recDrug.setObligation(false); recDrug.setValidate(true); recDrug.setProviderId("7601002145411"); recDrug.setResponsibleId("7601002145411"); recDrug.setRecordId(4); recDrug.setQuantity(1.0); recDrug.setDateBegin(cal); recDrug.setName("MUCEDOKEHL Tropfen D 5 AR 11649 10 ml ()"); services.getRecordTarmedOrRecordDrgOrRecordLab().add(recDrug); body.setServices(services); payload.setBody(body); return payload; } }