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 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 void init() {

    // KFO	Konsortialführer offen, Konsortialführer ist jenes KI, welches den Kreditvertrag
    // abschließt. Offen bedeutet, Kreditnehmer kennt die Konsortialpartner
    // KFS Konsortialführer still, Konsortialführer ist jenes KI, welches den Kreditvertrag
    // abschließt. Still bedeutet, Kreditnehmer kennt die Konsortialpartner nicht.
    // KO, Konsorte offen, Offen bedeutet, Kreditnehmer kennt die Konsortialpartner
    // KS, 	Konsorte still, Still bedeutet, Kreditnehmer kennt die Konsortialpartner nicht.
    // KK, Kein Konsortialkredit

    ReadExcel re = new ReadExcel();
    re.setInputFile("C:\\Users\\frisch\\Desktop\\Prototyp_Stammdaten\\isocodes.xls");

    try {
      Land_Waehrung = re.returnTreeMap(0, 4, 281, 2, 4);
      Waehrung_Land = re.returnTreeMap(0, 4, 281, 4, 2);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    Kredit_Verwendungszweck_Code.add("W"); // Kredit für Schaffung und Erhaltung von Wohnraum	
    Kredit_Verwendungszweck_Code.add("K"); // Konsumkredit
    Kredit_Verwendungszweck_Code.add("I"); // Kredit für Immobilienfinanzierung
    Kredit_Verwendungszweck_Code.add("S"); // Sonstige Ausleihungen

    SektorBWG.add("0");
    SektorBWG.add("1");
    SektorBWG.add("2");
    SektorBWG.add("3");
    SektorBWG.add("4");
    SektorBWG.add("5");
    SektorBWG.add("6");
    SektorBWG.add("7");
    SektorBWG.add("8");
    SektorBWG.add("9");
    SektorBWG.add("11");

    // Laender.add("BG");
    // Laender.add("DK");
    Laender.add("DE");
    // Laender.add("EE");
    // Laender.add("FI");
    // Laender.add("FR");
    Laender.add("GR");
    // Laender.add("IE");
    // Laender.add("IT");
    // Laender.add("HR");
    // Laender.add("LV");
    // Laender.add("LT");
    // Laender.add("LU");
    // Laender.add("MT");
    // Laender.add("NL");
    Laender.add("AT");
    // Laender.add("PL");
    // Laender.add("PT");
    // Laender.add("RO");
    // Laender.add("SE");
    // Laender.add("SK");
    // Laender.add("SI");
    // Laender.add("ES");
    // Laender.add("CZ");
    // Laender.add("HU");
    Laender.add("GB");
    // Laender.add("CY");
    Laender.add("JP");

    ESVGSektoren.add("1210"); // Zentralbank
    ESVGSektoren.add("1311"); // Zentralstaat
    ESVGSektoren.add("1312"); // Länder (inkl. Landeskammern, Landesfonds)
    ESVGSektoren.add("1313"); // Gemeinden (inkl. Gemeindefonds und -verbände)
    ESVGSektoren.add("1314"); // Sozialversicherung
    ESVGSektoren.add("1300Z"); // Staat nicht zuordenbar
    ESVGSektoren.add("1220A"); // 1220A-Z MFI

    ESVG_BIZ_SEKTOR_MAPPER.put("1210", "Offizieller Sektor"); // Zentralbank
    ESVG_BIZ_SEKTOR_MAPPER.put("1311", "Offizieller Sektor"); // Zentralstaat
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1312", "Offizieller Sektor"); // Länder (inkl. Landeskammern, Landesfonds)
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1313", "Offizieller Sektor"); // Gemeinden (inkl. Gemeindefonds und -verbände)
    ESVG_BIZ_SEKTOR_MAPPER.put("1314", "Offizieller Sektor"); // Sozialversicherung
    ESVG_BIZ_SEKTOR_MAPPER.put("1300Z", "Offizieller Sektor"); // Staat nicht zuordenbar
    ESVG_BIZ_SEKTOR_MAPPER.put("1220A", "Banken");

    ESVGSektoren.add("1230"); // Geldmarktfonds
    ESVGSektoren.add("1240B"); // Rentenfonds
    ESVGSektoren.add("1240C"); // sonstige Fonds
    ESVGSektoren.add("1240D"); //  Immobilienfonds
    ESVGSektoren.add("1240E"); // Aktienfonds
    ESVGSektoren.add("1240F"); //  Hedgefonds
    ESVGSektoren.add("1240G"); //  gemischte Fonds
    ESVGSektoren.add("1240Z"); //  Investmentfonds nicht zuordenbar
    ESVGSektoren.add(
        "1250A"); //  Andere finanzielle Unternehmen (exkl. Versicherungen und Pensionskassen)
    ESVGSektoren.add("1250B"); //  Betriebliche Vorsorgekassen
    ESVGSektoren.add("1250C"); //  Clearinghäuser
    ESVGSektoren.add("1250D"); //  Financial Vehicle Corporations (FVCs)
    ESVGSektoren.add("1250E"); //  Finanzleasinggesellschaften
    ESVGSektoren.add("1250Z"); //  Sonstige Finanzinstitute nicht zuordenbar
    ESVGSektoren.add("1260A"); //  Kredit- und Versicherungshilfstätigkeiten
    ESVGSektoren.add("1260B"); //  Finanzielle Head-offices
    ESVGSektoren.add(
        "1270A"); //  Firmeneigene Finanzinstitute und Kapitalgeber ohne Privatstiftungen (Holdings)
    ESVGSektoren.add("1270C"); //  Sparkassenstiftungen (Anteilsverwaltungen)
    ESVGSektoren.add("1280"); //  Versicherungsgesellschaften
    ESVGSektoren.add("1290"); //   Pensionskassen (Alterssicherungssysteme)

    ESVGSektoren.add("1100"); // Nichtfinanzielle-Unternehmen

    // BIZ - Nicht-Banken-Privatsektor (Überbereich)
    // BIZ - Nichtbank-Finanzinstitutionen
    ESVG_BIZ_SEKTOR_MAPPER.put("1230", "Nicht-Banken-Privatsektor"); // Geldmarktfonds
    ESVG_BIZ_SEKTOR_MAPPER.put("1240B", "Nicht-Banken-Privatsektor"); // Rentenfonds
    ESVG_BIZ_SEKTOR_MAPPER.put("1240C", "Nicht-Banken-Privatsektor"); // sonstige Fonds
    ESVG_BIZ_SEKTOR_MAPPER.put("1240D", "Nicht-Banken-Privatsektor"); //  Immobilienfonds
    ESVG_BIZ_SEKTOR_MAPPER.put("1240E", "Nicht-Banken-Privatsektor"); // Aktienfonds
    ESVG_BIZ_SEKTOR_MAPPER.put("1240F", "Nicht-Banken-Privatsektor"); //  Hedgefonds
    ESVG_BIZ_SEKTOR_MAPPER.put("1240G", "Nicht-Banken-Privatsektor"); //  gemischte Fonds
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1240Z", "Nicht-Banken-Privatsektor"); //  Investmentfonds nicht zuordenbar
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1250A",
        "Nicht-Banken-Privatsektor"); //  Andere finanzielle Unternehmen (exkl. Versicherungen und
                                      // Pensionskassen)
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1250B", "Nicht-Banken-Privatsektor"); //  Betriebliche Vorsorgekassen
    ESVG_BIZ_SEKTOR_MAPPER.put("1250C", "Nicht-Banken-Privatsektor"); //  Clearinghäuser
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1250D", "Nicht-Banken-Privatsektor"); //  Financial Vehicle Corporations (FVCs)
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1250E", "Nicht-Banken-Privatsektor"); //  Finanzleasinggesellschaften
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1250Z", "Nicht-Banken-Privatsektor"); //  Sonstige Finanzinstitute nicht zuordenbar
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1260A", "Nicht-Banken-Privatsektor"); //  Kredit- und Versicherungshilfstätigkeiten
    ESVG_BIZ_SEKTOR_MAPPER.put("1260B", "Nicht-Banken-Privatsektor"); //  Finanzielle Head-offices
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1270A",
        "Nicht-Banken-Privatsektor"); //  Firmeneigene Finanzinstitute und Kapitalgeber ohne
                                      // Privatstiftungen (Holdings)
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1270C", "Nicht-Banken-Privatsektor"); //  Sparkassenstiftungen (Anteilsverwaltungen)
    ESVG_BIZ_SEKTOR_MAPPER.put("1280", "Nicht-Banken-Privatsektor"); //  Versicherungsgesellschaften
    ESVG_BIZ_SEKTOR_MAPPER.put(
        "1290", "Nicht-Banken-Privatsektor"); //   Pensionskassen (Alterssicherungssysteme)
    // BIZ - Nichfinanzieller Privatsektor (Überbereich)

    ESVG_BIZ_SEKTOR_MAPPER.put("1100", "Nichtfinanzielle-Unternehmen");

    //	BIZ -
    //	•	1100 Nicht-finanzielle Unternehmen
    //	BIZ - Haushalten und NPISH
    //	•	1400B    sonstige private Haushalte nicht zuordenbar
    //	•	1400Z    private Haushalte nicht zuordenbar
    //	•	1500      sonstige private Organisationen ohne Erwerbszweck
    //	•	1400A    Selbständigenhaushalte (mit u.ohne Arbeitnehmer)
    //	BIZ - Unallocated: Nichtfinanzieller Privatsektor
    //	BIZ - Unallocated
    //	BIZ - Unsicher – TBD
    //	•	1270B    Stiftunge

    Werttabelle.put("BW", "Buchwert");
    Werttabelle.put("NN", "Nominale");
    Werttabelle.put("MW", "Marktwert");
    Werttabelle.put("KW", "Kompensationswert");
    Werttabelle.put("FDU", "Forderungswert Derivate vor Netting gem. Ursprungsrisikomethode");
    Werttabelle.put("FDM", "Forderungswert Derivate vor Netting gem. Marktbewertungsmethode");
    Werttabelle.put("FDS", "Forderungswert Derivate vor Netting gem. Standardmethode");
    Werttabelle.put("FDI", "Forderungswert Derivate vor Netting gem.internem Modell");
    Werttabelle.put("FD", "Forderungswert Derivate");
    Werttabelle.put("ND", "Netting");
    Werttabelle.put("KGR", "kommunizierter Gesamtrahmen");
    Werttabelle.put("ZH", "Zinsabgrenzung Haben");
    Werttabelle.put("ZS", "Zinsabgrenzung Soll");
    Werttabelle.put("EZ", "Effektivzinssatz");
    Werttabelle.put("AJ", "annualisiert vereinbarter Jahreszinssatz");
    Werttabelle.put("NAR", "nicht-ausgenützter Rahmen");
    Werttabelle.put("UKR", "unwiderruflciher Kreditrahmen");
    Werttabelle.put("DA", "direkte Abschreibung");
    Werttabelle.put("EWB", "Einzelwertberichtigung");
    Werttabelle.put("AWB", "aufgeteilte Pauschalwertberichtigung");
    Werttabelle.put("EWBG", "Einzelwertberichtigung gesamt");
    Werttabelle.put("WB", "Wertberichtigung § 57 BWG");
    Werttabelle.put("KA", "in aktueller Periode angekaufter Kredit (Einzelkredit)");
    Werttabelle.put("KV", "in aktueller Periode verkaufter Kredit (Einzelkredit)");
    Werttabelle.put("EM", "Emission");
    Werttabelle.put("TI", "Tilgung");
    Werttabelle.put("NG", "Neugeschäft");
    Werttabelle.put("NV", "Neukreditvergabe");
    Werttabelle.put("KEZ", "kapitalgewichteter Effektivzinssatz (Neugeschäft)");
    Werttabelle.put("KAJB", "kapitalgewichteter annualisierter Jahreszinssatz (Buchwert)");
    Werttabelle.put("KAJNG", "kapitalgewichteter annualisierter Jahreszinssatz (Neugeschäft)");
    Werttabelle.put("KAJN", "kapitalgewichteter annualisierter Jahreszinssatz (Neugeschäft)");
    Werttabelle.put("KAJNV", "kapitalgewichteter annualisierter Jahreszinssatz (Neukreditvergabe)");
    Werttabelle.put("REK", "Reklassifikation");
    Werttabelle.put("RV", "Rückkauf von Verbriefungen innerhalb der Periode");
  }
  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 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;
  }