import { JavaObject, cast_java_lang_Object } from '../../../java/lang/JavaObject';
import { JavaInteger, cast_java_lang_Integer } from '../../../java/lang/JavaInteger';
import { HashMap, cast_java_util_HashMap } from '../../../java/util/HashMap';
import { Schulform, cast_de_nrw_schule_svws_core_types_statkue_Schulform } from '../../../core/types/statkue/Schulform';
import { Schulgliederung, cast_de_nrw_schule_svws_core_types_statkue_Schulgliederung } from '../../../core/types/statkue/Schulgliederung';
import { List, cast_java_util_List } from '../../../java/util/List';
import { JavaString, cast_java_lang_String } from '../../../java/lang/JavaString';
import { Arrays, cast_java_util_Arrays } from '../../../java/util/Arrays';
import { Vector, cast_java_util_Vector } from '../../../java/util/Vector';

export class ZulaessigeKursart extends JavaObject {

	/** the name of the enumeration value */
	private readonly __name : String;

	/** the ordinal value for the enumeration value */
	private readonly __ordinal : number;

	/** an array containing all values of this enumeration */
	private static readonly all_values_by_ordinal : Array<ZulaessigeKursart> = [];

	/** an array containing all values of this enumeration indexed by their name*/
	private static readonly all_values_by_name : Map<String, ZulaessigeKursart> = new Map<String, ZulaessigeKursart>();

	public static readonly AB3 : ZulaessigeKursart = new ZulaessigeKursart("AB3", 0, "AB3", "AB3", "71", "3. Abiturfach", "null", "GK", "Grundkurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly AB4 : ZulaessigeKursart = new ZulaessigeKursart("AB4", 1, "AB4", "AB4", "71", "4. Abiturfach", "null", "GK", "Grundkurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly AG : ZulaessigeKursart = new ZulaessigeKursart("AG", 2, "AG", "AG", "67", "Arbeitsgemeinschaft gemäß APO SI", "gemäß § 3 Abs. 6 APO-SI", null, null, false, Arrays.asList("GY", "H", "R", "SG", "SR"), Arrays.asList("GY", "GY", "H", "R", "GY", "H", "R"));

	public static readonly AGGT : ZulaessigeKursart = new ZulaessigeKursart("AGGT", 3, "AGGT", "AGGT", "36", "Arbeitsgemeinschaft im Ganztagsbereich", "gemäß § 9 Abs. 2, 3  SchulG", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly AGKWB : ZulaessigeKursart = new ZulaessigeKursart("AGKWB", 4, "AGKWB", "AGK", "28", "Stütz- und Angleichungskurs / Förderunterricht", "null", null, null, false, Arrays.asList("WB"), null);

	public static readonly AGK : ZulaessigeKursart = new ZulaessigeKursart("AGK", 5, "AGK", "AGK", "73", "Angleichungskurs", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly AST : ZulaessigeKursart = new ZulaessigeKursart("AST", 6, "AST", "AST", "33", "Arbeits- bzw. Übungsstunde ", "gemäß § 9 Abs. 2, 3  SchulG", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly BSP : ZulaessigeKursart = new ZulaessigeKursart("BSP", 7, "BSP", "BSP", "59", "Begegnung mit Sprachen in der Primarstufe", "null", null, null, false, Arrays.asList("FW"), null);

	public static readonly BUS : ZulaessigeKursart = new ZulaessigeKursart("BUS", 8, "BUS", "BUS", "94", "Unterricht im Rahmen von KAOA einschl. Schule trifft Arbeitswelt", "null", null, null, false, Arrays.asList("GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly E : ZulaessigeKursart = new ZulaessigeKursart("E", 9, "E", "E", "02", "Erweiterungsebene/-kurs", "null", "DK", "Differenzierungskurs", false, Arrays.asList("GE", "GM", "PS", "SG", "SK"), null);

	public static readonly E_H : ZulaessigeKursart = new ZulaessigeKursart("E_H", 10, "E_H", "E", "16", "Erweiterungskurs – Bildungsgang Hauptschule", "null", null, null, false, Arrays.asList("H", "S", "V"), Arrays.asList("H", "H", "H"));

	public static readonly EBA : ZulaessigeKursart = new ZulaessigeKursart("EBA", 11, "EBA", "EBA", "88", "Erweitertes Bildungsangebot", "null", null, null, false, Arrays.asList("H", "V"), Arrays.asList("H", "H", "H"));

	public static readonly EF2 : ZulaessigeKursart = new ZulaessigeKursart("EF2", 12, "EF2", "EF2", "57", "Einführung in die 2. Fremdsprache oder Ersatzfach", "null", null, null, false, Arrays.asList("WB"), null);

	public static readonly EFSP : ZulaessigeKursart = new ZulaessigeKursart("EFSP", 13, "EFSP", "EFSP", "71", "Ersatzfach für Sport als 4. Abiturfach", "null", "GK", "Grundkurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly EGS1 : ZulaessigeKursart = new ZulaessigeKursart("EGS1", 14, "EGS1", "EGS1", "96", "Ergänzungsstunden", "gemäß § 3 Abs. 1, 3 und § 15 Abs. 3 APO-SI", null, null, false, Arrays.asList("GE", "GM", "GY", "H", "PS", "R", "SG", "SK", "SR", "V"), null);

	public static readonly EGSN : ZulaessigeKursart = new ZulaessigeKursart("EGSN", 15, "EGSN", "EGSN", "97", "Ergänzungsstunden mit Benotung", "gemäß § 3 Abs. 1, 3 und § 19 Abs. 3 Nr.2 und 4 APO-SI", null, null, false, Arrays.asList("GE", "PS"), null);

	public static readonly EV : ZulaessigeKursart = new ZulaessigeKursart("EV", 16, "EV", "EV", "41", "Ergänzungs- oder Vertiefungskurs", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly EWBF : ZulaessigeKursart = new ZulaessigeKursart("EWBF", 17, "EWBF", "EWBF", "12", "Erweiterungsunterricht Wahlbereich - berufsbezogen, fachübergreifend", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly EWF : ZulaessigeKursart = new ZulaessigeKursart("EWF", 18, "EWF", "EWF", "11", "Erweiterungsunterricht Wahlbereich - fach-, jedoch nicht abschlussbezogen", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly EWFA : ZulaessigeKursart = new ZulaessigeKursart("EWFA", 19, "EWFA", "EWFA", "10", "Erweiterungsunterricht Wahlbereich - fach- und abschlussbezogen", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly F3 : ZulaessigeKursart = new ZulaessigeKursart("F3", 20, "F3", "F3", "64", "Wahlplflichtunterricht: Einzelfach im math.-naturw., techn., gesellschaftsw., künstlerischen Schwerpunkt", "null", null, null, false, Arrays.asList("GY", "SG"), Arrays.asList("GY", "GY"));

	public static readonly FAG : ZulaessigeKursart = new ZulaessigeKursart("FAG", 21, "FAG", "FAG", "58", "freiwillige Arbeitsgemeinschaft", "null", null, null, false, Arrays.asList("WB"), null);

	public static readonly FFU : ZulaessigeKursart = new ZulaessigeKursart("FFU", 22, "FFU", "FFU", "04", "Fachbezogener Förderunterricht", "null", null, null, false, Arrays.asList("GE", "GM", "PS", "SG", "SK"), null);

	public static readonly FOGT : ZulaessigeKursart = new ZulaessigeKursart("FOGT", 23, "FOGT", "FOGT", "37", "Förderangebot Ganztagsschule", "gemäß § 9 Abs. 2, 3  SchulG", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly DFUT : ZulaessigeKursart = new ZulaessigeKursart("DFUT", 24, "DFUT", "FS", "89", "Förderung neu zugewanderter Schüler in Deutschfördergruppen (teilweise äußere und innere Differenzierung)", "gemäß Erlass 13-63 Nr. 3", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly FS3 : ZulaessigeKursart = new ZulaessigeKursart("FS3", 25, "FS3", "FS3", "65", "Wahlpflichtbereich II (Kl. 09 und 10, bei G8: 08 und 09): 3. Fremdsprache", "null", null, null, false, Arrays.asList("GY", "SG"), Arrays.asList("GY", "GY", "GY"));

	public static readonly DFUK : ZulaessigeKursart = new ZulaessigeKursart("DFUK", 26, "DFUK", "FSD", "90", "Förderung neu zugewanderter Schüler in Deutschförderklassen (vollständige äußere Differenzierung)", "gemäß Erlass 13-63 Nr. 3", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly FU : ZulaessigeKursart = new ZulaessigeKursart("FU", 27, "FU", "FU", "01", "Förderunterricht", "null", null, null, false, Arrays.asList("S"), null);

	public static readonly FUAUS : ZulaessigeKursart = new ZulaessigeKursart("FUAUS", 28, "FUAUS", "FU", "03", "Stützunterricht Wahlbereich - Förderunterricht für ausländische u. ausgesiedelte Schüler", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly FUF : ZulaessigeKursart = new ZulaessigeKursart("FUF", 29, "FUF", "FUF", "05", "Fachunabhängiger Förderunterricht", "null", null, null, false, Arrays.asList("GE", "GM", "PS", "SG", "SK"), null);

	public static readonly FUK : ZulaessigeKursart = new ZulaessigeKursart("FUK", 30, "FUK", "FUK", "99", "Förderunterricht im Klassenverband", "null", null, null, false, Arrays.asList("G"), null);

	public static readonly FUT : ZulaessigeKursart = new ZulaessigeKursart("FUT", 31, "FUT", "FUT", "00", "Förderunterricht für Teile von Klassen", "null", null, null, false, Arrays.asList("G"), null);

	public static readonly FUEK : ZulaessigeKursart = new ZulaessigeKursart("FUEK", 32, "FUEK", "FÜK", "79", "fächerübergreifender Kurs", "null", null, null, false, Arrays.asList("WB"), null);

	public static readonly G : ZulaessigeKursart = new ZulaessigeKursart("G", 33, "G", "G", "01", "Grundebene/-kurs", "null", "DK", "Differenzierungskurs", false, Arrays.asList("GE", "GM", "PS", "SG", "SK"), null);

	public static readonly G_H : ZulaessigeKursart = new ZulaessigeKursart("G_H", 34, "G_H", "G", "13", "Grundkurs – Bildungsgang Hauptschule", "null", null, null, false, Arrays.asList("H", "S", "V"), Arrays.asList("H", "H", "H"));

	public static readonly GKM : ZulaessigeKursart = new ZulaessigeKursart("GKM", 35, "GKM", "GKM", "71", "Grundkurs mündlich", "null", "GK", "Grundkurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly GKS : ZulaessigeKursart = new ZulaessigeKursart("GKS", 36, "GKS", "GKS", "71", "Grundkurs schriftlich", "null", "GK", "Grundkurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly HU : ZulaessigeKursart = new ZulaessigeKursart("HU", 37, "HU", "HU", "99", "Hausunterricht", "null", null, null, false, Arrays.asList("G", "GE", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V", "WB"), null);

	public static readonly KMFOE : ZulaessigeKursart = new ZulaessigeKursart("KMFOE", 38, "KMFOE", "KMFÖ", "95", "Zusätzlicher Förderunterricht im Rahmen der Initiative Komm mit", "null", null, null, false, Arrays.asList("GE", "GM", "GY", "H", "PS", "R", "SG", "SK", "SR", "V"), null);

	public static readonly LK1 : ZulaessigeKursart = new ZulaessigeKursart("LK1", 39, "LK1", "LK1", "72", "Leistungskurs I", "null", "LK", "Leistungskurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly LK2 : ZulaessigeKursart = new ZulaessigeKursart("LK2", 40, "LK2", "LK2", "72", "Leistungskurs II", "null", "LK", "Leistungskurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly LRS : ZulaessigeKursart = new ZulaessigeKursart("LRS", 41, "LRS", "LRS", "82", "Schülerinnen und Schüler mit besonderen Schwierigkeiten im Erlernen des Lesens und Rechtschreibens (LRS)", "null", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly MEU : ZulaessigeKursart = new ZulaessigeKursart("MEU", 42, "MEU", "MEU", "84", "Unterricht in der Herkunftssprache (Muttersprachlicher Unterricht)", "null", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly DFUX : ZulaessigeKursart = new ZulaessigeKursart("DFUX", 43, "DFUX", "MEU", "85", "Förderung in der deutschen Sprache außerhalb von Sprachfördermaßnahmen", "gemäß Erlass 13-63 Nr. 3", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly NPG : ZulaessigeKursart = new ZulaessigeKursart("NPG", 44, "NPG", "NPG", "31", "Neigungs- und Projektgruppe", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly PJK : ZulaessigeKursart = new ZulaessigeKursart("PJK", 45, "PJK", "PJK", "78", "Projektkurs", "gemäß § 11 Abs. 8  APO - GOSt", "PJK", "Projektkurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "WB"), null);

	public static readonly PROJ : ZulaessigeKursart = new ZulaessigeKursart("PROJ", 46, "PROJ", "PROJ", "55", "Profilklasse", "gemäß § 21 Abs. 3 APO-SI", null, null, false, Arrays.asList("GE", "GY", "SK"), null);

	public static readonly PUK : ZulaessigeKursart = new ZulaessigeKursart("PUK", 47, "PUK", "PUK", "99", "Unterricht im Klassenverband", "null", null, null, false, Arrays.asList("BK", "G", "GE", "GM", "GY", "H", "PS", "R", "S", "SB", "SG", "SK", "SR", "V"), null);

	public static readonly PUT : ZulaessigeKursart = new ZulaessigeKursart("PUT", 48, "PUT", "PUT", "00", "Pflichtunterricht für Teile von Klassen", "null", null, null, false, Arrays.asList("FW", "G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V", "WB"), null);

	public static readonly SF : ZulaessigeKursart = new ZulaessigeKursart("SF", 49, "SF", "SF", "42", "Stütz- oder Förderkurs", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly SLP : ZulaessigeKursart = new ZulaessigeKursart("SLP", 50, "SLP", "SLP", "44", "Selbstlernphase", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly SPA : ZulaessigeKursart = new ZulaessigeKursart("SPA", 51, "SPA", "SPA", "63", "Wahlpflichtunterricht: Schwerpunktübergreifende Angebote", "null", null, null, false, Arrays.asList("GY"), Arrays.asList("GY", "GY", "GY"));

	public static readonly SPFU : ZulaessigeKursart = new ZulaessigeKursart("SPFU", 52, "SPFU", "SPFU", "81", "Sportförderunterricht", "null", null, null, false, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	public static readonly SPFOE : ZulaessigeKursart = new ZulaessigeKursart("SPFOE", 53, "SPFOE", "SPFÖ", "99", "sonderpädagogische Förderung", "null", null, null, false, Arrays.asList("S"), null);

	public static readonly SWFB : ZulaessigeKursart = new ZulaessigeKursart("SWFB", 54, "SWFB", "SWFB", "01", "Stützunterricht Wahlbereich - fachbezogen", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly SWFW : ZulaessigeKursart = new ZulaessigeKursart("SWFW", 55, "SWFW", "SWFW", "02", "Stützunterricht Wahlbereich - fachübergreifend", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly TAL : ZulaessigeKursart = new ZulaessigeKursart("TAL", 56, "TAL", "TAL", "91", "Unterricht im Rahmen des Schulversuchs Talentschule", "null", null, null, false, Arrays.asList("GE", "GM", "GY", "H", "R", "SK"), null);

	public static readonly UMPF : ZulaessigeKursart = new ZulaessigeKursart("UMPF", 57, "UMPF", "UMPF", "56", "Unterricht in der Herkunftssprache anstelle einer Pflichtfremdsprache oder eines Wahlpflichtfaches", "null", null, null, false, Arrays.asList("GE", "GM", "GY", "PS", "R", "S", "SG", "SK", "SR", "V"), Arrays.asList("R"));

	public static readonly VSU : ZulaessigeKursart = new ZulaessigeKursart("VSU", 58, "VSU", "VSU", "17", "Förderunterricht", "null", null, null, false, Arrays.asList("H", "V"), Arrays.asList("H", "H"));

	public static readonly VTF : ZulaessigeKursart = new ZulaessigeKursart("VTF", 59, "VTF", "VTF", "77", "Vertiefungsfach", "gemäß § 8, 11  APO - GOSt", "VTF", "Vertiefungskurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG", "WB"), null);

	public static readonly VUW : ZulaessigeKursart = new ZulaessigeKursart("VUW", 60, "VUW", "VUW", "21", "Vertiefungsunterricht Wahlbereich - berufsfeld- / berufsbezogener fachpraxisorientierter Kurs", "null", null, null, false, Arrays.asList("BK", "SB"), null);

	public static readonly WP : ZulaessigeKursart = new ZulaessigeKursart("WP", 61, "WP", "WP", "27", "Wahlpflichtbereich", "null", null, null, false, Arrays.asList("WB"), null);

	public static readonly WP1FS : ZulaessigeKursart = new ZulaessigeKursart("WP1FS", 62, "WP1FS", "WP1FS", "61", "Wahlpflichtbereich: Fremdsprachlich", "null", null, null, false, Arrays.asList("R", "SG", "SR"), Arrays.asList("GY", "GY", "R", "R", "R", "GY", "R"));

	public static readonly WP1MU : ZulaessigeKursart = new ZulaessigeKursart("WP1MU", 63, "WP1MU", "WP1MU", "64", "Wahlpflichtbereich: Musisch-künstlerisch", "null", null, null, false, Arrays.asList("R", "SR"), Arrays.asList("R", "R", "R", "R"));

	public static readonly WP1NT : ZulaessigeKursart = new ZulaessigeKursart("WP1NT", 64, "WP1NT", "WP1NT", "63", "Wahlpflichtbereich: Naturwissenschaftlich - technisch", "null", null, null, false, Arrays.asList("R", "SR"), Arrays.asList("R", "R", "R", "R"));

	public static readonly WP1SW : ZulaessigeKursart = new ZulaessigeKursart("WP1SW", 65, "WP1SW", "WP1SW", "62", "Wahlpflichtbereich: Sozialwissenschaftlich", "null", null, null, false, Arrays.asList("R", "SR"), Arrays.asList("GY", "R", "R", "R", "R"));

	public static readonly WP1WW : ZulaessigeKursart = new ZulaessigeKursart("WP1WW", 66, "WP1WW", "WP1WW", "68", "Wahlpflichtbereich: Wirtschaftlich", "null", null, null, false, Arrays.asList("R", "SR"), Arrays.asList("R", "R", "R", "R"));

	public static readonly WPF : ZulaessigeKursart = new ZulaessigeKursart("WPF", 67, "WPF", "WPF", "29", "Wahlpflichtfach", "null", null, null, false, Arrays.asList("H", "S", "V"), Arrays.asList("H", "H"));

	public static readonly WPI : ZulaessigeKursart = new ZulaessigeKursart("WPI", 68, "WPI", "WPI", "10", "Wahlpflichtbereich I", "null", null, null, false, Arrays.asList("GE", "GM", "PS", "SG", "SK"), null);

	public static readonly WPI_GY : ZulaessigeKursart = new ZulaessigeKursart("WPI_GY", 69, "WPI_GY", "WPI", "61", "Wahlpflichtbereich I: 2. Fremdsprache", "null", null, null, false, Arrays.asList("GY"), null);

	public static readonly WPII : ZulaessigeKursart = new ZulaessigeKursart("WPII", 70, "WPII", "WPII", "62", "Wahlpflichtbereich II - Fächerkombination im math.-naturwiss, gesellschaftswiss. oder künstlerischen Schwerpunkt", "null", null, null, false, Arrays.asList("GY", "SG"), Arrays.asList("GY", "GY"));

	public static readonly WPU : ZulaessigeKursart = new ZulaessigeKursart("WPU", 71, "WPU", "WPU", "26", "Wahlpflichtunterricht", "null", null, null, false, Arrays.asList("H", "S", "V"), Arrays.asList("H", "H", "H"));

	public static readonly ZK : ZulaessigeKursart = new ZulaessigeKursart("ZK", 72, "ZK", "ZK", "76", "Zusatzkurs", "gemäß § 12 APO-GOSt", "ZK", "Zusatzkurs", true, Arrays.asList("BK", "GE", "GM", "GY", "PS", "SB", "SG"), null);

	public static readonly ZUV : ZulaessigeKursart = new ZulaessigeKursart("ZUV", 73, "ZUV", "ZUV", "99", "zusätzliche Unterrichtsveranstaltung", "null", null, null, true, Arrays.asList("G", "GE", "GM", "GY", "H", "PS", "R", "S", "SG", "SK", "SR", "V"), null);

	private static readonly _kursarten : HashMap<String, ZulaessigeKursart> = new HashMap();

	private static readonly _kursartenASD : HashMap<String, ZulaessigeKursart> = new HashMap();

	public readonly ID : String;

	public readonly kuerzel : String;

	public readonly nummer : String;

	public readonly bezeichnung : String;

	public readonly bemerkungen : String | null;

	public readonly kuerzelAllg : String | null;

	public readonly bezeichnungAllg : String | null;

	public readonly erlaubtGOSt : boolean;

	public readonly schulformenKuerzel : List<String> | null;

	private schulformen : Vector<Schulform> | null = null;

	public readonly gliederungenKuerzel : List<String> | null;

	private gliederungen : Vector<Schulgliederung> | null = null;

	public readonly gueltigVon : Number | null;

	public readonly gueltigBis : Number | null;

	/**
	 * Erzeugt eine zulässige Kursart in der Aufzählung.
	 * 
	 * @param ID                    die eindeutige ID der Kursart - orientiert sich an der Bezeichnung der in 
	 *                              dem amtlichen Schulstatistik verwendeten Kursart, ist aber eindeutig
	 * @param kuerzel               das Kürzel der Kursart entsprechend der Vorgaben der amtlichen Schulstatistik
	 * @param nummer                die Nummer der Kursart entsprechend der Vorgaben der amtlichen Schulstatistik
	 * @param bezeichnung           die Bezeichnung der Kursart
	 * @param bemerkungen           ergänzende Bemerkungen zu der Kursart
	 * @param kuerzelAllg           das Kürzel einer verallgemeinerten Kursart, sofern diese angegeben ist
	 * @param bezeichnungAllg       die Bezeichnung der verallgemeinerter Kursart, sofern diese angegeben ist
	 * @param schulformenKuerzel    die Schulformen, für welche die Kursart gültig ist, sofern es für die Schulform nicht 
	 *                              auf einzelne Gliederungen eingeschränkt ist
	 * @param gliederungenKuerzel   die Schulgliederungen, bei den Schulformen, wo die Kursart nur bei einzelnen 
	 *                              Schulgliederungen zulässig ist. 
	 */
	private constructor(name : string, ordinal : number, ID : String, kuerzel : String, nummer : String, bezeichnung : String, bemerkungen : String | null, kuerzelAllg : String | null, bezeichnungAllg : String | null, erlaubtGOSt : boolean, schulformenKuerzel : List<String> | null, gliederungenKuerzel : List<String> | null) {
		super();
		this.__name = name;
		this.__ordinal = ordinal;
		ZulaessigeKursart.all_values_by_ordinal.push(this);
		ZulaessigeKursart.all_values_by_name.set(name, this);
		this.ID = ID;
		this.kuerzel = kuerzel;
		this.nummer = nummer;
		this.bezeichnung = bezeichnung;
		this.bemerkungen = bemerkungen;
		this.kuerzelAllg = kuerzelAllg;
		this.bezeichnungAllg = bezeichnungAllg;
		this.erlaubtGOSt = erlaubtGOSt;
		this.schulformenKuerzel = schulformenKuerzel;
		this.gliederungenKuerzel = gliederungenKuerzel;
		this.gueltigVon = null;
		this.gueltigBis = null;
	}

	/**
	 * Gibt eine Map von den IDs der Kursarten auf die zugehörigen Kursarten
	 * zurück. Sollte diese noch nicht initialisiert sein, so wird sie initielisiert.
	 *    
	 * @return die Map von den IDs der Kursarten auf die zugehörigen Kursarten
	 */
	private static getMapKursartenByID() : HashMap<String, ZulaessigeKursart> {
		if (ZulaessigeKursart._kursarten.size() === 0) 
			for (let s of ZulaessigeKursart.values()) 
				ZulaessigeKursart._kursarten.put(s.ID, s);
		return ZulaessigeKursart._kursarten;
	}

	/**
	 * Gibt eine Map von den Kürzeln der Kursarten auf die zugehörigen Kursarten
	 * zurück. Sollte diese noch nicht initialisiert sein, so wird sie initielisiert.
	 *    
	 * @return die Map von den Kürzeln der Kursarten auf die zugehörigen Kursarten
	 */
	private static getMapKursartenByKuerzel() : HashMap<String, ZulaessigeKursart> {
		if (ZulaessigeKursart._kursartenASD.size() === 0) 
			for (let s of ZulaessigeKursart.values()) 
				ZulaessigeKursart._kursartenASD.put(s.kuerzel, s);
		return ZulaessigeKursart._kursartenASD;
	}

	/**
	 * Prüft, ob die Schulform bei dieser Kursart in irgendeiner Gliederung der 
	 * angegebenen Schulform zulässig ist.
	 * 
	 * @param schulform    die Schulform
	 * 
	 * @return true, falls die Kursart in der Schulform zulässig ist, ansonsten false.
	 */
	private hasSchulform(schulform : Schulform | null) : boolean {
		if (schulform === null) 
			return false;
		if (this.schulformenKuerzel !== null) {
			for (let sf of this.schulformenKuerzel) {
				if (JavaObject.equalsTranspiler(sf, (schulform.kuerzel))) 
					return true;
			}
		}
		if (this.gliederungenKuerzel !== null) {
			for (let glKuerzel of this.gliederungenKuerzel) {
				let gl : Schulgliederung | null = Schulgliederung.getByKuerzel(glKuerzel);
				if ((gl !== null) && (gl.hasSchulformByKuerzel(schulform.kuerzel))) 
					return true;
			}
		}
		return false;
	}

	/**
	 * Bestimmt alle Kursarten, die in irgendeiner Gliederung der angegebenen Schulform
	 * zulässig sind.
	 *  
	 * @param schulform    die Schulform
	 * 
	 * @return die zulässigen Kursarten in der angegebenen Schulform
	 */
	public static get(schulform : Schulform | null) : List<ZulaessigeKursart> {
		let kursarten : Vector<ZulaessigeKursart> = new Vector();
		if (schulform === null) 
			return kursarten;
		for (let kursart of ZulaessigeKursart.values()) 
			if (kursart.hasSchulform(schulform)) 
				kursarten.add(kursart);
		return kursarten;
	}

	/**
	 * Liefert alle Schulformen zurück, für welche die Kursart gültig ist, sofern sie für 
	 * die Schulform nicht auf einzelne Gliederungen eingeschränkt ist.
	 * 
	 * @return eine Liste der Schulformen
	 */
	public getSchulformen() : List<Schulform> {
		if (this.schulformen === null) {
			this.schulformen = new Vector();
			if (this.schulformenKuerzel !== null) {
				for (let sfKuerzel of this.schulformenKuerzel) {
					let schulform : Schulform | null = Schulform.getByKuerzel(sfKuerzel);
					if (schulform !== null) 
						this.schulformen.add(schulform);
				}
			}
		}
		return this.schulformen;
	}

	/**
	 * Liefert die Schulgliederungen, bei den Schulformen, wo die Kursart nur bei 
	 * einzelnen Schulgliederungen zulässig ist, zurück.
	 * 
	 * @return eine Liste der Schulgliederungen
	 */
	public getGliederungen() : List<Schulgliederung> {
		if (this.gliederungen === null) {
			this.gliederungen = new Vector();
			if (this.gliederungenKuerzel !== null) {
				for (let sgKuerzel of this.gliederungenKuerzel) {
					let gliederung : Schulgliederung | null = Schulgliederung.getByKuerzel(sgKuerzel);
					if (gliederung !== null) 
						this.gliederungen.add(gliederung);
				}
			}
		}
		return this.gliederungen;
	}

	/**
	 * Bestimmt anhand des nicht unbedingt eindeutigen (!) Statistik-Kürzels, die
	 * zuläsige Kursart. 
	 * 
	 * @param kursart   das nicht unbedingt eindeutige Statistik-Kürzel
	 * 
	 * @return die Kursart oder null, wenn keine Zuordnung für das übergebene Kürzel vorhanden ist
	 */
	public static getByASDKursart(kursart : String | null) : ZulaessigeKursart | null {
		return ZulaessigeKursart.getMapKursartenByKuerzel().get(kursart);
	}

	/**
	 * Returns the name of this enumeration value.
	 *
	 * @returns the name
	 */
	private name() : String {
		return this.__name;
	}

	/**
	 * Returns the ordinal value of this enumeration value.
	 *
	 * @returns the ordinal value
	 */
	private ordinal() : number {
		return this.__ordinal;
	}

	/**
	 * Returns the name of this enumeration value.
	 *
	 * @returns the name
	 */
	public toString() : String {
		return this.__name;
	}

	/**
	 * Returns true if this and the other enumeration values are equal.
	 *
	 * @param other   the other enumeration value
	 *
	 * @returns true if they are equal and false otherwise
	 */
	public equals(other : JavaObject) : boolean {
		if (!(other instanceof ZulaessigeKursart))
			return false;
		return this === other;
	}

	/**
	 * Returns the ordinal value as hashcode, since the ordinal value is unique.
	 *
	 * @returns the ordinal value as hashcode
	 */
	public hashCode() : number {
		return this.__ordinal;
	}

	/**
	 * Compares this enumeration value with the other enumeration value by their ordinal value.
	 *
	 * @param other   the other enumeration value
	 *
	 * @returns a negative, zero or postive value as this enumeration value is less than, equal to
	 *          or greater than the other enumeration value
	 */
	public compareTo(other : ZulaessigeKursart) : number {
		return this.__ordinal - other.__ordinal;
	}

	/**
	 * Returns an array with enumeration values.
	 *
	 * @returns the array with enumeration values
	 */
	public static values() : Array<ZulaessigeKursart> {
		return [...this.all_values_by_ordinal];
	}

	/**
	 * Returns the enumeration value with the specified name.
	 *
	 * @param name   the name of the enumeration value
	 *
	 * @returns the enumeration values or null
	 */
	public static valueOf(name : String) : ZulaessigeKursart | null {
		let tmp : ZulaessigeKursart | undefined = this.all_values_by_name.get(name);
		return (!tmp) ? null : tmp;
	}

	isTranspiledInstanceOf(name : string): boolean {
		return ['de.nrw.schule.svws.core.types.statkue.ZulaessigeKursart'].includes(name);
	}

}

export function cast_de_nrw_schule_svws_core_types_statkue_ZulaessigeKursart(obj : unknown) : ZulaessigeKursart {
	return obj as ZulaessigeKursart;
}
