public void setLaufzeit(DataPointVector DPVector, int vorlaufzeit_jahre, int laufzeit) {
    Date Beginn = new Date();
    Date Ende = new Date();
    int laufzeit_jahre = RandomNumber(2, 25);
    Date Stichtag = Calendar.getInstance().getTime();

    DPVector.addDataPoint("AI_Stichtag_Datum", Stichtag);

    Beginn.setYear((2014 - vorlaufzeit_jahre) - 1900);
    Beginn.setMonth(RandomNumber(1, 12));
    Beginn.setDate(RandomNumber(1, 28));

    Ende.setYear(2014 + laufzeit_jahre - 1900);
    Ende.setMonth(RandomNumber(1, 12));
    Ende.setDate(RandomNumber(1, 28));

    // Ende Laufzeit
    //
    DPVector.addDataPoint("GF17_Vertragsbeginn_Datum", Beginn);
    DPVector.addDataPoint("GF18_Kapitalbeginn_Datum", Beginn);
    DPVector.addDataPoint("GF19_Kapitalende_Datum", Ende);

    DPVector.addDataPoint("GF52_Vertragsende_Datum", Ende);
    DPVector.addDataPoint(
        "GFA83_Ursprungslaufzeit_Code", BCAlgos.XEN_Laufzeitenberechnung(Beginn, Ende));
    DPVector.addDataPoint(
        "GFA84_Restlaufzeit_Code", BCAlgos.XEN_Laufzeitenberechnung(Stichtag, Ende));
  }
  public void KreditCubeV1BenchmarkSzenario(int n, HashSet Werte) {
    // n... Numer of Credits
    try {
      Connection conn = getConnection();
      Statement st = conn.createStatement();
      st = conn.createStatement();
      for (int i = 0; i < n; i++) {
        int Buchwert = RandomNumber(10000, 1000000);
        int NAR = RandomNumber(10000, 1000000);
        int UKR = RandomNumber(10000, 1000000);
        DataPointVector DPVector_Kredit = Kredit(Buchwert, NAR, UKR, null, null, null);
        st.executeUpdate(DPVector_Kredit.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      }

      st.close();
      conn.close();

    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
  public void BIZBenchmarkSzenario(HashSet Werte) {
    // SELECT Stichtag, Land, sum(Wert) AS ["Total Items"] FROM SmartCube GROUP BY Stichtag, Land;
    // String statemanet = "SELECT Stichtag, Land, sum(Wert) AS [XXX] FROM SmartCube GROUP BY
    // Stichtag, Land";
    try {
      Connection conn = getConnection();
      Statement st = conn.createStatement();
      st = conn.createStatement();

      //
      // Garantien
      //
      // W - Kreditfazilität für Kauf von Wertpapieren
      // A - Akzepte
      // Off-Balance Geschäfte
      // S-Unwiderrufliche Kreditsicherungsgarantien

      DataPointVector DPVector_OffBalance1 = OffBalanceGeschaeft(1000, 0, 0, "JP", "S");
      st.executeUpdate(DPVector_OffBalance1.getSQLInsertQuery(Werte, "Geschaeftsfall"));

      DataPointVector DPVector_OffBalance2 = OffBalanceGeschaeft(650, 0, 0, "JP", "A");
      st.executeUpdate(DPVector_OffBalance2.getSQLInsertQuery(Werte, "Geschaeftsfall"));

      //
      // Kredit1 besichert mit Gold
      //
      TreeMap<String, Object> Sicherheiten = new TreeMap();
      Sicherheiten.put("GE01_1", "S0600");
      Sicherheiten.put("GE02_1", "ONBALANCE"); // GE02_Forderungskategorie_Code
      Sicherheiten.put("AI_Zerlegungsansatz_Code_11", "INT");
      Sicherheiten.put("BEL_11", 700);
      Sicherheiten.put("ST03_11", "GO");
      Sicherheiten.put("ST_Land_11", "DE");

      DataPointVector DPVector_Kredit1 = Kredit(1000, 400, 200, "EUR", "AT", Sicherheiten);

      // Kredit4 besichert mit Gold
      //
      TreeMap<String, Object> Sicherheiten2 = new TreeMap();
      Sicherheiten2.put("GE01_1", "S0600");
      Sicherheiten2.put("GE02_1", "ONBALANCE"); // GE02_Forderungskategorie_Code
      Sicherheiten2.put("AI_Zerlegungsansatz_Code_11", "INT");
      Sicherheiten2.put("BEL_11", 5000);
      Sicherheiten2.put("ST03_11", "GA");
      Sicherheiten2.put("ST_Land_11", "JP");

      DataPointVector DPVector_Kredit4 = Kredit(4000, 4000, 3000, "EUR", "AT", Sicherheiten2);
      // unbesicherter Schweizer Franken Kredit
      DataPointVector DPVector_Kredit2 = Kredit(500, 0, 0, "CHF", "AT", null);
      // kredit an US Unternehmen
      DataPointVector DPVector_Kredit3 = Kredit(2000, 1000, 0, "EUR", "US", null);

      st.executeUpdate(DPVector_Kredit1.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      st.executeUpdate(DPVector_Kredit2.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      st.executeUpdate(DPVector_Kredit3.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      st.executeUpdate(DPVector_Kredit4.getSQLInsertQuery(Werte, "Geschaeftsfall"));

      // Einlagentermingeschäfte ("Forward Deposits")
      DataPointVector DPVector_Einlagentermingeschaeft = OffBalanceGeschaeft(700, 0, 0, "JP", "T");
      st.executeUpdate(DPVector_Einlagentermingeschaeft.getSQLInsertQuery(Werte, "Geschaeftsfall"));

      // Derivate mit negativen Marktwert und Einlagen
      DataPointVector DPVector_Einlage1 = Einlage(700, "AT", "EUR");
      DataPointVector DPVector_Einlage2 = Einlage(1200, "US", "USD");
      st.executeUpdate(DPVector_Einlage1.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      st.executeUpdate(DPVector_Einlage2.getSQLInsertQuery(Werte, "Geschaeftsfall"));

      // Verkaufter Future mit negativen Markwert
      DataPointVector DPVector_Derivat1 = Derivat(-500, "V", "F", "IN", "F", "FALSCH");

      //
      // Finanielle Aktiva
      //

      Vector<DataPointVector> CDS_Vector = CDSorCLN(0, 2500);

      for (int i = 0; i < CDS_Vector.size(); i++) {
        DataPointVector dummy = (DataPointVector) CDS_Vector.get(i);
        st.executeUpdate(dummy.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      }

      // Ende - Insert Credit Default Swap Verkauft

      // Insert Credit Linked Note

      CDS_Vector = CDSorCLN(1, 10000);

      for (int i = 0; i < CDS_Vector.size(); i++) {
        DataPointVector dummy = (DataPointVector) CDS_Vector.get(i);
        st.executeUpdate(dummy.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      }

      // Ende - Insert Credit Linked Note
      Vector<DataPointVector> Fond_Vector = Wertpapier(20000, 3, "I", "AT", "FOND", "SFON", null);

      for (int i = 0; i < Fond_Vector.size(); i++) {
        DataPointVector dummy = (DataPointVector) Fond_Vector.get(i);
        st.executeUpdate(dummy.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      }

      // Anfang - ABS (ist Besichert)

      //
      // Kredit1 besichert mit Gold
      //

      TreeMap<String, Object> ABSSicherheiten = new TreeMap();
      ABSSicherheiten.put("GE01_1", "S0600");
      ABSSicherheiten.put("GE02_1", "ONBALANCE"); // GE02_Forderungskategorie_Code
      ABSSicherheiten.put("AI_Zerlegungsansatz_Code_11", "INT");
      ABSSicherheiten.put("BEL_11", 8000);
      ABSSicherheiten.put("ST03_11", "GA");
      ABSSicherheiten.put("ST_Land_11", "GB");

      Vector<DataPointVector> ABS_Vector =
          Wertpapier(12000, 3, "H", "DE", "ANL", "ABS", ABSSicherheiten);

      for (int i = 0; i < ABS_Vector.size(); i++) {
        DataPointVector dummy = (DataPointVector) ABS_Vector.get(i);
        st.executeUpdate(dummy.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      }
      // Ende Abs

      // Verkaufter Future mit positiven Markwert

      // gekaufter CDS zu sepkulativen Zweceken
      DataPointVector DPVector_Derivat2 = Derivat(300, "K", "S", "CD", "F", "FALSCH");
      // gekaufte Option auf eine Akie
      DataPointVector DPVector_Derivat3 = Derivat(450, "K", "O", "IN", "F", "FALSCH");
      st.executeUpdate(DPVector_Derivat1.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      st.executeUpdate(DPVector_Derivat2.getSQLInsertQuery(Werte, "Geschaeftsfall"));
      st.executeUpdate(DPVector_Derivat3.getSQLInsertQuery(Werte, "Geschaeftsfall"));

      st.close();
      conn.close();

    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
  public Vector<DataPointVector> Wertpapier(
      int Marktwert,
      int Anzahl_Underlyings,
      String GF00,
      String EM02,
      String WM00,
      String WM02,
      TreeMap<String, Object> Sicherheiten) {
    int LastID = getLastID() + 1;
    Vector<DataPointVector> CDSData = new Vector();
    // 0ter Datensatz entspricht dem CDS
    // alle weiten sind Underlyungs
    //
    // Wichtige Parameter
    //
    // Dieser Vector enthält Kredite mit verschiedenen Ausprägungen
    DataPointVector DPVector = new DataPointVector();
    DPVector.addDataPoint("GF00_Geschaeftsfallkategorie_Code", GF00);
    DPVector.addDataPoint("AI_Mandant", 1);
    DPVector.addDataPoint("WM00_Wertpapiertyp_Code", WM00);
    DPVector.addDataPoint("WM02_Wertpapierart_Code", WM02);
    DPVector.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());
    if (EM02 == null) {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", Laender.randomElement());
    } else {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", EM02);
    }
    DPVector.addDataPoint(
        "GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Laender.randomElement()));
    int vorlaufzeit_jahre = RandomNumber(2, 5);
    int laufzeit_jahre = RandomNumber(2, 25);

    setLaufzeit(DPVector, vorlaufzeit_jahre, laufzeit_jahre);

    //
    // Sicherheiten
    //
    if (Sicherheiten != null) {
      for (String key : Sicherheiten.keySet()) {
        Object object = Sicherheiten.get(key);
        DPVector.addDataPoint(key.toString(), object);
      }
    }

    // Phantasie ISIN
    DPVector.addDataPoint("AI_ISIN", RandomISIN(EM02));
    DPVector.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "FALSCH");
    DPVector.addDataPoint(
        "MW",
        Marktwert); // hier die Möglichekit schaffen dass der Marktwert auch weniger als die
                    // Nominale ist

    CDSData.add(DPVector); // originaeres CDS

    for (int j = 0; j < Anzahl_Underlyings; j++) {
      // Hinzufuegen von Underlyings
      DataPointVector Underlying = new DataPointVector();
      Underlying.addDataPoint("GF00_Geschaeftsfallkategorie_Code", "A");
      Underlying.addDataPoint("AI_Mandant", 1);
      Underlying.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());
      String Land = Laender.randomElement();
      Underlying.addDataPoint("AI_ISIN", RandomISIN(Land));
      Underlying.addDataPoint("EO02_Sitzland_OS_Code", Land);
      Underlying.addDataPoint("GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Land));
      Underlying.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "WAHR");
      setLaufzeit(Underlying, vorlaufzeit_jahre, laufzeit_jahre);
      Underlying.addDataPoint("GB01_Beziehungsart_Code", "ZE");
      Underlying.addDataPoint("AI_Geschaeftsfall_ID2", LastID);
      // Underlying.addDataPoint("NN", Marktwert/Anzahl_Underlyings);
      // Underlying.addDataPoint("BW", Marktwert/Anzahl_Underlyings);
      Underlying.addDataPoint("MW", Marktwert / Anzahl_Underlyings);
      Underlying.addDataPoint("BW", Marktwert / Anzahl_Underlyings);
      Underlying.addDataPoint("NN", Marktwert / Anzahl_Underlyings);
      CDSData.add(Underlying);
    }

    return (Vector<DataPointVector>) CDSData;
  }
  public Vector<DataPointVector> CDSorCLN(int type, int NominalWert) {

    int LastID = getLastID() + 1;

    Vector<DataPointVector> CDSData = new Vector();
    // 0ter Datensatz entspricht dem CDS
    // alle weiten sind Underlyungs

    //
    // Wichtige Parameter
    //
    // Dieser Vector enthält Kredite mit verschiedenen Ausprägungen
    DataPointVector DPVector = new DataPointVector();

    String GFK = "";
    if (type == 0) GFK = "Q";
    if (type == 1) GFK = "H";

    DPVector.addDataPoint("GF00_Geschaeftsfallkategorie_Code", GFK);

    if (type == 1) {
      DPVector.addDataPoint("WM00_Wertpapiertyp_Code", "ANL");
      DPVector.addDataPoint("WM02_Wertpapierart_Code", "CLN");
    }

    Date Stichtag = Calendar.getInstance().getTime();
    DPVector.addDataPoint("AI_Mandant", 1);
    DPVector.addDataPoint("AI_Stichtag_Datum", Stichtag);
    DPVector.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());
    DPVector.addDataPoint("EO02_Sitzland_OS_Code", Laender.randomElement());
    DPVector.addDataPoint(
        "GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Laender.randomElement()));
    int vorlaufzeit_jahre = RandomNumber(2, 10);
    Date Beginn = new Date();
    Date Ende = new Date();
    int laufzeit_jahre = RandomNumber(2, 25);
    Beginn.setYear((2014 - vorlaufzeit_jahre) - 1900);
    Beginn.setMonth(RandomNumber(1, 12));
    Beginn.setDate(RandomNumber(1, 28));
    Ende.setYear(2014 + laufzeit_jahre - 1900);
    Ende.setMonth(RandomNumber(1, 12));
    Ende.setDate(RandomNumber(1, 28));

    //
    // Ende Laufzeit
    //

    int Anzahl_Underlyings = 1;

    if (type == 1) {
      Anzahl_Underlyings = 2; // RandomNumber(3, 6);
    }

    if (type == 1) {
      // Phantasie ISIN
      DPVector.addDataPoint("AI_ISIN", "DE000BAY0017");
    }

    System.out.println("Anzahl_Underlyings = " + Anzahl_Underlyings);
    DPVector.addDataPoint("GF17_Vertragsbeginn_Datum", Beginn);
    DPVector.addDataPoint("GF18_Kapitalbeginn_Datum", Beginn);
    DPVector.addDataPoint("GF19_Kapitalende_Datum", Ende);
    // Derivate Attribute für einen Swap
    if (type == 0) DPVector.addDataPoint("GF40_Kauf_Verkauf_Code", "V");
    if (type == 0) DPVector.addDataPoint("GF42_Derivattyp_Code", "S");
    DPVector.addDataPoint("GF52_Vertragsende_Datum", Ende);
    DPVector.addDataPoint(
        "GFA83_Ursprungslaufzeit_Code", BCAlgos.XEN_Laufzeitenberechnung(Beginn, Ende));
    DPVector.addDataPoint(
        "GFA84_Restlaufzeit_Code", BCAlgos.XEN_Laufzeitenberechnung(Stichtag, Ende));
    DPVector.addDataPoint("GF109_Bilanzseite_Code", "AKT");
    DPVector.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "FALSCH");
    DPVector.addDataPoint("NN", NominalWert);

    if (type == 1) {
      DPVector.addDataPoint(
          "MW",
          NominalWert
              * 1.2); // hier die Möglichekit schaffen dass der Marktwert auch weniger als die
                      // Nominale ist
    }

    CDSData.add(DPVector); // originaeres CDS

    for (int j = 0; j < Anzahl_Underlyings; j++) {
      // Hinzufuegen von Underlyings
      DataPointVector Underlying = new DataPointVector();
      Underlying.addDataPoint("GF00_Geschaeftsfallkategorie_Code", "A");
      Underlying.addDataPoint("AI_Mandant", 1);
      Underlying.addDataPoint("AI_Stichtag_Datum", Stichtag);
      Underlying.addDataPoint("GF109_Bilanzseite_Code", "AUB");

      Underlying.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());
      Underlying.addDataPoint("EO02_Sitzland_OS_Code", Laender.randomElement());
      Underlying.addDataPoint(
          "GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Laender.randomElement()));

      Beginn.setYear((2014 - vorlaufzeit_jahre) - 1900);
      Beginn.setMonth(RandomNumber(1, 12));
      Beginn.setDate(RandomNumber(1, 28));
      Ende.setYear(2014 + laufzeit_jahre - 1900);
      Ende.setMonth(RandomNumber(1, 12));
      Ende.setDate(RandomNumber(1, 28));

      //
      // Ende Laufzeit
      //
      Underlying.addDataPoint("GF17_Vertragsbeginn_Datum", Beginn);
      Underlying.addDataPoint("GF18_Kapitalbeginn_Datum", Beginn);
      Underlying.addDataPoint("GF19_Kapitalende_Datum", Ende);
      Underlying.addDataPoint("GF52_Vertragsende_Datum", Ende);
      Underlying.addDataPoint(
          "GFA83_Ursprungslaufzeit_Code", BCAlgos.XEN_Laufzeitenberechnung(Beginn, Ende));
      Underlying.addDataPoint(
          "GFA84_Restlaufzeit_Code", BCAlgos.XEN_Laufzeitenberechnung(Stichtag, Ende));
      Underlying.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "WAHR");
      Underlying.addDataPoint("GB01_Beziehungsart_Code", "UL");
      Underlying.addDataPoint("AI_Geschaeftsfall_ID2", LastID);
      Underlying.addDataPoint("NN", NominalWert / Anzahl_Underlyings);
      Underlying.addDataPoint("BW", NominalWert / Anzahl_Underlyings);

      CDSData.add(Underlying);
    }

    return (Vector<DataPointVector>) CDSData;
  }
  public DataPointVector Einlage(int Buchwert, String EM02, String GF03) {
    //
    // Wichtige Parameter
    //

    // Dieser Vector enthält Einlagen mit verschiedenen Ausprägungen
    DataPointVector DPVector = new DataPointVector();
    DPVector.addDataPoint("GF00_Geschaeftsfallkategorie_Code", "L");
    Date Stichtag = Calendar.getInstance().getTime();

    DPVector.addDataPoint("AI_Mandant", 1);

    DPVector.addDataPoint("GF109_Bilanzseite_Code", "PAS");

    DPVector.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());
    if (EM02 == null) {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", Laender.randomElement());
    } else {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", EM02);
    }

    if (GF03 == null) {
      DPVector.addDataPoint(
          "GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Laender.randomElement()));
    } else {
      DPVector.addDataPoint("GF03_Geschaeftsfall_Waehrung_Code", GF03);
    }

    DPVector.addDataPoint("GF10_Soll_Haben_Code", "H"); // Einlage per definition im Haben
    // DPVector.addDataPoint("GF15_Treuhandvermoegen_Code","A");
    // DPVector.addDataPoint("GF16_Kredit_Verwendungszweck_Code",Kredit_Verwendungszweck_Code.randomElement());

    //
    // Laufzeiten
    //

    int vorlaufzeit_jahre = RandomNumber(1, 10);
    int laufzeit_jahre = RandomNumber(2, 25);

    setLaufzeit(DPVector, vorlaufzeit_jahre, laufzeit_jahre);
    //
    // Ende Laufzeit
    //

    int x = RandomNumber(1, 2);
    // i... indikator gebunden
    if (x == 1) {
      DPVector.addDataPoint("GF30_Verzinsungsart_Code", "i");
      DPVector.addDataPoint("GF38_Naechste_Zinsanpassung_Datum", Stichtag);
    } else {
      DPVector.addDataPoint("GF30_Verzinsungsart_Code", "f");
    }
    DPVector.addDataPoint("BW", Buchwert);

    DPVector.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "FALSCH");

    if (GF03.contains("EUR")) {
      DPVector.addDataPoint("GFA117_lokale_Verbindlichkeiten_in_lokaler_Waehrung", "WAHR");
    } else {
      DPVector.addDataPoint("GFA117_lokale_Verbindlichkeiten_in_lokaler_Waehrung", "FALSCH");
    }

    return DPVector;
  }
  public DataPointVector OffBalanceGeschaeft(int NN, int NAR, int UKR, String EM02, String GF114) {
    // GF114 = GF114_Ausserbilanzielle_Geschaefte_Code
    // UKR = Unwiderruflicher Kreditrahmen
    //
    // Wichtige Parameter
    //
    //
    //
    // Dieser Vector enthält Einlagen mit verschiedenen Ausprägungen
    DataPointVector DPVector = new DataPointVector();
    DPVector.addDataPoint("GF00_Geschaeftsfallkategorie_Code", "P");
    DPVector.addDataPoint("GF114_ausserbilanzielle_Geschaefte_Code", GF114);
    DPVector.addDataPoint("AI_Mandant", 1);
    DPVector.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());
    if (EM02 == null) {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", Laender.randomElement());
    } else {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", EM02);
    }

    DPVector.addDataPoint(
        "GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Laender.randomElement()));
    DPVector.addDataPoint("GF10_Soll_Haben_Code", "H"); // Ja nach AMrktwert Soll oder Haben
    DPVector.addDataPoint("GF109_Bilanzseite_Code", "PUB");
    DPVector.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "FALSCH");

    //
    // Laufzeiten
    //
    int laufzeit_jahre = RandomNumber(1, 8);
    setLaufzeit(DPVector, 1, laufzeit_jahre);
    DPVector.addDataPoint("NN", NN);
    DPVector.addDataPoint("NAR", NAR);
    DPVector.addDataPoint("UKR", UKR);

    return DPVector;
  }
  public DataPointVector Derivat(
      int MW,
      String GF40,
      String GF42,
      String GF43,
      String GF44,
      String GFA120_Sicherheit_Kennzeichen) {
    // GF40 Kauf Verkauf Code
    // GF42_Derivattyp_Code :
    // O Option
    // F Future
    // W Forward
    // S Swap
    // X Sonstige
    // GF43_Underlying_Klasse_Code
    // GF44_Underlying_Subklasse_Code
    //
    // Wichtige Parameter
    //
    //
    //
    // Dieser Vector enthält Einlagen mit verschiedenen Ausprägungen
    DataPointVector DPVector = new DataPointVector();
    DPVector.addDataPoint("GF00_Geschaeftsfallkategorie_Code", "Q");
    DPVector.addDataPoint("GF40_Kauf_Verkauf_Code", GF40);
    DPVector.addDataPoint("GF42_Derivattyp_Code", GF42);
    DPVector.addDataPoint("GF43_Underlying_Klasse_Code", GF43);
    DPVector.addDataPoint("GF44_Underlying_Subklasse_Code", GF44);

    DPVector.addDataPoint("AI_Mandant", 1);

    DPVector.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());
    DPVector.addDataPoint("EO02_Sitzland_OS_Code", Laender.randomElement());
    DPVector.addDataPoint(
        "GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Laender.randomElement()));
    if (MW < 0) {
      DPVector.addDataPoint("GF10_Soll_Haben_Code", "H"); // Ja nach AMrktwert Soll oder Haben
      DPVector.addDataPoint("GF109_Bilanzseite_Code", "PAS");
    } else {
      DPVector.addDataPoint("GF10_Soll_Haben_Code", "S");
      DPVector.addDataPoint("GF109_Bilanzseite_Code", "AKT");
    }

    DPVector.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "FALSCH");
    DPVector.addDataPoint("GFA120_Sicherheit_Kennzeichen", GFA120_Sicherheit_Kennzeichen);

    //
    // Laufzeiten
    //
    int laufzeit_jahre = RandomNumber(1, 4);
    setLaufzeit(DPVector, 1, laufzeit_jahre);
    DPVector.addDataPoint("MW", MW);
    return DPVector;
  }
  public DataPointVector Kredit(
      int Buchwert,
      int NAR,
      int UKR,
      String GF03,
      String EM02,
      TreeMap<String, Object> Sicherheiten) {
    //
    // Wichtige Parameter
    //
    int Ausfalls_Wahrscheinlichkeit = 5; // so viele Kredite fallen aus
    //
    // Ist der Kredit Ausgefallen ?
    //
    // Dieser Vector enthält Kredite mit verschiedenen Ausprägungen
    DataPointVector DPVector = new DataPointVector();
    DPVector.addDataPoint("GF00_Geschaeftsfallkategorie_Code", "A");

    int x = RandomNumber(1, 100);
    if (x > 100 - Ausfalls_Wahrscheinlichkeit) {
      DPVector.addDataPoint("GF99_ueberfaellig_Kennzeichen", wahr);
    }

    Date Stichtag = Calendar.getInstance().getTime();

    DPVector.addDataPoint("AI_Mandant", 1);

    DPVector.addDataPoint("EM04_Sektor_ESVG_MS_Code", ESVGSektoren.randomElement());

    if (EM02 == null) {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", Laender.randomElement());
    } else {
      DPVector.addDataPoint("EO02_Sitzland_OS_Code", EM02);
    }

    if (GF03 == null) {
      DPVector.addDataPoint(
          "GF03_Geschaeftsfall_Waehrung_Code", Land_Waehrung.get(Laender.randomElement()));
    } else {
      DPVector.addDataPoint("GF03_Geschaeftsfall_Waehrung_Code", GF03);
    }

    DPVector.addDataPoint("GF10_Soll_Haben_Code", "S"); // Kredit per definition im Soll
    DPVector.addDataPoint("GF15_Treuhandvermoegen_Code", "A");
    DPVector.addDataPoint(
        "GF16_Kredit_Verwendungszweck_Code", Kredit_Verwendungszweck_Code.randomElement());

    //
    // Laufzeiten
    //

    int vorlaufzeit_jahre = RandomNumber(1, 10);
    int laufzeit_jahre = RandomNumber(2, 25);
    setLaufzeit(DPVector, vorlaufzeit_jahre, laufzeit_jahre);

    x = RandomNumber(1, 2);
    // i... indikator gebunden
    if (x == 1) {
      DPVector.addDataPoint("GF30_Verzinsungsart_Code", "i");
      DPVector.addDataPoint("GF38_Naechste_Zinsanpassung_Datum", Stichtag);
    } else {
      DPVector.addDataPoint("GF30_Verzinsungsart_Code", "f");
    }

    DPVector.addDataPoint("GF24_Konsortialkredit_Code", "KK");

    //		x = RandomNumber(1, 5);//Ein Fuenftel der Kredite ist besichert
    //		if (x==1){
    //			DPVector.addDataPoint("GF91_Immobilienbesichert_Monstat_Kennzeichen",wahr);
    //			DPVector.addDataPoint("GF89_vollbesichert_Zinsstat_Kennzeichen",wahr);
    //		}

    DPVector.addDataPoint("BW", Buchwert);
    DPVector.addDataPoint("NAR", NAR);
    DPVector.addDataPoint("UKR", UKR);

    //		x = RandomNumber(1, 5);//ein Fünftel aller Kredite Sind verbreift
    //
    //		if (x==1){
    //			DPVector.addDataPoint("GF109_Bilanzseite_Code","NIB");
    //			DPVector.addDataPoint("GF105_Kredituebertragung_An_Verkauf_Code","V");//Kredit ist verkauft
    // //kann eeventuell noch verbessert werden
    //			DPVector.addDataPoint("GF106_Kredituebertragung_Art_Code","TSV");
    //			int y = RandomNumber(0, 1);
    //			if (y == 0){DPVector.addDataPoint("GF107_Kredituebertragung_serviciert_Kennzeichen",wahr);}
    //			if (y ==
    // 1){DPVector.addDataPoint("GF107_Kredituebertragung_serviciert_Kennzeichen",falsch);}
    //		}else{
    //			DPVector.addDataPoint("GF109_Bilanzseite_Code","AKT");
    //			DPVector.addDataPoint("GF105_Kredituebertragung_An_Verkauf_Code","K");//Kredit ist nicht
    // verkauft
    //		}

    DPVector.addDataPoint("GF109_Bilanzseite_Code", "AKT");

    DPVector.addDataPoint("GF112_Zerlegung_Underlying_Kennzeichen", "FALSCH");

    //
    // Sicherheiten
    //

    if (Sicherheiten != null) {
      for (String key : Sicherheiten.keySet()) {
        Object object = Sicherheiten.get(key);
        DPVector.addDataPoint(key.toString(), object);
      }
    }

    return DPVector;
  }