@Override
  public Patient resolvePatient(String firstname, String lastname, String birthDate) {
    // resolve with full data
    Patient pat =
        KontaktMatcher.findPatient(
            lastname, firstname, birthDate, "", "", "", "", "", CreateMode.FAIL);
    // try to resolve with only the beginning of the name
    if (pat == null) {
      String shortLastname = lastname;
      String shortFirstname = firstname;
      if (lastname.length() > 3) {
        shortLastname = lastname.substring(0, 3);
      }
      if (firstname.length() > 3) {
        shortFirstname = firstname.substring(0, 3);
      }
      pat =
          KontaktMatcher.findPatient(
              shortLastname, shortFirstname, birthDate, "", "", "", "", "", CreateMode.FAIL);
    }
    // user decides
    if (pat == null) {
      convertTool.set(birthDate);
      String birthStr = convertTool.toString(TimeTool.DATE_GER);
      pat =
          (Patient)
              KontaktSelektor.showInSync(
                  Patient.class,
                  Messages.HL7_SelectPatient,
                  Messages.HL7_WhoIs + lastname + " " + firstname + " ," + birthStr + "?");
    }

    return pat;
  }
예제 #2
0
  /** Der Konstruktor liest eine ESR-Zeile ein und konstruiert daraus den Datensatz. */
  public ESRRecord(final String file, final String codeline) {
    super.create(null);
    Mandant m;
    Rechnung rn = null;
    String mandantID;
    REJECT rejectCode;

    String[] vals = new String[11];
    vals[0] = new TimeTool().toString(TimeTool.DATE_COMPACT);
    vals[10] = file;

    rejectCode = REJECT.OK;

    // Code/Modus.
    MODE mode = MODE.Unbekannt;
    String smd = codeline.substring(0, 3);
    if (smd.equals("002")) { // $NON-NLS-1$
      mode = MODE.Gutschrift_edv;
    } else if (smd.equals("012")) { // $NON-NLS-1$
      mode = MODE.Gutschrift_Schalter;
    } else if (smd.equals("005")) { // $NON-NLS-1$
      mode = MODE.Storno_edv;
    } else if (smd.equals("015")) { // $NON-NLS-1$
      mode = MODE.Storno_Schalter;
    } else if (smd.equals("008")) { // $NON-NLS-1$
      mode = MODE.Korrektur_edv;
    } else if (smd.equals("018")) { // $NON-NLS-1$
      mode = MODE.Korrektur_Schalter;
    } else if (smd.equals("999")) { // $NON-NLS-1$
      mode = MODE.Summenrecord;
    }
    vals[5] = Integer.toString(mode.ordinal());

    // Daten parsen. Der ESR-Record liefert 6-stellige Daten, wir wollen 8-stellige
    String prefix = vals[0].substring(0, 2);
    // TODO Das funktioniert nur bis ins Jahr 2099 :-)
    TimeTool dat = new TimeTool(prefix + codeline.substring(59, 65));
    vals[1] = dat.toString(TimeTool.DATE_GER);
    dat.set(prefix + codeline.substring(65, 71));
    vals[2] = dat.toString(TimeTool.DATE_GER);
    dat.set(prefix + codeline.substring(71, 77));
    vals[3] = (dat.toString(TimeTool.DATE_GER));

    if (mode.equals(MODE.Summenrecord)) {
      // Betrag (führende Nullen entfernen)
      vals[4] =
          Integer.toString(Integer.parseInt(codeline.substring(39, 51).trim())); // Totalbetrag
      // 12-stellig
    } else {
      vals[4] =
          Integer.toString(Integer.parseInt(codeline.substring(39, 49).trim())); // Zeilenbetrag
      // 10-stellig
      String esrline = codeline.substring(12, 39);

      // Von der RechnungsNummer führende Nullen wegbringen
      int rnnr = Integer.parseInt(esrline.substring(POSITION_RN_NR, 26));
      Query<Rechnung> qbe_r = new Query<Rechnung>(Rechnung.class);
      String rnid =
          qbe_r.findSingle("RnNummer", "=", Integer.toString(rnnr)); // $NON-NLS-1$ //$NON-NLS-2$
      if (rnid == null) {
        rejectCode = REJECT.RN_NUMMER;
        vals[6] = ""; // $NON-NLS-1$
        mandantID = ""; // $NON-NLS-1$
      } else {
        vals[6] = rnid;
        rn = Rechnung.load(rnid);
        if (rn == null) {
          rejectCode = REJECT.RN_NUMMER;
          vals[6] = ""; // $NON-NLS-1$
          mandantID = ""; // $NON-NLS-1$
        } else {
          m = rn.getMandant();
          if (m == null) {
            rejectCode = REJECT.MANDANT;
            vals[6] = ""; // $NON-NLS-1$
            mandantID = ""; // $NON-NLS-1$
          } else {
            mandantID = m.getId();
          }
        }
      }
      String PatNr = esrline.substring(POSITION_PAT_NR, POSITION_RN_NR);
      long patnr = Long.parseLong(PatNr); // führende Nullen wegbringen
      String PatID =
          new Query<Patient>(Patient.class)
              .findSingle("PatientNr", "=", Long.toString(patnr)); // $NON-NLS-1$ //$NON-NLS-2$
      if (PatID == null) {
        if (rejectCode == REJECT.OK) {
          rejectCode = REJECT.PAT_NUMMER;
        }
        vals[7] = ""; // $NON-NLS-1$
      } else if ((rn != null) && (!rn.getFall().getPatient().getId().equals(PatID))) {
        if (rejectCode == REJECT.OK) {
          rejectCode = REJECT.PAT_FALSCH;
        }
        vals[7] = ""; // $NON-NLS-1$
      } else {

        vals[7] = PatID;
      }
      vals[8] = mandantID;
    }
    vals[9] = Integer.toString(rejectCode.ordinal());
    set(
        new String[] {
          "Datum",
          "Eingelesen",
          "Verarbeitet",
          "Gutgeschrieben", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
          "BetragInRp",
          CODE,
          RECHNUNGS_ID,
          PATIENT_ID,
          MANDANT_ID,
          FLD_REJECT_CODE,
          "File"
        },
        vals); //$NON-NLS-1$ //$NON-NLS-2$
  }
예제 #3
0
 public static Date getDate(String elexisDate) {
   timeTool.set(elexisDate);
   return timeTool.getTime();
 }