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 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;
  }