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 { 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 Schulgliederung 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<Schulgliederung> = [];

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

	public static readonly DEFAULT : Schulgliederung = new Schulgliederung("DEFAULT", 0, "***", false, Arrays.asList("FW", "G", "GE", "GY", "H", "PS", "R", "SG", "SK", "SR", "V"), false, false, "Standard für diese Schulform", null, null, null, false, null, null);

	public static readonly A01 : Schulgliederung = new Schulgliederung("A01", 1, "A01", true, Arrays.asList("BK", "SB"), false, false, "Fachklassen (BS; TZ)", "A", "01", 10, false, "BS", null);

	public static readonly A02 : Schulgliederung = new Schulgliederung("A02", 2, "A02", true, Arrays.asList("BK", "SB"), false, false, "Fachklassen/Fachhochschulreife (BS/FHR; TZ)", "A", "02", 10, false, "BS", "FHR");

	public static readonly A03 : Schulgliederung = new Schulgliederung("A03", 3, "A03", true, Arrays.asList("BK", "SB"), false, false, "Fachklassen/erweiterte Zusatzqualifikation (BS/ZQ; TZ)", "A", "03", 10, false, "BS", null);

	public static readonly A04 : Schulgliederung = new Schulgliederung("A04", 4, "A04", true, Arrays.asList("BK", "SB"), false, false, "Fachklassen mit erweitertem Stützunterricht (BS/Stütz; TZ)", "A", "04", 10, false, "BS", null);

	public static readonly A05 : Schulgliederung = new Schulgliederung("A05", 5, "A05", true, Arrays.asList("BK", "SB"), true, true, "Berufsorientierungsjahr (BV; VZ)", "A", "05", 20, true, "BV", null);

	public static readonly A06 : Schulgliederung = new Schulgliederung("A06", 6, "A06", true, Arrays.asList("BK", "SB"), true, true, "Berufsgrundschuljahr (BG; VZ)", "A", "06", 30, true, "BG", null);

	public static readonly A07 : Schulgliederung = new Schulgliederung("A07", 7, "A07", true, Arrays.asList("BK", "SB"), true, true, "Klassen für Schüler/innen ohne Ausbildungsverhältnis (BS 1j; TZ) bzw. Werkstattjahr (BS 1j;TZ)", "A", "07", 40, false, "BS", null);

	public static readonly A08 : Schulgliederung = new Schulgliederung("A08", 8, "A08", true, Arrays.asList("BK", "SB"), true, true, "Vorpraktikum (VP)", "A", "08", 50, false, "VP", null);

	public static readonly A09 : Schulgliederung = new Schulgliederung("A09", 9, "A09", true, Arrays.asList("BK", "SB"), true, true, "Klassen für Schüler/innen ohne Ausbildungsverhältnis (BS 1j; VZ)", "A", "09", 55, true, "BS", null);

	public static readonly A10 : Schulgliederung = new Schulgliederung("A10", 10, "A10", true, Arrays.asList("BK", "SB"), true, false, "Berufsabschluss/mittlerer Schulabschluss (BKAZVO) (BAB/FOR; VZ)", "A", "10", 56, true, "BAB", "FOR");

	public static readonly A11 : Schulgliederung = new Schulgliederung("A11", 11, "A11", true, Arrays.asList("BK", "SB"), true, false, "Berufsabschluss/Fachhochschulreife (BKAZVO) (BAB/FHR; VZ)", "A", "11", 56, true, "BAB", "FHR");

	public static readonly A12 : Schulgliederung = new Schulgliederung("A12", 12, "A12", true, Arrays.asList("BK", "SB"), false, false, "Ausbildungsvorbereitung (BS 1j; VZ)", "A", "12", 57, true, "BS", null);

	public static readonly A13 : Schulgliederung = new Schulgliederung("A13", 13, "A13", true, Arrays.asList("BK", "SB"), false, false, "Ausbildungsvorbereitung (BS 1j; TZ)", "A", "13", 58, false, "BS", null);

	public static readonly A14 : Schulgliederung = new Schulgliederung("A14", 14, "A14", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschluss (nach §50 BBiG/§40 HwO)/mittlerer Schulabschluss (BAB/FOR; VZ)", "A", "14", 59, true, "BAB", "FOR");

	public static readonly A15 : Schulgliederung = new Schulgliederung("A15", 15, "A15", true, Arrays.asList("BK"), false, false, "Berufsabschluss (nach §50 BBiG/§40 HwO)/Fachhochschulreife BAB/FHR; VZ", "A", "15", 59, true, "BAB", "FHR");

	public static readonly A16 : Schulgliederung = new Schulgliederung("A16", 16, "A16", true, Arrays.asList("BK", "SB"), false, false, "Fachklassen (nach §2 BKAZVO) BAB; VZ", "A", "16", 59, true, "BAB", null);

	public static readonly AB : Schulgliederung = new Schulgliederung("AB", 17, "AB", false, Arrays.asList("FW", "S"), false, false, "Schule für Kranke: Allgemeinbildend", null, null, null, false, null, null);

	public static readonly B01 : Schulgliederung = new Schulgliederung("B01", 18, "B01", true, Arrays.asList("BK", "SB"), true, true, "Berufsabschluss/Fachoberschulreife (BAB/FOR 2j; VZ)", "B", "01", 60, true, "BAB", "FOR");

	public static readonly B02 : Schulgliederung = new Schulgliederung("B02", 19, "B02", true, Arrays.asList("BK", "SB"), true, true, "Berufsgrundbildung/Fachoberschulreife (BG/FOR 2j; VZ)", "B", "02", 70, true, "BG", "FOR");

	public static readonly B03 : Schulgliederung = new Schulgliederung("B03", 20, "B03", true, Arrays.asList("BK", "SB"), true, true, "Berufsgrundbildung (für Schüler mit FOR) (BG 1j; VZ)", "B", "03", 80, true, "BG", null);

	public static readonly B04 : Schulgliederung = new Schulgliederung("B04", 21, "B04", true, Arrays.asList("BK", "SB"), true, true, "Berufsabschluss/Fachoberschulreife (BAB/FOR; VZ)", "B", "04", 90, true, "BAB", "FOR");

	public static readonly B05 : Schulgliederung = new Schulgliederung("B05", 22, "B05", true, Arrays.asList("BK", "SB"), true, true, "Berufsabschluss/Fachhochschulreife (BAB/FHR; VZ)", "B", "05", 90, true, "BAB", "FHR");

	public static readonly B06 : Schulgliederung = new Schulgliederung("B06", 23, "B06", true, Arrays.asList("BK", "SB"), false, false, "Berufliche Kenntnisse/Hauptschulabschluss Kl. 10 (BK/HSA10; 1j. VZ)", "B", "06", 91, true, "BK", "HA10");

	public static readonly B07 : Schulgliederung = new Schulgliederung("B07", 24, "B07", true, Arrays.asList("BK", "SB"), false, false, "Berufliche Kenntnisse/mittlerer Schulabschluss (BK/FOR; 1j. VZ)", "B", "07", 92, true, "BK", "FOR");

	public static readonly B08 : Schulgliederung = new Schulgliederung("B08", 25, "B08", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschl./Hauptschulab.Kl. 10 oder mittl. Schulab. (BAB/HSA10-FOR, 2j. VZ)", "B", "08", 93, true, "BAB", "HA10,FOR");

	public static readonly B09 : Schulgliederung = new Schulgliederung("B09", 26, "B09", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschl./Hauptschulab.Kl. 10 oder mittl. Schulab. (BAB/HSA10-FOR, 3j. TZ)", "B", "09", 93, false, "BAB", "HA10,FOR");

	public static readonly B10 : Schulgliederung = new Schulgliederung("B10", 27, "B10", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschl./Hauptschulab.Kl. 10 oder mittl. Schulab. (BAB/HSA10-FOR, 4j. TZ)", "B", "10", 93, false, "BAB", "HA10,FOR");

	public static readonly BT : Schulgliederung = new Schulgliederung("BT", 28, "BT", false, Arrays.asList("FW", "S"), false, false, "Schule für Kranke: Berufsbildend (Teilzeit)", null, null, null, false, null, null);

	public static readonly BV : Schulgliederung = new Schulgliederung("BV", 29, "BV", false, Arrays.asList("FW", "S"), false, false, "Schule für Kranke: Berufsbildend (Vollzeit)", null, null, null, true, null, null);

	public static readonly C01 : Schulgliederung = new Schulgliederung("C01", 30, "C01", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschluss/Fachhochschulreife (ohne Berufspraktikum) BAB/FHR 3j; VZ BFS", "C", "01", 100, true, "BAB", "FHR");

	public static readonly C02 : Schulgliederung = new Schulgliederung("C02", 31, "C02", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschluss f. Hochschulzugangsberechtigte (BAB 2j; VZ) BFS", "C", "02", 110, true, "BAB", null);

	public static readonly C03 : Schulgliederung = new Schulgliederung("C03", 32, "C03", true, Arrays.asList("BK", "SB"), false, false, "Berufliche Kenntnisse/FHR (BK/FHR 2j; VZ) HBFS", "C", "03", 120, true, "BK", null);

	public static readonly C04 : Schulgliederung = new Schulgliederung("C04", 33, "C04", true, Arrays.asList("BK", "SB"), true, true, "Berufliche Kenntnisse/Sonderform für Abiturienten (BK 1j; VZ) HBFS", "C", "04", 130, true, "BK", null);

	public static readonly C05 : Schulgliederung = new Schulgliederung("C05", 34, "C05", true, Arrays.asList("BK", "SB"), false, false, "Fachoberschule Kl. 11 (BK/FHR 1j; TZ)", "C", "05", 140, false, "BK", "FHR");

	public static readonly C06 : Schulgliederung = new Schulgliederung("C06", 35, "C06", true, Arrays.asList("BK", "SB"), false, false, "Fachoberschule Kl. 12S (BK/FHR 1j; VZ)", "C", "06", 140, true, "BK", "FHR");

	public static readonly C07 : Schulgliederung = new Schulgliederung("C07", 36, "C07", true, Arrays.asList("BK", "SB"), false, false, "Fachoberschule Kl. 12B (BK/FHR 2j; TZ)", "C", "07", 140, false, "BK", "FHR");

	public static readonly C08 : Schulgliederung = new Schulgliederung("C08", 37, "C08", true, Arrays.asList("BK", "SB"), false, false, "Fachoberschule Kl. 12B (BK/FHR 1j; VZ)", "C", "08", 140, true, "BK", "FHR");

	public static readonly C09 : Schulgliederung = new Schulgliederung("C09", 38, "C09", true, Arrays.asList("BK", "SB"), true, true, "Berufspraktikum Erzieher/innen (Vollzeit) (BP/Erz 1j; VZ)", "C", "09", 150, true, "BP", null);

	public static readonly C10 : Schulgliederung = new Schulgliederung("C10", 39, "C10", true, Arrays.asList("BK", "SB"), true, true, "Berufspraktikum Erzieher/innen (Teilzeit) (BP/Erz 2j; TZ)", "C", "10", 150, false, "BP", null);

	public static readonly C11 : Schulgliederung = new Schulgliederung("C11", 40, "C11", true, Arrays.asList("BK", "SB"), false, false, "Fachoberschule Kl. 12B (BK/FHR 3j; TZ)", "C", "11", 141, false, "BK", "FHR");

	public static readonly C12 : Schulgliederung = new Schulgliederung("C12", 41, "C12", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschluss/Fachhochschulreife (mit  Berufspraktikum) BAB/FHR 3,5j; VZ", "C", "12", 145, true, "BAB", "FHR");

	public static readonly C13 : Schulgliederung = new Schulgliederung("C13", 42, "C13", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschluss/Fachhochschulreife (gestuft) (BAB/FHR 3j; VZ)", "C", "13", 146, true, "BAB", "FHR");

	public static readonly D01 : Schulgliederung = new Schulgliederung("D01", 43, "D01", true, Arrays.asList("BK", "SB"), false, false, "Berufsabschluss/Allg. Hochschulreife (mit Berufspraktikum) (BAB/AHR 4j; VZ)", "D", "01", 160, true, "BAB", "AHR");

	public static readonly D02 : Schulgliederung = new Schulgliederung("D02", 44, "D02", true, Arrays.asList("BK", "SB"), false, false, "Berufl. Kenntnisse/Allg. Hochschulreife (BK/AHR 3j; VZ)", "D", "02", 170, true, "BAB", "AHR");

	public static readonly D03 : Schulgliederung = new Schulgliederung("D03", 45, "D03", true, Arrays.asList("BK", "SB"), true, true, "Berufspraktikum (Vollzeit) (BP 1j; VZ)", "D", "03", 180, true, "BP", null);

	public static readonly D04 : Schulgliederung = new Schulgliederung("D04", 46, "D04", true, Arrays.asList("BK", "SB"), true, true, "Berufspraktikum Erzieher/innen (Teilzeit) (BP/Erz 2j; TZ)", "D", "04", 190, false, "BP", null);

	public static readonly D05 : Schulgliederung = new Schulgliederung("D05", 47, "D05", true, Arrays.asList("BK", "SB"), false, false, "AHR (gem. § 2 Abs. 3 Anlage D) (AHR 1j; VZ) FOS13", "D", "05", 200, true, null, "AHR");

	public static readonly D06 : Schulgliederung = new Schulgliederung("D06", 48, "D06", true, Arrays.asList("BK", "SB"), false, false, "AHR (gem. § 2 Abs. 3 Anlage D) (AHR 2j; TZ) FOS13", "D", "06", 200, true, null, "AHR");

	public static readonly E01 : Schulgliederung = new Schulgliederung("E01", 49, "E01", true, Arrays.asList("BK"), false, false, "Fachschule Vollzeit (BW 2j; VZ)", "E", "01", 210, true, "BW", null);

	public static readonly E02 : Schulgliederung = new Schulgliederung("E02", 50, "E02", true, Arrays.asList("BK", "SB"), false, false, "Fachschule Teilzeit (BW 4j; TZ)", "E", "02", 210, false, "BW", null);

	public static readonly E03 : Schulgliederung = new Schulgliederung("E03", 51, "E03", true, Arrays.asList("BK"), false, false, "Fachschule (verkürzt) Vollzeit (BW 1j; VZ)", "E", "03", 220, true, "BW", null);

	public static readonly E04 : Schulgliederung = new Schulgliederung("E04", 52, "E04", true, Arrays.asList("BK"), false, false, "Fachschule (verkürzt) Teilzeit (BW 2j; TZ)", "E", "04", 220, false, "BW", null);

	public static readonly E05 : Schulgliederung = new Schulgliederung("E05", 53, "E05", true, Arrays.asList("BK"), false, false, "Fachschule für Sozialwesen (mit Berufspraktikum) (BAB 3j; VZ)", "E", "05", 230, true, "BAB", null);

	public static readonly E06 : Schulgliederung = new Schulgliederung("E06", 54, "E06", true, Arrays.asList("BK", "SB"), true, true, "Fachschule für Sozialpädagogik / Heilerziehungspflege (Praxis) (BAB/FP 1j; VZ)", "E", "06", 240, true, "BAB", null);

	public static readonly E07 : Schulgliederung = new Schulgliederung("E07", 55, "E07", true, Arrays.asList("BK"), false, false, "Fachschule für Sozialwesen (mit Berufspraktikum) (BAB 6j; TZ)", "E", "07", 230, false, "BAB", null);

	public static readonly E08 : Schulgliederung = new Schulgliederung("E08", 56, "E08", true, Arrays.asList("BK", "SB"), true, true, "Fachschule für Sozialpädagogik / Heilerziehungspflege (Praxis) (BAB/FP 2j; TZ)", "E", "08", 240, false, "BAB", null);

	public static readonly E09 : Schulgliederung = new Schulgliederung("E09", 57, "E09", true, Arrays.asList("BK", "SB"), true, true, "Fachschule (Sonderform) Vollzeit (BW 3j; VZ)", "E", "09", 250, true, "BW", null);

	public static readonly E10 : Schulgliederung = new Schulgliederung("E10", 58, "E10", true, Arrays.asList("BK", "SB"), true, true, "Fachschule (Sonderform) Teilzeit (BW 6j; TZ)", "E", "10", 260, false, "BW", null);

	public static readonly E11 : Schulgliederung = new Schulgliederung("E11", 59, "E11", true, Arrays.asList("BK", "SB"), true, true, "Berufspraktikum Erzieher/innen (FS/BP/Erz 1j; VZ)", "E", "11", 270, true, "BP", null);

	public static readonly E12 : Schulgliederung = new Schulgliederung("E12", 60, "E12", true, Arrays.asList("BK", "SB"), true, true, "Berufspraktikum Erzieher/innen (FS/BP/Erz 2j; TZ)", "E", "12", 270, false, "BP", null);

	public static readonly E13 : Schulgliederung = new Schulgliederung("E13", 61, "E13", true, Arrays.asList("BK"), false, false, "Fachschule Teilzeit (BW 3j; TZ)", "E", "13", 210, true, "BW", null);

	public static readonly ER : Schulgliederung = new Schulgliederung("ER", 62, "ER", false, Arrays.asList("SK"), false, false, "kooperative Form: Erweiterungsebene", null, null, null, false, null, null);

	public static readonly EVB : Schulgliederung = new Schulgliederung("EVB", 63, "EVB", false, Arrays.asList("G"), false, false, "Evangelische Bekenntnisschule", null, null, null, false, null, null);

	public static readonly G01 : Schulgliederung = new Schulgliederung("G01", 64, "G01", false, Arrays.asList("GY"), false, false, "Aufbaugymnasium", null, null, null, false, null, null);

	public static readonly G02 : Schulgliederung = new Schulgliederung("G02", 65, "G02", false, Arrays.asList("WB"), false, false, "Bildungsgang Abendgymnasium", null, null, null, false, null, null);

	public static readonly GGS : Schulgliederung = new Schulgliederung("GGS", 66, "GGS", false, Arrays.asList("GE"), true, false, "Gemeinschaftsschule (auslaufend) integrierte Form", null, null, null, false, null, null);

	public static readonly GGY : Schulgliederung = new Schulgliederung("GGY", 67, "GGY", false, Arrays.asList("GE"), true, false, "Gemeinschaftsschule (auslaufend) Gymnasialbildungsgang", null, null, null, false, null, null);

	public static readonly GMS : Schulgliederung = new Schulgliederung("GMS", 68, "GMS", false, Arrays.asList("G"), false, false, "Gemeinschaftsschule", null, null, null, false, null, null);

	public static readonly GR : Schulgliederung = new Schulgliederung("GR", 69, "GR", false, Arrays.asList("GE", "SK"), false, false, "kooperative Form: Grundebene", null, null, null, false, null, null);

	public static readonly GRH : Schulgliederung = new Schulgliederung("GRH", 70, "GRH", false, Arrays.asList("GE"), true, false, "Gemeinschaftsschule auslaufend: teilintegrierte Form", null, null, null, false, null, null);

	public static readonly GS : Schulgliederung = new Schulgliederung("GS", 71, "GS", false, Arrays.asList("GM"), false, false, "integrierte Form (Binnendifferenzierung)", null, null, null, false, null, null);

	public static readonly GY : Schulgliederung = new Schulgliederung("GY", 72, "GY", false, Arrays.asList("GE", "GM", "SK"), false, false, "Bildungsgang Gymnasium", null, null, null, false, null, null);

	public static readonly GY8 : Schulgliederung = new Schulgliederung("GY8", 73, "GY8", false, Arrays.asList("GE", "GY"), false, false, "Bildungsgang G8-Gymnasium", null, null, null, false, null, null);

	public static readonly GY9 : Schulgliederung = new Schulgliederung("GY9", 74, "GY9", false, Arrays.asList("GE", "GY"), false, false, "Bildungsgang G9-Gymnasium", null, null, null, false, null, null);

	public static readonly H : Schulgliederung = new Schulgliederung("H", 75, "H", false, Arrays.asList("GM", "R", "SK"), false, false, "Bildungsgang Hauptschule", null, "  ", null, false, null, null);

	public static readonly H01 : Schulgliederung = new Schulgliederung("H01", 76, "H01", false, Arrays.asList("FW"), false, false, "Berufsgrundbildung (Jahrgang 07 bis 10)", "H", "01", 980, false, null, null);

	public static readonly H02 : Schulgliederung = new Schulgliederung("H02", 77, "H02", false, Arrays.asList("FW"), false, false, "Berufsausbildung (Jahrgang 11 und 12)", "H", "02", 940, false, null, null);

	public static readonly K02 : Schulgliederung = new Schulgliederung("K02", 78, "K02", false, Arrays.asList("FW", "WB"), false, false, "Bildungsgang Kolleg", null, null, null, false, null, null);

	public static readonly R : Schulgliederung = new Schulgliederung("R", 79, "R", false, Arrays.asList("GM", "H", "SK"), false, false, "Bildungsgang Realschule", "R", "  ", null, false, null, null);

	public static readonly R00 : Schulgliederung = new Schulgliederung("R00", 80, "R00", false, Arrays.asList("S"), false, false, "Realschule", "R", "00", null, false, null, null);

	public static readonly R01 : Schulgliederung = new Schulgliederung("R01", 81, "R01", false, Arrays.asList("R"), false, false, "Aufbaurealschule", "R", "01", null, false, null, null);

	public static readonly R02 : Schulgliederung = new Schulgliederung("R02", 82, "R02", false, Arrays.asList("WB"), false, false, "Bildungsgang Abendrealschule", "R", "02", null, false, null, null);

	public static readonly RH : Schulgliederung = new Schulgliederung("RH", 83, "RH", false, Arrays.asList("GE", "GM", "SK"), false, false, "teilintegrierte Form", "R", "H", null, false, null, null);

	public static readonly RKB : Schulgliederung = new Schulgliederung("RKB", 84, "RKB", false, Arrays.asList("G"), false, false, "Katholische  Bekenntnisschule", null, null, null, false, null, null);

	public static readonly SRH : Schulgliederung = new Schulgliederung("SRH", 85, "SRH", false, Arrays.asList("GE"), true, false, "Sekundarschule, teilintegrierte Form (auslaufend)", "S", "RH", null, false, null, null);

	public static readonly SSI : Schulgliederung = new Schulgliederung("SSI", 86, "SSI", false, Arrays.asList("GE"), true, false, "Sekundarschule, integrierte Form (auslaufend)", "S", "SI", null, false, null, null);

	public static readonly X01 : Schulgliederung = new Schulgliederung("X01", 87, "X01", true, Arrays.asList("BK", "SB"), true, true, "Allgemeine Hochschulreife (ausgelaufen) (AHR 3j; VZ)", "X", "01", 280, true, null, "AHR");

	public static readonly X02 : Schulgliederung = new Schulgliederung("X02", 88, "X02", true, Arrays.asList("BK", "SB"), true, true, "Fachhochschulreife (ausgelaufen) (FHR 2j; VZ)", "X", "02", 290, true, null, "FHR");

	public static readonly X03 : Schulgliederung = new Schulgliederung("X03", 89, "X03", true, Arrays.asList("BK", "SB"), true, true, "Fachhochschulreife (ausgelaufen) (FHR 3j; TZ)", "X", "03", 300, false, null, "FHR");

	public static readonly X04 : Schulgliederung = new Schulgliederung("X04", 90, "X04", true, Arrays.asList("BK", "SB"), true, true, "Berufspraktikum Fremdsprachenassistent (ausgelaufen) (BP/FAss 1j; TZ)", "X", "04", 310, false, "BP", null);

	public static readonly X05 : Schulgliederung = new Schulgliederung("X05", 91, "X05", true, Arrays.asList("BK", "SB"), true, true, "Berufsabschluss/Assistent (ausgelaufen) (BAB/Ass 3j; TZ)", "X", "05", 320, false, "BAB", null);

	public static readonly X06 : Schulgliederung = new Schulgliederung("X06", 92, "X06", true, Arrays.asList("BK", "SB"), true, true, "Berufsabschluss und Allgemeine Hochschulreife (ausgelaufen) (BAB/AHR 3j; VZ)", "X", "06", 330, true, "BAB", "AHR");

	public static readonly X07 : Schulgliederung = new Schulgliederung("X07", 93, "X07", true, Arrays.asList("BK", "SB"), true, true, "Berufsabschluss und Fachoberschulreife (ausgelaufen) (BAB/FOR 3j; VZ)", "X", "07", 340, true, "BAB", "FOR");

	public static readonly X08 : Schulgliederung = new Schulgliederung("X08", 94, "X08", true, Arrays.asList("BK", "SB"), true, true, "Berufsabschluss mit Zusatzqualifikation (ausgelaufen) (BAB/ZQ 3j; VZ)", "X", "08", 350, true, "BAB", null);

	public static readonly Y8 : Schulgliederung = new Schulgliederung("Y8", 95, "Y8", false, Arrays.asList("GE"), false, false, "Lehrplan G8", null, null, null, false, null, null);

	public static readonly Z01 : Schulgliederung = new Schulgliederung("Z01", 96, "Z01", true, Arrays.asList("BK", "SB"), false, false, "Kooperationsklasse Hauptschule (HS 2j; VZ)", "Z", "01", 370, true, null, null);

	private static readonly _map : HashMap<String, Schulgliederung> = new HashMap();

	public readonly id : String;

	public readonly istBK : boolean;

	public readonly schulformenKuerzel : List<String>;

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

	public readonly istAuslaufend : boolean;

	public readonly istAusgelaufen : boolean;

	public readonly beschreibung : String;

	public readonly bkAnlage : String | null;

	public readonly bkTyp : String | null;

	public readonly bkIndex : Number | null;

	public readonly istVZ : boolean;

	public readonly bkAbschlussBerufsbildend : String | null;

	public readonly bkAbschlussAllgemeinbildend : String | null;

	public readonly gueltigVon : Number | null;

	public readonly gueltigBis : Number | null;

	/**
	 * Erzeugt eine neue Schulgliederung in der Aufzählung.
	 * 
	 * @param id                            die eindeutige id der Schulgliederung
	 * @param istBK                         gibt an, ob es sich um einen Bildungsgang am Berufskolleg handelt
	 * @param schulformenKuerzel            die Kürzel der Schulformen, bei welchen die Schulgliederung vorkommt
	 * @param istAuslaufend                 gibt an, ob es sich um eine auslaufende Schulgliederung oder einen ausgelaufenden Bildungsgang handelt
	 * @param istAusgelaufen                gibt an, ob es sich um eine ausgelaufene Schulgliederung oder einen ausgelaufenen Bildungsgang handelt
	 * @param beschreibung                  die textuelle Beschreibung der Schulgliederung bzw. des Bildungsganges
	 * @param bkAnlage                      die Anlage, wenn es sich um einen Bildungsgang am Berufskolleg handelt
	 * @param bkTyp                         der Typ der Anlage, wenn es sich um einen Bildungsgang am Berufskolleg handelt
	 * @param bkIndex                       der Index für den Zugriff auf die Fachklassen am Berufskolleg. Dieser kann bei 
	 *                                      unterschiedlichen Gliederungen identisch sein.
	 * @param istVZ                         gibt an, ob es sich um einen Bildungsgang in Vollzeit handelt oder nicht
	 * @param bkAbschlussBerufsbildend      gibt den berufsbildenden Abschluss an, der in diesem Bildungsgang erreicht werden 
	 *                                      kann, wenn es sich um einen Bildungsgang am Berufskolleg handelt.
	 * @param bkAbschlussAllgemeinbildend   gibt den allgemeinbildenden Abschluss an, der in diesem Bildungsgang erreicht 
	 *                                      werden kann, wenn es sich um einen Bildungsgang am Berufskolleg handelt. 
	 *                                      Die Angabe ggf. mehrere Abschlüsse beinhalten, wenn im Rahmen des Bildungsganges 
	 *                                      mehrere Abschlüsse möglich sind.
	 */
	private constructor(name : string, ordinal : number, id : String, istBK : boolean, schulformenKuerzel : List<String>, istAuslaufend : boolean, istAusgelaufen : boolean, beschreibung : String, bkAnlage : String | null, bkTyp : String | null, bkIndex : Number | null, istVZ : boolean, bkAbschlussBerufsbildend : String | null, bkAbschlussAllgemeinbildend : String | null) {
		super();
		this.__name = name;
		this.__ordinal = ordinal;
		Schulgliederung.all_values_by_ordinal.push(this);
		Schulgliederung.all_values_by_name.set(name, this);
		this.id = id;
		this.istBK = istBK;
		this.schulformenKuerzel = schulformenKuerzel;
		this.istAuslaufend = istAuslaufend;
		this.istAusgelaufen = istAusgelaufen;
		this.beschreibung = beschreibung;
		this.bkAnlage = bkAnlage;
		this.bkTyp = bkTyp;
		this.bkIndex = bkIndex;
		this.istVZ = istVZ;
		this.bkAbschlussBerufsbildend = bkAbschlussBerufsbildend;
		this.bkAbschlussAllgemeinbildend = bkAbschlussAllgemeinbildend;
		this.gueltigVon = null;
		this.gueltigBis = null;
	}

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

	/**
	 * Liefert die Schulgliederung anhand des übergebenen Kürzels zurpck. 
	 * 
	 * @param kuerzel   das Kürzel der Schulgliederung
	 * 
	 * @return die Schulgliederung oder null, falls das Kürzel ungültig ist
	 */
	public static getByKuerzel(kuerzel : String | null) : Schulgliederung | null {
		return Schulgliederung.getMapSchulgliederungByKuerzel().get(kuerzel);
	}

	/**
	 * Liefert alle Schulformen zurück, bei welchen die Schulgliederung vorkommt.
	 * 
	 * @return eine Liste der Schulformen
	 */
	public getSchulformen() : List<Schulform> {
		if (this.schulformen === null) {
			this.schulformen = new Vector();
			for (let i : number = 0; i < this.schulformenKuerzel.size(); i++){
				let sfKuerzel : String | null = this.schulformenKuerzel.get(i);
				let schulform : Schulform | null = Schulform.getByKuerzel(sfKuerzel);
				if (schulform !== null) 
					this.schulformen.add(schulform);
			}
		}
		return this.schulformen;
	}

	/**
	 * Liefert alle zulässigen Gliederungen für die angegeben Schulform.
	 * 
	 * @param schulform   die Schulform
	 * 
	 * @return die bei der Schulform zulässigen Gliederungen
	 */
	public static get(schulform : Schulform | null) : List<Schulgliederung> {
		let result : Vector<Schulgliederung> = new Vector();
		if (schulform === null) 
			return result;
		let gliederungen : Array<Schulgliederung> = Schulgliederung.values();
		for (let i : number = 0; i < gliederungen.length; i++){
			let gliederung : Schulgliederung = gliederungen[i];
			if (gliederung.hasSchulform(schulform)) 
				result.add(gliederung);
		}
		return result;
	}

	/**
	 * Prüft anhand des Schulform-Kürzels, ob die Schulform diese Gliederung
	 * hat oder nicht.
	 * 
	 * @param kuerzel   das Kürzel der Schulform
	 * 
	 * @return true, falls die Gliederung bei der Schulform existiert und ansonsten false
	 */
	public hasSchulformByKuerzel(kuerzel : String | null) : boolean {
		if ((kuerzel === null) || JavaObject.equalsTranspiler("", (kuerzel))) 
			return false;
		if (this.schulformenKuerzel !== null) {
			for (let i : number = 0; i < this.schulformenKuerzel.size(); i++){
				let sfKuerzel : String | null = this.schulformenKuerzel.get(i);
				if (JavaObject.equalsTranspiler(sfKuerzel, (kuerzel))) 
					return true;
			}
		}
		return false;
	}

	/**
	 * Prüft, ob die Schulform diese Gliederung hat oder nicht.
	 * 
	 * @param schulform   die Schulform
	 * 
	 * @return true, falls die Gliederung bei der Schulform existiert und ansonsten false
	 */
	public hasSchulform(schulform : Schulform | null) : boolean {
		if (schulform === null) 
			return false;
		if (this.schulformenKuerzel !== null) {
			for (let i : number = 0; i < this.schulformenKuerzel.size(); i++){
				let sfKuerzel : String | null = this.schulformenKuerzel.get(i);
				if (JavaObject.equalsTranspiler(sfKuerzel, (schulform.kuerzel))) 
					return true;
			}
		}
		return false;
	}

	/**
	 * Gibt zurück, ob es sich um einen 8-jährigen gymnasialen Bildungsgang
	 * handelt oder nicht.
	 *  
	 * @return true, falls es sich um einen 8-jährigen gymnasialen Bildungsgang
	 *         handelt, sonst false 
	 */
	public istG8() : boolean {
		return (this as unknown === Schulgliederung.GY8 as unknown) || (this as unknown === Schulgliederung.Y8 as unknown);
	}

	/**
	 * Gibt die Standard-Gliederung der angegebenen Schulform zurück.
	 * 
	 * @param sf        die Schulform
	 * 
	 * @return die Schulgliederung, falls die Schulform gültig ist und ansonsten null 
	 */
	public static getDefault(sf : Schulform | null) : Schulgliederung | null {
		if (sf === null) 
			return null;
		if ((sf as unknown === Schulform.GY as unknown) || (sf as unknown === Schulform.SK as unknown) || (sf as unknown === Schulform.GM as unknown) || (sf as unknown === Schulform.G as unknown) || (sf as unknown === Schulform.S as unknown) || (sf as unknown === Schulform.PS as unknown) || (sf as unknown === Schulform.V as unknown) || (sf as unknown === Schulform.FW as unknown) || (sf as unknown === Schulform.H as unknown) || (sf as unknown === Schulform.R as unknown) || (sf as unknown === Schulform.GE as unknown) || (sf as unknown === Schulform.SR as unknown) || (sf as unknown === Schulform.SG as unknown)) 
			return Schulgliederung.DEFAULT;
		return null;
	}

	/**
	 * Gibt die Gliederung der angegebenen Schulform mit dem übergegebenen Kürzel zurück.
	 * Dabei setzt sich das zu prüfende Kürzel aus Anlage und Typ zusammen.
	 * 
	 * @param sf        die Schulform
	 * @param kuerzel   Anlage und Typ als String aneinandergehängt
	 * 
	 * @return die Schulgliederung, falls die Parameter gültige Werte sind und ansonsten null 
	 */
	public static getBySchulformAndKuerzel(sf : Schulform | null, kuerzel : String | null) : Schulgliederung | null {
		if (sf === null) 
			return null;
		if ((kuerzel === null) || JavaObject.equalsTranspiler("", (kuerzel))) 
			return Schulgliederung.getDefault(sf);
		let gliederungen : List<Schulgliederung> = Schulgliederung.get(sf);
		for (let i : number = 0; i < gliederungen.size(); i++){
			let sg : Schulgliederung | null = gliederungen.get(i);
			if (JavaString.equalsIgnoreCase((sg.id), kuerzel)) 
				return sg;
		}
		return null;
	}

	/**
	 * 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 Schulgliederung))
			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 : Schulgliederung) : number {
		return this.__ordinal - other.__ordinal;
	}

	/**
	 * Returns an array with enumeration values.
	 *
	 * @returns the array with enumeration values
	 */
	public static values() : Array<Schulgliederung> {
		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) : Schulgliederung | null {
		let tmp : Schulgliederung | undefined = this.all_values_by_name.get(name);
		return (!tmp) ? null : tmp;
	}

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

}

export function cast_de_nrw_schule_svws_core_types_statkue_Schulgliederung(obj : unknown) : Schulgliederung {
	return obj as Schulgliederung;
}
