ServiceAbschlussHA10.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10 = exports.ServiceAbschlussHA10 = void 0;
  4. const JavaObject_1 = require("../../../java/lang/JavaObject");
  5. const Service_1 = require("../../../core/Service");
  6. const GELeistungsdifferenzierteKursart_1 = require("../../../core/types/ge/GELeistungsdifferenzierteKursart");
  7. const LogLevel_1 = require("../../../logger/LogLevel");
  8. const AbschlussFaecherGruppe_1 = require("../../../core/abschluss/ge/AbschlussFaecherGruppe");
  9. const Arrays_1 = require("../../../java/util/Arrays");
  10. const Abschluss_1 = require("../../../core/types/Abschluss");
  11. const AbschlussManager_1 = require("../../../core/abschluss/AbschlussManager");
  12. const AbschlussFaecherGruppen_1 = require("../../../core/abschluss/ge/AbschlussFaecherGruppen");
  13. class ServiceAbschlussHA10 extends Service_1.Service {
  14. filterDefizit = { test: (f) => f.note > 4 && (!f.ausgeglichen) };
  15. filterMangelhaft = { test: (f) => f.note === 5 };
  16. filterMangelhaftOhneZP10Faecher = { test: (f) => (f.note === 5) && (!JavaObject_1.JavaObject.equalsTranspiler("D", (f.kuerzel))) && (!JavaObject_1.JavaObject.equalsTranspiler("E", (f.kuerzel))) && (!JavaObject_1.JavaObject.equalsTranspiler("M", (f.kuerzel))) };
  17. filterUngenuegend = { test: (f) => f.note === 6 };
  18. filterEKurse = { test: (f) => (GELeistungsdifferenzierteKursart_1.GELeistungsdifferenzierteKursart.E.hat(f.kursart)) };
  19. filterWeitereFremdsprachen = { test: (f) => (!JavaObject_1.JavaObject.equalsTranspiler("E", (f.kuerzel)) && (f.istFremdsprache !== null) && (f.istFremdsprache === true)) };
  20. constructor() {
  21. super();
  22. }
  23. /**
  24. * Führt die Abschlussberechnung anhand der übergebenen Abschlussfächer durch
  25. * und gibt das Berechnungsergebnis zurück.
  26. *
  27. * @param input die Abschlussfächer
  28. *
  29. * @return das Ergebnis der Abschlussberechnung
  30. */
  31. handle(input) {
  32. this.logger.logLn(LogLevel_1.LogLevel.INFO, "Prüfe HA10:");
  33. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "==========");
  34. if ((input.faecher === null) || (!AbschlussManager_1.AbschlussManager.pruefeHat4LeistungsdifferenzierteFaecher(input))) {
  35. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________");
  36. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Es wurden nicht genügend leistungsdiffernzierte Fächer gefunden.");
  37. return AbschlussManager_1.AbschlussManager.getErgebnis(null, false);
  38. }
  39. if (!AbschlussManager_1.AbschlussManager.pruefeKuerzelDuplikate(input)) {
  40. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________");
  41. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Es wurden Fächer mit dem gleichen Kürzel zur Abschlussprüfung übergeben. Dies ist nicht zulässig.");
  42. return AbschlussManager_1.AbschlussManager.getErgebnis(null, false);
  43. }
  44. let faecher = new AbschlussFaecherGruppen_1.AbschlussFaecherGruppen(new AbschlussFaecherGruppe_1.AbschlussFaecherGruppe(input.faecher, Arrays_1.Arrays.asList("D", "M", "LBNW", "LBAL"), null), new AbschlussFaecherGruppe_1.AbschlussFaecherGruppe(input.faecher, null, Arrays_1.Arrays.asList("D", "M", "LBNW", "LBAL", "BI", "PH", "CH", "AT", "AW", "AH")));
  45. if (!faecher.fg1.istVollstaendig(Arrays_1.Arrays.asList("D", "M", "LBNW", "LBAL"))) {
  46. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________");
  47. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Es wurden nicht alle nötigen Leistungen für die Fächergruppe 1 gefunden.");
  48. return AbschlussManager_1.AbschlussManager.getErgebnis(null, false);
  49. }
  50. if (faecher.fg2.isEmpty()) {
  51. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________");
  52. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " => Fehler: Keine Leistungen für die Fächergruppe 2 gefunden.");
  53. return AbschlussManager_1.AbschlussManager.getErgebnis(null, false);
  54. }
  55. let weitereFS = faecher.fg2.entferneFaecher(this.filterWeitereFremdsprachen);
  56. if (weitereFS.size() > 0) {
  57. for (let fs of weitereFS) {
  58. if (fs.bezeichnung === null)
  59. continue;
  60. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " -> Ignoriere weitere Fremdsprache: " + fs.bezeichnung + "(" + fs.note + ")");
  61. }
  62. }
  63. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " - ggf. Verbessern der E-Kurs-Noten für die Defizitberechnung:");
  64. let tmpFaecher = faecher.getFaecher(this.filterEKurse);
  65. for (let f of tmpFaecher) {
  66. if (f.kuerzel === null)
  67. continue;
  68. let note = f.note;
  69. let note_neu = (note === 1) ? 1 : note - 1;
  70. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " " + f.kuerzel + "(E):" + note + "->" + note_neu);
  71. f.note = note_neu;
  72. }
  73. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " -> FG1: Fächer " + faecher.fg1.toString().valueOf());
  74. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, " -> FG2: Fächer " + faecher.fg2.toString().valueOf());
  75. let abschlussergebnis = this.pruefeDefizite(faecher, "");
  76. if (abschlussergebnis.erworben) {
  77. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, "______________________________");
  78. this.logger.logLn(LogLevel_1.LogLevel.INFO, " => HA 10: APO-SI §41 (1)");
  79. }
  80. else if (AbschlussManager_1.AbschlussManager.hatNachpruefungsmoeglichkeit(abschlussergebnis)) {
  81. this.logger.logLn(LogLevel_1.LogLevel.INFO, " => kein HA10 - Nachprüfungsmöglichkeite(en) in " + AbschlussManager_1.AbschlussManager.getNPFaecherString(abschlussergebnis).valueOf());
  82. }
  83. else {
  84. this.logger.logLn(LogLevel_1.LogLevel.INFO, " => kein HA10 - KEINE Nachprüfungsmöglichkeiten!");
  85. }
  86. return abschlussergebnis;
  87. }
  88. /**
  89. * Prüft in Bezug auf Defizite, ob der Abschluss erworben wurde.
  90. *
  91. * @param faecher die Asbchlussfächer nach Fächergruppen sortiert
  92. * @param log_indent die Einrückung für das Logging
  93. *
  94. * @return das Ergebnis der Abschlussberechnung in Bezug die Defizitberechnung
  95. */
  96. pruefeDefizite(faecher, log_indent) {
  97. let fg1_defizite = faecher.fg1.getFaecherAnzahl(this.filterDefizit);
  98. let fg2_defizite = faecher.fg2.getFaecherAnzahl(this.filterDefizit);
  99. let ges_defizite = fg1_defizite + fg2_defizite;
  100. let fg1_mangelhaft = faecher.fg1.getFaecherAnzahl(this.filterMangelhaft);
  101. let fg1_ungenuegend = faecher.fg1.getFaecherAnzahl(this.filterUngenuegend);
  102. let fg2_ungenuegend = faecher.fg2.getFaecherAnzahl(this.filterUngenuegend);
  103. if (fg1_defizite > 0)
  104. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> FG1: Defizit" + (fg1_defizite > 1 ? "e" : "") + ": " + faecher.fg1.getKuerzelListe(this.filterDefizit).valueOf());
  105. if (fg2_defizite > 0)
  106. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> FG2: Defizit" + (fg2_defizite > 1 ? "e" : "") + ": " + faecher.fg2.getKuerzelListe(this.filterDefizit).valueOf());
  107. if ((fg1_ungenuegend > 0) || (fg2_ungenuegend > 1)) {
  108. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu oft ungenügend (6) - 0x6 in FG1 und max. 1x6 in FG2 erlaubt.");
  109. return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false);
  110. }
  111. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> " + ((fg2_ungenuegend === 1) ? "1x6 in FG2 erlaubt" : "0x6 in FG1 und FG2") + " -> prüfe weitere Defizite");
  112. if (fg1_mangelhaft > 2) {
  113. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: Mehr als 2x5 in FG1");
  114. return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false);
  115. }
  116. if ((fg1_mangelhaft === 2) && (fg2_defizite > 1)) {
  117. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: 2x5 in FG1 und mind. ein weiteres Defizit in FG2");
  118. return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false);
  119. }
  120. if (ges_defizite > 3) {
  121. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: Insgesamt mehr als 3 Defizite");
  122. return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, false);
  123. }
  124. let hatNP = (fg1_mangelhaft === 2) || (ges_defizite === 3);
  125. if (hatNP) {
  126. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zu viele Defizite: " + ((fg1_mangelhaft === 2) ? "2x5 in FG1, aber kein weiteres Defizit in FG2" : "3 Defizite nicht erlaubt"));
  127. this.logger.logLn(LogLevel_1.LogLevel.INFO, " -> Hinweis: Nachprüfungen in ZP10-Fächern nicht möglich");
  128. let np_faecher = (fg1_mangelhaft === 2) ? faecher.fg1.getKuerzel(this.filterMangelhaftOhneZP10Faecher) : faecher.getKuerzel(this.filterMangelhaftOhneZP10Faecher);
  129. let abschlussergebnis = AbschlussManager_1.AbschlussManager.getErgebnisNachpruefung(Abschluss_1.Abschluss.HA10, np_faecher);
  130. this.logger.logLn(LogLevel_1.LogLevel.INFO, AbschlussManager_1.AbschlussManager.hatNachpruefungsmoeglichkeit(abschlussergebnis) ? (" -> Nachprüfungsmöglichkeit(en) in " + AbschlussManager_1.AbschlussManager.getNPFaecherString(abschlussergebnis).valueOf()) : " -> also: kein Nachprüfungsmöglichkeit.");
  131. return abschlussergebnis;
  132. }
  133. if ((fg1_defizite === 0) && (fg2_defizite === 0)) {
  134. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> keine Defizite in FG1 und FG2");
  135. return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, true);
  136. }
  137. this.logger.logLn(LogLevel_1.LogLevel.DEBUG, log_indent.valueOf() + " -> zwei Defizite erlaubt (solange nicht beide in FG1)");
  138. return AbschlussManager_1.AbschlussManager.getErgebnis(Abschluss_1.Abschluss.HA10, true);
  139. }
  140. isTranspiledInstanceOf(name) {
  141. return ['de.nrw.schule.svws.core.Service', 'de.nrw.schule.svws.core.abschluss.ge.ServiceAbschlussHA10'].includes(name);
  142. }
  143. }
  144. exports.ServiceAbschlussHA10 = ServiceAbschlussHA10;
  145. function cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10(obj) {
  146. return obj;
  147. }
  148. exports.cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10 = cast_de_nrw_schule_svws_core_abschluss_ge_ServiceAbschlussHA10;
  149. //# sourceMappingURL=ServiceAbschlussHA10.js.map