package ch.elexis.TarmedRechnung; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.jdom.Element; import ch.elexis.core.data.interfaces.IDiagnose; import ch.elexis.core.model.FallConstants; import ch.elexis.data.Fall; import ch.elexis.data.Konsultation; import ch.elexis.data.Mandant; import ch.elexis.data.Rechnung; import ch.rgw.tools.TimeTool; public class XMLExporterTreatment { private static final String BY_CONTRACT = "by_contract"; //$NON-NLS-1$ private static final String ICPC = "ICPC"; //$NON-NLS-1$ private static final String ATTR_TYPE = "type"; //$NON-NLS-1$ private Element insuranceElement; private List<IDiagnose> diagnoses; private XMLExporterTreatment(Element insuranceElement){ this.insuranceElement = insuranceElement; } public Element getElement(){ return insuranceElement; } public static XMLExporterTreatment buildTreatment(Rechnung rechnung, XMLExporter xmlExporter){ Fall actFall = rechnung.getFall(); Mandant actMandant = rechnung.getMandant(); Element element = new Element("treatment", XMLExporter.nsinvoice); element.setAttribute( "date_begin", //$NON-NLS-1$ XMLExporterUtil.makeTarmedDatum(XMLExporterUtil.getFirstKonsDate(rechnung).toString( TimeTool.DATE_GER))); element.setAttribute( "date_end", //$NON-NLS-1$ XMLExporterUtil.makeTarmedDatum(XMLExporterUtil.getLastKonsDate(rechnung).toString( TimeTool.DATE_GER))); element.setAttribute("canton", actMandant.getInfoString(XMLExporter.ta.KANTON)); //$NON-NLS-1$ element.setAttribute("reason", match_type(actFall.getGrund())); //$NON-NLS-1$ List<IDiagnose> diagnosen = getDiagnosen(rechnung); //diagnosis for (IDiagnose diagnose : diagnosen) { Element diagnosis = new Element("diagnosis", XMLExporter.nsinvoice); //$NON-NLS-1$ String diagnosisType = match_diag(diagnose.getCodeSystemName()); diagnosis.setAttribute(ATTR_TYPE, diagnosisType); // 15510 String code = diagnose.getCode(); if (diagnosisType.equalsIgnoreCase(XMLExporter.FREETEXT)) { diagnosis.setText(diagnose.getText()); } else { if (code.length() > 12) { code = code.substring(0, 12); } diagnosis.setAttribute(XMLExporter.ATTR_CODE, code); } element.addContent(diagnosis); } XMLExporterTreatment ret = new XMLExporterTreatment(element); ret.diagnoses = diagnosen; return ret; } private static List<IDiagnose> getDiagnosen(Rechnung rechnung){ ArrayList<IDiagnose> ret = new ArrayList<IDiagnose>(); List<Konsultation> lb = rechnung.getKonsultationen(); for (Konsultation b : lb) { List<IDiagnose> ld = b.getDiagnosen(); for (IDiagnose dg : ld) { String dgc = dg.getCode(); if (dgc != null) { ret.add(dg); } } } return ret; } private static String match_type(final String type){ if (type == null) { return XMLExporter.DISEASE; } if (type.equalsIgnoreCase(FallConstants.TYPE_DISEASE)) { return XMLExporter.DISEASE; } if (type.equalsIgnoreCase(FallConstants.TYPE_ACCIDENT)) { return "accident"; //$NON-NLS-1$ } if (type.equalsIgnoreCase(FallConstants.TYPE_MATERNITY)) { return "maternity"; //$NON-NLS-1$ } if (type.equalsIgnoreCase(FallConstants.TYPE_PREVENTION)) { return "prevention"; //$NON-NLS-1$ } if (type.equalsIgnoreCase(FallConstants.TYPE_BIRTHDEFECT)) { return XMLExporter.BIRTHDEFECT; } return XMLExporter.DISEASE; } private static String match_diag(final String name){ if (name.equalsIgnoreCase(XMLExporter.FREETEXT)) { return XMLExporter.FREETEXT; } if (name.equalsIgnoreCase("ICD-10")) { //$NON-NLS-1$ return "ICD"; //$NON-NLS-1$ } if (name.equalsIgnoreCase("by contract")) { //$NON-NLS-1$ return BY_CONTRACT; } if (name.equalsIgnoreCase(ICPC)) { return ICPC; } if (name.equalsIgnoreCase(XMLExporter.BIRTHDEFECT)) { return XMLExporter.BIRTHDEFECT; } return BY_CONTRACT; } public List<IDiagnose> getDiagnoses(){ if (diagnoses == null) { return Collections.emptyList(); } return diagnoses; } }