ServiceBerechtigungMSAQ.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. import { JavaObject, cast_java_lang_Object } from '../../../java/lang/JavaObject';
  2. import { GEAbschlussFach, cast_de_nrw_schule_svws_core_data_abschluss_GEAbschlussFach } from '../../../core/data/abschluss/GEAbschlussFach';
  3. import { Service, cast_de_nrw_schule_svws_core_Service } from '../../../core/Service';
  4. import { JavaString, cast_java_lang_String } from '../../../java/lang/JavaString';
  5. import { GELeistungsdifferenzierteKursart, cast_de_nrw_schule_svws_core_types_ge_GELeistungsdifferenzierteKursart } from '../../../core/types/ge/GELeistungsdifferenzierteKursart';
  6. import { LogLevel, cast_de_nrw_schule_svws_logger_LogLevel } from '../../../logger/LogLevel';
  7. import { Predicate, cast_java_util_function_Predicate } from '../../../java/util/function/Predicate';
  8. import { GEAbschlussFaecher, cast_de_nrw_schule_svws_core_data_abschluss_GEAbschlussFaecher } from '../../../core/data/abschluss/GEAbschlussFaecher';
  9. import { AbschlussErgebnis, cast_de_nrw_schule_svws_core_data_abschluss_AbschlussErgebnis } from '../../../core/data/abschluss/AbschlussErgebnis';
  10. import { NullPointerException, cast_java_lang_NullPointerException } from '../../../java/lang/NullPointerException';
  11. import { ServiceAbschlussMSA, cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussMSA } from '../../../core/abschluss/ge/ServiceAbschlussMSA';
  12. import { List, cast_java_util_List } from '../../../java/util/List';
  13. import { Arrays, cast_java_util_Arrays } from '../../../java/util/Arrays';
  14. import { Abschluss, cast_de_nrw_schule_svws_core_types_Abschluss } from '../../../core/types/Abschluss';
  15. import { Vector, cast_java_util_Vector } from '../../../java/util/Vector';
  16. import { AbschlussManager, cast_de_nrw_schule_svws_core_abschluss_AbschlussManager } from '../../../core/abschluss/AbschlussManager';
  17. import { AbschlussFaecherGruppen, cast_de_nrw_schule_svws_core_abschluss_ge_AbschlussFaecherGruppen } from '../../../core/abschluss/ge/AbschlussFaecherGruppen';
  18. export class ServiceBerechtigungMSAQ extends Service<GEAbschlussFaecher, AbschlussErgebnis> {
  19. private filterDefizite : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => (f.note > 3) || ((GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note > 2)) };
  20. private filterDefizite1NS : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => ((!GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note === 4)) || ((GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note === 3)) };
  21. private filterDefizite2NS : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => ((!GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note === 5)) || ((GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note === 4)) };
  22. private filterDefizitWP : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => (f.note > 3) && JavaString.equalsIgnoreCase("WP", f.kuerzel) };
  23. private filterDefizitNichtWP : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => (f.note > 3) || ((GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note > 2)) && !JavaString.equalsIgnoreCase("WP", f.kuerzel) };
  24. private filterFG1NichtAusgleichbar : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => (f.note > 4) || ((GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note > 3)) };
  25. private filterFG2NichtAusgleichbar : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => (f.note > 5) || ((GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note > 3)) };
  26. private filterAusgleiche : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => !f.ausgleich && ((f.note < 2) || ((!GELeistungsdifferenzierteKursart.G.hat(f.kursart)) && (f.note < 3))) };
  27. private filterEKurse : Predicate<GEAbschlussFach> = { test : (f: GEAbschlussFach) => (GELeistungsdifferenzierteKursart.E.hat(f.kursart)) };
  28. public constructor() {
  29. super();
  30. }
  31. /**
  32. * Führt die Abschlussberechnung (bzw. Berechtigungsberechnung) anhand der übergebenen
  33. * Abschlussfächer durch und gibt das Berechnungsergebnis zurück.
  34. *
  35. * @param input die Abschlussfächer
  36. *
  37. * @return das Ergebnis der Abschlussberechnung
  38. */
  39. public handle(input : GEAbschlussFaecher) : AbschlussErgebnis {
  40. this.logger.logLn(LogLevel.INFO, "Prüfe MSA-Q:");
  41. this.logger.logLn(LogLevel.DEBUG, "============");
  42. if ((input.faecher === null) || (!AbschlussManager.pruefeHat4LeistungsdifferenzierteFaecher(input))) {
  43. this.logger.logLn(LogLevel.DEBUG, "______________________________");
  44. this.logger.logLn(LogLevel.DEBUG, " => Fehler: Es wurden nicht genügend leistungsdifferenzierte Fächer gefunden.");
  45. return AbschlussManager.getErgebnis(null, false);
  46. }
  47. if (!AbschlussManager.pruefeKuerzelDuplikate(input)) {
  48. this.logger.logLn(LogLevel.DEBUG, "______________________________");
  49. this.logger.logLn(LogLevel.DEBUG, " => Fehler: Es wurden Fächer mit dem gleichen Kürzel zur Abschlussprüfung übergeben. Dies ist nicht zulässig.");
  50. return AbschlussManager.getErgebnis(null, false);
  51. }
  52. let faecher : AbschlussFaecherGruppen = ServiceAbschlussMSA.getFaechergruppen(input.faecher);
  53. if (!faecher.fg1.istVollstaendig(Arrays.asList("D", "M", "E", "WP"))) {
  54. this.logger.logLn(LogLevel.DEBUG, "______________________________");
  55. this.logger.logLn(LogLevel.DEBUG, " => Fehler: Es wurden nicht alle nötigen Leistungen für die Fächergruppe 1 gefunden.");
  56. return AbschlussManager.getErgebnis(null, false);
  57. }
  58. if (faecher.fg2.isEmpty()) {
  59. this.logger.logLn(LogLevel.DEBUG, "______________________________");
  60. this.logger.logLn(LogLevel.DEBUG, " => Fehler: Keine Leistungen für die Fächergruppe 2 gefunden.");
  61. return AbschlussManager.getErgebnis(null, false);
  62. }
  63. let anzahlEKurse : number = faecher.getFaecherAnzahl(this.filterEKurse);
  64. if (anzahlEKurse < 3) {
  65. this.logger.logLn(LogLevel.DEBUG, "______________________________");
  66. this.logger.logLn(LogLevel.INFO, " => kein MSA-Q (FOR-Q) - nicht genügend E-Kurse belegt");
  67. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  68. } else
  69. if (anzahlEKurse > 3) {
  70. this.logger.logLn(LogLevel.DEBUG, " - Verbessern der E-Kurs-Noten für die Defizitberechnung, falls mehr als 3 E-Kurse vorhanden sind:");
  71. let tmpFaecher : List<GEAbschlussFach> = faecher.fg2.getFaecher(this.filterEKurse);
  72. for (let f of tmpFaecher) {
  73. let note : number = f.note;
  74. let note_neu : number = (note === 1) ? 1 : note - 1;
  75. this.logger.logLn(LogLevel.DEBUG, " " + f.kuerzel + ":(E)" + note + "->(G)" + note_neu);
  76. f.note = note_neu;
  77. f.kursart = GELeistungsdifferenzierteKursart.G.kuerzel;
  78. }
  79. }
  80. this.logger.logLn(LogLevel.DEBUG, " -> FG1: Fächer " + faecher.fg1.toString().valueOf());
  81. this.logger.logLn(LogLevel.DEBUG, " -> FG2: Fächer " + faecher.fg2.toString().valueOf());
  82. let abschlussergebnis : AbschlussErgebnis = this.pruefeDefizite(faecher, "");
  83. if (abschlussergebnis.erworben) {
  84. this.logger.logLn(LogLevel.DEBUG, "______________________________");
  85. this.logger.logLn(LogLevel.INFO, " => MSA-Q (FOR-Q): APO-SI §43 (4)");
  86. } else
  87. if (AbschlussManager.hatNachpruefungsmoeglichkeit(abschlussergebnis)) {
  88. this.logger.logLn(LogLevel.INFO, " => kein MSA-Q (FOR-Q) - Nachprüfungsmöglichkeite(en) in " + AbschlussManager.getNPFaecherString(abschlussergebnis).valueOf());
  89. } else {
  90. this.logger.logLn(LogLevel.INFO, " => kein MSA-Q (FOR-Q) - KEINE Nachprüfungsmöglichkeiten!");
  91. }
  92. return abschlussergebnis;
  93. }
  94. /**
  95. * Prüft in Bezug auf Defizite, ob der Abschluss erworben wurde.
  96. *
  97. * @param faecher die Asbchlussfächer nach Fächergruppen sortiert
  98. * @param log_indent die Einrückung für das Logging
  99. *
  100. * @return das Ergebnis der Abschlussberechnung in Bezug die Defizitberechnung
  101. */
  102. private pruefeDefizite(faecher : AbschlussFaecherGruppen, log_indent : String) : AbschlussErgebnis {
  103. let fg1_defizite : List<GEAbschlussFach> = faecher.fg1.getFaecher(this.filterDefizite);
  104. let fg2_defizite : List<GEAbschlussFach> = faecher.fg2.getFaecher(this.filterDefizite);
  105. if (fg1_defizite.size() > 0)
  106. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> FG1: Defizit" + (fg1_defizite.size() > 1 ? "e" : "") + ": " + faecher.fg1.getKuerzelListe(this.filterDefizite).valueOf());
  107. if (fg2_defizite.size() > 0)
  108. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> FG2: Defizit" + (fg2_defizite.size() > 1 ? "e" : "") + ": " + faecher.fg2.getKuerzelListe(this.filterDefizite).valueOf());
  109. let nachpruefung_genutzt : boolean = false;
  110. let npFaecher : List<GEAbschlussFach> = new Vector();
  111. let fg1_nicht_ausgleichbar : List<GEAbschlussFach> = faecher.fg1.getFaecher(this.filterFG1NichtAusgleichbar);
  112. let fg2_nicht_ausgleichbar : List<GEAbschlussFach> = faecher.fg2.getFaecher(this.filterFG2NichtAusgleichbar);
  113. if ((fg1_nicht_ausgleichbar.size() > 0) || (fg2_nicht_ausgleichbar.size() > 0)) {
  114. let str_faecher : String = faecher.getKuerzelListe(this.filterFG1NichtAusgleichbar, this.filterFG2NichtAusgleichbar);
  115. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Defizit(e) in " + str_faecher.valueOf() + " aufgrund zu hoher Abweichungen nicht ausgleichbar.");
  116. if ((fg1_nicht_ausgleichbar.size() === 0) && (fg2_nicht_ausgleichbar.size() === 1) && (GELeistungsdifferenzierteKursart.G.hat(fg2_nicht_ausgleichbar.get(0).kursart)) && (fg2_nicht_ausgleichbar.get(0).note === 4)) {
  117. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Nachprüfung muss falls möglich in " + fg2_nicht_ausgleichbar.get(0).kuerzel + " stattfinden!");
  118. nachpruefung_genutzt = true;
  119. npFaecher.add(fg2_nicht_ausgleichbar.get(0));
  120. } else {
  121. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  122. }
  123. }
  124. let fg1_ausgleichsfaecher : List<GEAbschlussFach> = faecher.fg1.getFaecher(this.filterAusgleiche);
  125. let wp_defizit : GEAbschlussFach | null = faecher.fg1.getFach(this.filterDefizitWP);
  126. if ((fg1_defizite.size() > 2) || ((fg1_defizite.size() === 2) && (wp_defizit === null))) {
  127. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite in FG1");
  128. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  129. } else
  130. if ((fg1_defizite.size() === 2) && (wp_defizit !== null) && (fg1_ausgleichsfaecher.size() === 0)) {
  131. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite in FG1 - kein Ausgleich möglich");
  132. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  133. } else
  134. if ((fg1_defizite.size() === 2) && (wp_defizit !== null) && (fg1_ausgleichsfaecher.size() > 0) && (!nachpruefung_genutzt)) {
  135. let defizitFach : GEAbschlussFach | null = faecher.fg1.getFach(this.filterDefizitNichtWP);
  136. if (defizitFach === null)
  137. throw new NullPointerException()
  138. let ausgleichsFach : GEAbschlussFach = fg1_ausgleichsfaecher.get(0);
  139. defizitFach.ausgeglichen = true;
  140. ausgleichsFach.ausgleich = true;
  141. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Ausgleich von " + defizitFach.kuerzel + " durch " + ausgleichsFach.kuerzel);
  142. nachpruefung_genutzt = true;
  143. npFaecher.add(wp_defizit);
  144. let abschlussergebnis : AbschlussErgebnis = this.pruefeFG2(faecher, log_indent, npFaecher, nachpruefung_genutzt);
  145. if (abschlussergebnis.erworben) {
  146. return AbschlussManager.getErgebnisNachpruefung(Abschluss.MSA_Q, AbschlussManager.getKuerzel(npFaecher));
  147. }
  148. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  149. }
  150. if ((fg1_defizite.size() === 1) && (wp_defizit === null) && (fg1_ausgleichsfaecher.size() === 0)) {
  151. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> kein Defizit-Ausgleich in FG1");
  152. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  153. }
  154. if ((fg1_defizite.size() === 1) && (wp_defizit === null)) {
  155. let defizitFach : GEAbschlussFach | null = faecher.fg1.getFach(this.filterDefizitNichtWP);
  156. if (defizitFach === null)
  157. throw new NullPointerException()
  158. let ausgleichsFach : GEAbschlussFach = fg1_ausgleichsfaecher.get(0);
  159. defizitFach.ausgeglichen = true;
  160. ausgleichsFach.ausgleich = true;
  161. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Ausgleich von " + defizitFach.kuerzel + " durch " + ausgleichsFach.kuerzel);
  162. }
  163. if ((fg1_defizite.size() === 1) && (wp_defizit !== null)) {
  164. if ((fg1_ausgleichsfaecher.size() > 0)) {
  165. let defizitFach : GEAbschlussFach = wp_defizit;
  166. let ausgleichsFach : GEAbschlussFach = fg1_ausgleichsfaecher.get(0);
  167. defizitFach.ausgeglichen = true;
  168. ausgleichsFach.ausgleich = true;
  169. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Prüfe FG2 mit der Option Ausgleich von " + defizitFach.kuerzel + " durch " + ausgleichsFach.kuerzel);
  170. let abschlussergebnis : AbschlussErgebnis = this.pruefeFG2(faecher, log_indent.valueOf() + " ", npFaecher, nachpruefung_genutzt);
  171. if (abschlussergebnis.erworben)
  172. return abschlussergebnis;
  173. defizitFach.ausgeglichen = false;
  174. ausgleichsFach.ausgleich = false;
  175. }
  176. if (nachpruefung_genutzt) {
  177. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Eine Nachprüfung im WP-Fach und in dem leistungsdifferenzierten Fach der FG2 ist nicht gleichzeitig möglich.");
  178. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  179. }
  180. wp_defizit.ausgleich = true;
  181. wp_defizit.note--;
  182. let abschlussergebnis : AbschlussErgebnis = this.pruefeFG2(faecher, log_indent, npFaecher, true);
  183. wp_defizit.note++;
  184. wp_defizit.ausgleich = false;
  185. if (abschlussergebnis.erworben) {
  186. nachpruefung_genutzt = true;
  187. npFaecher.add(wp_defizit);
  188. }
  189. return AbschlussManager.getErgebnisNachpruefung(Abschluss.MSA_Q, AbschlussManager.getKuerzel(npFaecher));
  190. }
  191. let log_fg2_indent : String = log_indent;
  192. if (fg2_nicht_ausgleichbar.size() === 1) {
  193. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Prüfe FG2 mit Nachprüfung in " + fg2_nicht_ausgleichbar.get(0).kuerzel);
  194. log_fg2_indent += " ";
  195. }
  196. let abschlussergebnis : AbschlussErgebnis = this.pruefeFG2(faecher, log_fg2_indent, npFaecher, nachpruefung_genutzt);
  197. if (((fg2_nicht_ausgleichbar.size() === 1) && abschlussergebnis.erworben) || ((!abschlussergebnis.erworben) && (AbschlussManager.hatNachpruefungsmoeglichkeit(abschlussergebnis)))) {
  198. return AbschlussManager.getErgebnisNachpruefung(Abschluss.MSA_Q, AbschlussManager.getKuerzel(npFaecher));
  199. }
  200. return abschlussergebnis;
  201. }
  202. /**
  203. * Führt eine Detailprüfung in der Fächergruppe 2 durch. Diese Methode wird ggf. mehrfach - auch rekursiv - aufgerufen.
  204. *
  205. * @param faecher die Abschlussfächer nach Fächergruppen sortiert
  206. * @param log_indent die Einrückung für das Logging
  207. * @param npFaecher die Liste der Nachprüfungsfächer, die bisher schon feststehen
  208. * @param nachpruefung_genutzt gibt an, ob die Nachprüfungsmöglichkeit bereits eingesetzt werden musste
  209. *
  210. * @return das Ergebnis der Abschlussberechnung in Bezug auf den Stand dieser Detailprüfung
  211. */
  212. private pruefeFG2(faecher : AbschlussFaecherGruppen, log_indent : String, npFaecher : List<GEAbschlussFach>, nachpruefung_genutzt : boolean) : AbschlussErgebnis {
  213. let ges_ausgleichsfaecher : List<GEAbschlussFach> = faecher.getFaecher(this.filterAusgleiche);
  214. let fg2_defizite_1NS : List<GEAbschlussFach> = faecher.fg2.getFaecher(this.filterDefizite1NS);
  215. let fg2_defizite_2NS : List<GEAbschlussFach> = faecher.fg2.getFaecher(this.filterDefizite2NS);
  216. let fg2_defizit_anzahl : number = fg2_defizite_1NS.size() + fg2_defizite_2NS.size();
  217. if (fg2_defizit_anzahl === 0) {
  218. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> keine Defizite in FG2");
  219. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, true);
  220. }
  221. if ((fg2_defizite_2NS.size() > 2) || (fg2_defizit_anzahl > (nachpruefung_genutzt ? 3 : 4))) {
  222. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite in FG2 - mit Ausgleich und Nachprüfung kein Abschluss möglich");
  223. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  224. }
  225. if (ges_ausgleichsfaecher.size() < fg2_defizit_anzahl - (nachpruefung_genutzt ? 0 : 1)) {
  226. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite in FG2 - nicht genügend Ausgleichsfächer vorhanden");
  227. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, false);
  228. }
  229. if (fg2_defizite_2NS.size() === 2) {
  230. for (let defizitFach of fg2_defizite_2NS) {
  231. defizitFach.ausgeglichen = true;
  232. defizitFach.ausgleich = true;
  233. defizitFach.note--;
  234. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Prüfe erneut mit Nachprüfung in " + defizitFach.kuerzel);
  235. let abschlussergebnis : AbschlussErgebnis = this.pruefeFG2(faecher, log_indent.valueOf() + " ", npFaecher, true);
  236. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Nachprüfung in " + defizitFach.kuerzel + (abschlussergebnis.erworben ? " möglich" : " nicht möglich"));
  237. if (abschlussergebnis.erworben)
  238. npFaecher.add(defizitFach);
  239. defizitFach.ausgeglichen = true;
  240. defizitFach.ausgleich = true;
  241. defizitFach.note++;
  242. }
  243. return AbschlussManager.getErgebnisNachpruefung(Abschluss.MSA_Q, AbschlussManager.getKuerzel(npFaecher));
  244. }
  245. if (ges_ausgleichsfaecher.size() >= fg2_defizit_anzahl) {
  246. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> genug Ausgleichsfächer vorhanden." + (nachpruefung_genutzt ? "" : " Nachprüfung nicht nötig."));
  247. return AbschlussManager.getErgebnis(Abschluss.MSA_Q, true);
  248. }
  249. for (let defizitFach of fg2_defizite_1NS) {
  250. defizitFach.ausgeglichen = true;
  251. defizitFach.ausgleich = true;
  252. defizitFach.note--;
  253. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Prüfe erneut mit Nachprüfung in " + defizitFach.kuerzel);
  254. let abschlussergebnis : AbschlussErgebnis = this.pruefeFG2(faecher, log_indent.valueOf() + " ", npFaecher, true);
  255. this.logger.logLn(LogLevel.DEBUG, log_indent.valueOf() + " -> Nachprüfung in " + defizitFach.kuerzel + (abschlussergebnis.erworben ? " möglich" : " nicht möglich"));
  256. if (abschlussergebnis.erworben)
  257. npFaecher.add(defizitFach);
  258. defizitFach.ausgeglichen = true;
  259. defizitFach.ausgleich = true;
  260. defizitFach.note++;
  261. }
  262. return AbschlussManager.getErgebnisNachpruefung(Abschluss.MSA_Q, AbschlussManager.getKuerzel(npFaecher));
  263. }
  264. isTranspiledInstanceOf(name : string): boolean {
  265. return ['de.nrw.schule.svws.core.Service', 'de.nrw.schule.svws.core.abschluss.ge.ServiceBerechtigungMSAQ'].includes(name);
  266. }
  267. }
  268. export function cast_de_nrw_schule_svws_core_abschluss_ge_ServiceBerechtigungMSAQ(obj : unknown) : ServiceBerechtigungMSAQ {
  269. return obj as ServiceBerechtigungMSAQ;
  270. }