package ch.elexis.TarmedRechnung;
import org.jdom.Element;
import ch.elexis.data.Fall;
import ch.elexis.data.Kontakt;
import ch.elexis.data.Mandant;
import ch.elexis.data.Patient;
import ch.elexis.data.Rechnung;
import ch.elexis.tarmedprefs.TarmedRequirements;
import ch.rgw.tools.StringTool;
import ch.rgw.tools.XMLTool;
public class XMLExporterProcessing {
private static final String ELEMENT_PROCESSING = "processing"; //$NON-NLS-1$
private static final String ATTR_INTERMEDIAT_PRINT = "print_at_intermediate"; //$NON-NLS-1$
private static final String ATTR_PATIENT_COPY_PRINT = "print_patient_copy"; //$NON-NLS-1$
private static final String ELEMENT_TRANSPORT = "transport"; //$NON-NLS-1$
private static final String ELEMENT_TRANSPORT_VIA = "via"; //$NON-NLS-1$
private static final String ATTR_TRANSPORT_FROM = "from"; //$NON-NLS-1$
private static final String ATTR_TRANSPORT_TO = "to"; //$NON-NLS-1$
private static final String ATTR_TRANSPORT_VIA_VIA = "via"; //$NON-NLS-1$
private static final String ATTR_TRANSPORT_VIA_SEQ = "sequence_id"; //$NON-NLS-1$
private Element processingElement;
private XMLExporterProcessing(Element processing){
this.processingElement = processing;
}
public Element getElement(){
return processingElement;
}
public static XMLExporterProcessing buildProcessing(Rechnung rechnung, XMLExporter xmlExporter){
Fall actFall = rechnung.getFall();
Patient actPatient = actFall.getPatient();
Mandant actMandant = rechnung.getMandant();
Kontakt kostentraeger = actFall.getRequiredContact(TarmedRequirements.INSURANCE);
if (kostentraeger == null) {
kostentraeger = actPatient;
}
String kEAN = TarmedRequirements.getEAN(kostentraeger); // (String)kostentraeger.
String rEAN = TarmedRequirements.getRecipientEAN(kostentraeger);
if (rEAN.equals("unknown")) { //$NON-NLS-1$
rEAN = kEAN;
}
String iEAN = xmlExporter.getIntermediateEAN(actFall);
if (StringTool.isNothing(iEAN)) {
// make validator happy
if (!rEAN.matches("(20[0-9]{11}|76[0-9]{11})")) { //$NON-NLS-1$
if (kEAN.matches("(20[0-9]{11}|76[0-9]{11})")) { //$NON-NLS-1$
iEAN = kEAN;
} else {
iEAN = TarmedRequirements.EAN_PSEUDO;
}
} else {
iEAN = rEAN;
}
}
Element element = null;
element = new Element(ELEMENT_PROCESSING, XMLExporter.nsinvoice);
element.setAttribute(ATTR_INTERMEDIAT_PRINT, "1");
if (actFall.getCopyForPatient()) {
element.setAttribute(ATTR_PATIENT_COPY_PRINT, "1");
}
Element transport = new Element(ELEMENT_TRANSPORT, XMLExporter.nsinvoice);
transport.setAttribute(ATTR_TRANSPORT_FROM, xmlExporter.getSenderEAN(actMandant));
transport.setAttribute(ATTR_TRANSPORT_TO, rEAN);
Element via = new Element(ELEMENT_TRANSPORT_VIA, XMLExporter.nsinvoice);
via.setAttribute(ATTR_TRANSPORT_VIA_VIA, iEAN);
via.setAttribute(ATTR_TRANSPORT_VIA_SEQ, "1");
transport.addContent(via);
element.addContent(transport);
// insert demand if TG and TC contract
String tiers = XMLExporterTiers.getTiers(actFall.getGarant(), kostentraeger, actFall);
if (tiers.equals(XMLExporter.TIERS_GARANT)
&& (TarmedRequirements.hasTCContract(actMandant))) {
String tcCode = TarmedRequirements.getTCCode(actMandant);
Element demand = new Element("demand", XMLExporter.nsinvoice); //$NON-NLS-1$
demand.setAttribute("tc_demand_id", "0"); //$NON-NLS-1$ //$NON-NLS-2$
demand
.setAttribute(
"tc_token", xmlExporter.getBesr().createCodeline(XMLTool.moneyToXmlDouble(xmlExporter.getDueMoney()) //$NON-NLS-1$
.replaceFirst("[.,]", ""), tcCode)); //$NON-NLS-1$ //$NON-NLS-2$
demand.setAttribute(
"insurance_demand_date", XMLExporterUtil.makeTarmedDatum(rechnung.getDatumRn())); //$NON-NLS-1$
element.addContent(demand);
}
XMLExporterProcessing ret = new XMLExporterProcessing(element);
return ret;
}
}