/******************************************************************************* * Copyright (c) 2007-2010, G. Weirich and Elexis * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * G. Weirich - initial implementation * *******************************************************************************/ package ch.elexis.tarmedprefs; import static ch.elexis.core.constants.XidConstants.DOMAIN_AHV; import static ch.elexis.core.constants.XidConstants.DOMAIN_EAN; import static ch.elexis.core.constants.XidConstants.DOMAIN_RECIPIENT_EAN; import ch.elexis.data.Fall; import ch.elexis.data.Kontakt; import ch.elexis.data.Person; import ch.elexis.data.TrustCenters; import ch.elexis.data.Xid; import ch.rgw.tools.StringTool; public class TarmedRequirements { public static final String INSURANCE = Messages .getString("TarmedRequirements.KostentraegerName"); //$NON-NLS-1$ public static final String INSURANCE_NUMBER = Messages .getString("TarmedRequirements.InsuranceNumberName"); //$NON-NLS-1$ public static final String CASE_NUMBER = Messages .getString("TarmedRequirements.CaseNumberName"); //$NON-NLS-1$ public static final String INTERMEDIATE = Messages .getString("TarmedRequirements.IntermediateName"); //$NON-NLS-1$ public static final String ACCIDENT_NUMBER = Messages .getString("TarmedRequirements.AccidentNumberName"); //$NON-NLS-1$ public final static String SSN = Messages.getString("TarmedRequirements.SSNName"); //$NON-NLS-1$ public static final String EAN_PSEUDO = "2000000000000"; //$NON-NLS-1$ public static final String EAN_PROVIDER = "ean_provider"; //$NON-NLS-1$ public static final String EAN_RESPONSIBLE = "ean_responsible"; //$NON-NLS-1$ public static final String EAN_PATTERN = "[0-9]{13}"; public static final String ACCIDENT_DATE = Messages .getString("TarmedRequirements.AccidentDate"); //$NON-NLS-1$ public static final String CASE_LAW = Messages.getString("TarmedRequirements.Law"); //$NON-NLS-1$ public static final String BILLINGSYSTEM_NAME = "TarmedLeistung"; public static final String OUTPUTTER_NAME = "Tarmed-Drucker"; public static final String DOMAIN_KSK = "www.xid.ch/id/ksk"; //$NON-NLS-1$ public static final String DOMAIN_NIF = "www.xid.ch/id/nif"; //$NON-NLS-1$ public static final String DOMAIN_SUVA = "www.xid.ch/id/suva"; // $NON-NLS-1$ public static final String RESPONSIBLE_INFO_KEY = "ch.elexis.tarmedprefs.responsible"; static { Xid.localRegisterXIDDomainIfNotExists(DOMAIN_KSK, Messages.getString("TarmedRequirements.kskName"), Xid.ASSIGNMENT_REGIONAL); //$NON-NLS-1$ Xid.localRegisterXIDDomainIfNotExists(DOMAIN_NIF, Messages.getString("TarmedRequirements.NifName"), Xid.ASSIGNMENT_REGIONAL); //$NON-NLS-1$ Xid.localRegisterXIDDomainIfNotExists(DOMAIN_RECIPIENT_EAN, "rEAN", Xid.ASSIGNMENT_REGIONAL); //$NON-NLS-1$ Xid.localRegisterXIDDomainIfNotExists(DOMAIN_SUVA, "Suva-Nr", Xid.ASSIGNMENT_REGIONAL); } public static String getEAN(final Kontakt k){ if (k == null) { return null; } String ret = k.getXid(DOMAIN_EAN); // compatibility layer if (ret.length() == 0) { ret = k.getInfoString("EAN"); //$NON-NLS-1$ if (ret.length() > 0) { setEAN(k, ret); } } // end if (ret.length() == 0) { ret = EAN_PSEUDO; } return ret.trim(); } public static String getRecipientEAN(final Kontakt k){ String ret = k.getXid(DOMAIN_RECIPIENT_EAN); if (ret.length() == 0) { ret = "unknown"; //$NON-NLS-1$ } return ret.trim(); } public static String getSuvaNr(final Kontakt k){ String ret = k.getXid(DOMAIN_SUVA); return ret; } /** * Get EAN of the Intermediate where the bill shpould be sent. This must be a Fall-requirement * as defined in INTERMEDIATE and must contain the EAN * * @param fall * @return the intermediate EAN as defined or the empty String (never null) */ public static String getIntermediateEAN(final Fall fall){ return fall.getRequiredString(INTERMEDIATE).trim(); } /** * get ean_provider from Fall * * @param fall * @return the EAN or "unknown" if no valid ean was provided */ public static String getProviderEAN(final Fall fall){ String ean = fall.getRequiredString(EAN_PROVIDER).trim(); if (!ean.matches("(20[0-9]{11}|76[0-9]{11}|unknown|[A-Z][0-9]{6})")) { //$NON-NLS-1$ return "unknown"; //$NON-NLS-1$ } return ean; } /** * get ean_responsible from Fall * * @param fall * @return the EAN or "unknown" if no valid ean was provided */ public static String getResponsibleEAN(final Fall fall){ String ean = fall.getRequiredString(EAN_RESPONSIBLE).trim(); if (!ean.matches("(20[0-9]{11}|76[0-9]{11}|unknown|[A-Z][0-9]{6})")) { //$NON-NLS-1$ return "unknown"; //$NON-NLS-1$ } return ean; } /** * wandelt KSK's von der G123456-Schreibweise in die G 1234.56 Schreibweise um und umgekehrt * * @param KSK * die KSK, welche aus exakt einem Buchstaben, exakt 6 Ziffern und optional exakt * einem Leerzeichen nach dem Buchstaben und einem Punkt vor den letzten beiden * Ziffern besteht. * @return bei bCompact true eine KSK wie G123456, sonst eine wie G 1234.56 */ public static String normalizeKSK(String KSK, boolean bCompact){ if (!KSK.matches("[a-zA-Z] ?[0-9]{4,4}\\.?[0-9]{2,2}")) { //$NON-NLS-1$ return "invalid"; //$NON-NLS-1$ } KSK = KSK.replaceAll("[^a-zA-Z0-9]", ""); //$NON-NLS-1$ //$NON-NLS-2$ if (bCompact) { return KSK; } KSK = KSK.substring(0, 1) + " " + KSK.substring(1, 5) + "." + KSK.substring(5); //$NON-NLS-1$ //$NON-NLS-2$ return KSK.trim(); } public static String getKSK(final Kontakt k){ String ret = k.getXid(DOMAIN_KSK); // compatibility layer if (ret.length() == 0) { ret = k.getInfoString("KSK"); //$NON-NLS-1$ if (ret.length() > 0) { setKSK(k, ret); } } // end return ret.replaceAll("[\\s\\.\\-]", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$ } public static String getNIF(final Kontakt k){ String ret = k.getXid(DOMAIN_NIF); // compatibility layer if (ret.length() == 0) { ret = k.getInfoString("NIF"); //$NON-NLS-1$ if (ret.length() > 0) { setNIF(k, ret); } } // end return ret.trim(); } public static boolean setEAN(final Kontakt k, final String ean){ if (!ean.matches("[0-9]{13,13}")) { //$NON-NLS-1$ return false; } k.addXid(DOMAIN_EAN, ean, true); return true; } public static void setKSK(final Kontakt k, final String ksk){ k.addXid(DOMAIN_KSK, ksk, true); } public static void setNIF(final Kontakt k, final String nif){ k.addXid(DOMAIN_NIF, nif, true); } public static void setSuvaNr(final Kontakt k, final String SuvaNr){ k.addXid(DOMAIN_SUVA, SuvaNr, true); } public static String getAHV(final Person p){ String ahv = p.getXid(DOMAIN_AHV); if (ahv.length() == 0) { ahv = p.getInfoString(SSN); if (ahv.length() == 0) { ahv = p.getInfoString(INSURANCE_NUMBER); } if (ahv.length() > 0) { setAHV(p, ahv); } } return ahv.trim(); } public static void setAHV(final Person p, final String ahv){ p.addXid(DOMAIN_AHV, ahv, true); } public static String getGesetz(final Fall fall){ String billingSystem = fall.getAbrechnungsSystem(); if (StringTool.isNothing(billingSystem)) { billingSystem = Fall.getAbrechnungsSysteme()[0]; } String gesetz = fall.getRequiredString("Gesetz"); //$NON-NLS-1$ if (gesetz.length() == 0) { gesetz = Fall.getBillingSystemConstant(billingSystem, CASE_LAW); } if (gesetz.length() == 0) { // compatibility. To be removed gesetz = Fall.getBillingSystemAttribute(billingSystem, "gesetz"); //$NON-NLS-1$ } if (gesetz.length() == 0) { if (billingSystem.matches("KVG|UVG|MV|VVG")) { //$NON-NLS-1$ gesetz = billingSystem; } else if (billingSystem.equalsIgnoreCase("iv")) { //$NON-NLS-1$ gesetz = "ivg"; } } if (StringTool.isNothing(gesetz)) { gesetz = "KVG"; } return gesetz; } public static String getTCName(Kontakt mandant){ String tc = mandant.getInfoString(PreferenceConstants.TARMEDTC); return tc; } public static String getTCCode(Kontakt mandant){ String tcname = getTCName(mandant); Integer nr = TrustCenters.tc.get(tcname); if (nr == null) { return "00"; //$NON-NLS-1$ } return Integer.toString(nr); } public static void setTC(Kontakt mandant, String tc){ mandant.setInfoElement(PreferenceConstants.TARMEDTC, tc); } public static boolean hasTCContract(Kontakt mandant){ String hc = (String) mandant.getInfoElement(PreferenceConstants.USETC); return "1".equals(hc); //$NON-NLS-1$ } }