Fremdsprachen.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Fremdsprachen = exports.Fremdsprachen = void 0;
  4. const JavaObject_1 = require("../../../../java/lang/JavaObject");
  5. const SprachendatenManager_1 = require("../../../../core/SprachendatenManager");
  6. const GostAbiturFach_1 = require("../../../../core/types/gost/GostAbiturFach");
  7. const GostBelegpruefung_1 = require("../../../../core/abschluss/gost/GostBelegpruefung");
  8. const GostFachManager_1 = require("../../../../core/abschluss/gost/GostFachManager");
  9. const GostKursart_1 = require("../../../../core/types/gost/GostKursart");
  10. const GostFachbereich_1 = require("../../../../core/types/gost/GostFachbereich");
  11. const GostHalbjahr_1 = require("../../../../core/types/gost/GostHalbjahr");
  12. const GostSchriftlichkeit_1 = require("../../../../core/types/gost/GostSchriftlichkeit");
  13. const Vector_1 = require("../../../../java/util/Vector");
  14. const GostBelegungsfehler_1 = require("../../../../core/abschluss/gost/GostBelegungsfehler");
  15. class Fremdsprachen extends GostBelegpruefung_1.GostBelegpruefung {
  16. fremdsprachen = new Vector_1.Vector();
  17. fremdsprachen_neu = new Vector_1.Vector();
  18. fremdsprachen_fortgefuehrt = new Vector_1.Vector();
  19. biliSachfaecher = new Vector_1.Vector();
  20. anzahl_schriftlich_durchgehend = 0;
  21. /**
  22. * Erstellt eine neue Belegprüfung für dir Fremdsprachen.
  23. *
  24. * @param manager der Daten-Manager für die Abiturdaten
  25. * @param pruefungs_art die Art der durchzuführenden Prüfung (z.B. EF.1 oder GESAMT)
  26. */
  27. constructor(manager, pruefungs_art) {
  28. super(manager, pruefungs_art);
  29. }
  30. init() {
  31. this.fremdsprachen = this.manager.getFachbelegungen(GostFachbereich_1.GostFachbereich.FREMDSPRACHE);
  32. this.fremdsprachen_neu = this.manager.filterFremdspracheNeuEinsetzend(this.fremdsprachen);
  33. this.fremdsprachen_fortgefuehrt = this.manager.filterFremdspracheFortgefuehrt(this.fremdsprachen);
  34. this.biliSachfaecher = this.manager.getFachbelegungenBilingual();
  35. this.anzahl_schriftlich_durchgehend = 0;
  36. }
  37. pruefeEF1() {
  38. this.pruefeEF1Sprachenfolge();
  39. this.pruefeEF1Fremdsprache1();
  40. this.pruefeEF1FremdsprachenfolgeZweiteFremdsprache();
  41. this.pruefeEF1Schriftlichkeit();
  42. this.pruefeEF1AnzahlDurchgehenedeSprachen();
  43. this.pruefeEF1BilingualeSachfaecher();
  44. this.pruefeEF1BilingualenBildungsgang();
  45. }
  46. /**
  47. * EF.1: Prüft bei der Sprachenfolge, ob eine gemäß Sprachenfolge fortgeführte
  48. * Fremdsprache fehlerhafterweise als neu einsetzende Fremdsprache belegt wurde.
  49. */
  50. pruefeEF1Sprachenfolge() {
  51. if (this.manager.hatFortgefuehrteFremdspracheInSprachendaten(this.fremdsprachen_neu))
  52. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_20);
  53. if (this.manager.hatNeuEinsetzendeFremdspracheInSprachendaten(this.fremdsprachen_fortgefuehrt))
  54. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_21);
  55. if (!SprachendatenManager_1.SprachendatenManager.hatSprachbelegung(this.manager.getSprachendaten(), "E"))
  56. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_22_INFO);
  57. }
  58. /**
  59. * Prüft, ob eine gültige Fremdsprachenbelegung mit den EF.1-Wahlen möglich ist.
  60. */
  61. pruefeEF1Fremdsprache1() {
  62. let gefundenFremdsprachenbelegung = false;
  63. let gefundenFortgefuehrteFremdsprachenbelegungOhneSprachenfolge = false;
  64. let gefundenFortgefuehrteFremdspracheAlsNeueinsetzende = false;
  65. let anzahlFortgefuehrteFremdsprachen = 0;
  66. let anzahlFortgefuehrteFremdsprachenEFBelegbar = 0;
  67. let anzahlFortgefuehrteFremdsprachenEFBelegbarFehlerMuendlich = 0;
  68. let anzahlFortgefuehrteFremdsprachenDurchgehendBelegbar = 0;
  69. let anzahlFortgefuehrteFremdsprachenDurchgehendBelegbarFehlerMuendlich = 0;
  70. let anzahlFortfuehrbareFremdsprachen = 0;
  71. anzahlFortfuehrbareFremdsprachen = SprachendatenManager_1.SprachendatenManager.getFortfuehrbareSprachenInGOSt(this.manager.getSprachendaten()).size();
  72. for (let abiFachbelegung of this.fremdsprachen_fortgefuehrt) {
  73. if (!this.manager.pruefeBelegung(abiFachbelegung, GostHalbjahr_1.GostHalbjahr.EF1)) {
  74. continue;
  75. }
  76. gefundenFremdsprachenbelegung = true;
  77. let gostFach = this.manager.getFach(abiFachbelegung);
  78. if (gostFach !== null && !JavaObject_1.JavaObject.equalsTranspiler(gostFach.kuerzel, (""))) {
  79. if (SprachendatenManager_1.SprachendatenManager.istFortfuehrbareSpracheInGOSt(this.manager.getSprachendaten(), gostFach.kuerzel.substring(0, 1))) {
  80. anzahlFortgefuehrteFremdsprachen += 1;
  81. if (this.manager.pruefeBelegungDurchgehendBelegbar(abiFachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1)) {
  82. anzahlFortgefuehrteFremdsprachenDurchgehendBelegbar += 1;
  83. }
  84. else if (this.manager.pruefeBelegungDurchgehendBelegbar(abiFachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH, GostHalbjahr_1.GostHalbjahr.EF1)) {
  85. anzahlFortgefuehrteFremdsprachenDurchgehendBelegbar += 1;
  86. anzahlFortgefuehrteFremdsprachenDurchgehendBelegbarFehlerMuendlich += 1;
  87. }
  88. else if ((gostFach.istMoeglichEF1) && (gostFach.istMoeglichEF2)) {
  89. anzahlFortgefuehrteFremdsprachenEFBelegbar += 1;
  90. if (this.manager.pruefeBelegungMitSchriftlichkeit(abiFachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH, GostHalbjahr_1.GostHalbjahr.EF1)) {
  91. anzahlFortgefuehrteFremdsprachenEFBelegbarFehlerMuendlich += 1;
  92. }
  93. }
  94. }
  95. else {
  96. gefundenFortgefuehrteFremdsprachenbelegungOhneSprachenfolge = true;
  97. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_23);
  98. }
  99. }
  100. }
  101. if ((anzahlFortgefuehrteFremdsprachenDurchgehendBelegbarFehlerMuendlich + anzahlFortgefuehrteFremdsprachenEFBelegbarFehlerMuendlich) > 0) {
  102. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_12);
  103. }
  104. if ((anzahlFortgefuehrteFremdsprachen > 0) && (anzahlFortgefuehrteFremdsprachen === (anzahlFortgefuehrteFremdsprachenDurchgehendBelegbarFehlerMuendlich + anzahlFortgefuehrteFremdsprachenEFBelegbarFehlerMuendlich))) {
  105. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_18);
  106. }
  107. if (anzahlFortgefuehrteFremdsprachenDurchgehendBelegbar > 0) {
  108. return;
  109. }
  110. let anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbar = 0;
  111. let anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbarFehlerMuendlich = 0;
  112. for (let abiFachbelegung of this.fremdsprachen_neu) {
  113. if (!this.manager.pruefeBelegung(abiFachbelegung, GostHalbjahr_1.GostHalbjahr.EF1)) {
  114. continue;
  115. }
  116. gefundenFremdsprachenbelegung = true;
  117. let gostFach = this.manager.getFach(abiFachbelegung);
  118. if (gostFach !== null && !JavaObject_1.JavaObject.equalsTranspiler(gostFach.kuerzel, (""))) {
  119. if (!SprachendatenManager_1.SprachendatenManager.istFortfuehrbareSpracheInGOSt(this.manager.getSprachendaten(), gostFach.kuerzel.substring(0, 1))) {
  120. if (this.manager.pruefeBelegungDurchgehendBelegbar(abiFachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1)) {
  121. anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbar += 1;
  122. }
  123. else if (this.manager.pruefeBelegungDurchgehendBelegbar(abiFachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH, GostHalbjahr_1.GostHalbjahr.EF1)) {
  124. anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbar += 1;
  125. anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbarFehlerMuendlich += 1;
  126. }
  127. }
  128. else {
  129. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_20);
  130. gefundenFortgefuehrteFremdspracheAlsNeueinsetzende = true;
  131. }
  132. }
  133. }
  134. if (anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbarFehlerMuendlich > 0) {
  135. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_12);
  136. }
  137. if ((gefundenFremdsprachenbelegung && !(gefundenFortgefuehrteFremdsprachenbelegungOhneSprachenfolge || gefundenFortgefuehrteFremdspracheAlsNeueinsetzende)) && (anzahlFortgefuehrteFremdsprachenDurchgehendBelegbar + anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbar === 0)) {
  138. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_11);
  139. }
  140. if (anzahlFortgefuehrteFremdsprachenEFBelegbar > 0) {
  141. if (anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbar === 0) {
  142. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_10);
  143. }
  144. return;
  145. }
  146. if (anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbar === 0) {
  147. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_18);
  148. return;
  149. }
  150. if ((anzahlFortgefuehrteFremdsprachenDurchgehendBelegbar + anzahlFortgefuehrteFremdsprachenEFBelegbar) === 0 && anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbar > 0) {
  151. if (anzahlNeueinsetzendeFremdsprachenDurchgehendBelegbarFehlerMuendlich > 0) {
  152. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_18);
  153. }
  154. if (this.manager.hatMuttersprachenPruefungEndeEF()) {
  155. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_19_INFO);
  156. }
  157. else {
  158. if (anzahlFortfuehrbareFremdsprachen === 0) {
  159. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_25);
  160. }
  161. else {
  162. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_18);
  163. if (!SprachendatenManager_1.SprachendatenManager.hatZweiSprachenMitMin4JahrenDauerEndeSekI(this.manager.getSprachendaten()))
  164. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_24);
  165. }
  166. }
  167. }
  168. }
  169. /**
  170. * Prüft, ob eine zweite Fremdsprache in der Sek I vorhanden ist und prüft sonst auf eine neu
  171. * einsetzende Fremdsprache.
  172. */
  173. pruefeEF1FremdsprachenfolgeZweiteFremdsprache() {
  174. if (SprachendatenManager_1.SprachendatenManager.hatZweiSprachenMitMin4JahrenDauerEndeSekI(this.manager.getSprachendaten()))
  175. return;
  176. if (SprachendatenManager_1.SprachendatenManager.hatEineSpracheMitMin4JahrenDauerEndeSekI(this.manager.getSprachendaten())) {
  177. if (this.manager.pruefeBelegungExistiertMitSchriftlichkeitEinzeln(this.fremdsprachen_neu, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1))
  178. return;
  179. if (SprachendatenManager_1.SprachendatenManager.hatSpracheMit2JahrenDauerEndeSekI(this.manager.getSprachendaten())) {
  180. let zweiteFremdsprache = this.manager.getSprachbelegung(SprachendatenManager_1.SprachendatenManager.getSpracheMit2JahrenDauerEndeSekI(this.manager.getSprachendaten()));
  181. if (!this.manager.pruefeBelegungMitSchriftlichkeitEinzeln(zweiteFremdsprache, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1))
  182. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_13);
  183. return;
  184. }
  185. }
  186. if (!this.manager.pruefeBelegungExistiertMitSchriftlichkeitEinzeln(this.fremdsprachen_neu, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1)) {
  187. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_14);
  188. }
  189. }
  190. /**
  191. * Prüft, ob alle Fremdsprachen in der EF.1 schriftlich belegt wurden.
  192. */
  193. pruefeEF1Schriftlichkeit() {
  194. if (this.fremdsprachen === null)
  195. return;
  196. for (let fachbelegung of this.fremdsprachen)
  197. if (this.manager.pruefeBelegungMitSchriftlichkeitEinzeln(fachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.BELIEBIG, GostHalbjahr_1.GostHalbjahr.EF1) && !this.manager.pruefeBelegungMitSchriftlichkeitEinzeln(fachbelegung, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1)) {
  198. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_12);
  199. break;
  200. }
  201. }
  202. /**
  203. * Zähle alle Fremdsprachen, die durchgehend schriftlich belegt wurden.
  204. * Hierzu zählt auch die Unterrichtssprache eines bilingualen Sachfachs als zweite durchgehende
  205. * Fremdsprache, sofern dieses durchgehende und schriftlich belegt werden kann.
  206. */
  207. pruefeEF1AnzahlDurchgehenedeSprachen() {
  208. let fremdsprachenDurchgehend = this.manager.filterBelegungenMitSchriftlichkeit(this.manager.filterDurchgehendBelegbar(this.fremdsprachen), GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1);
  209. this.anzahl_schriftlich_durchgehend = fremdsprachenDurchgehend.size();
  210. if (this.anzahl_schriftlich_durchgehend !== 1)
  211. return;
  212. let fsDurchgehend = this.manager.getFach(fremdsprachenDurchgehend.get(0));
  213. if (fsDurchgehend === null)
  214. return;
  215. let fremdspracheDurchgehend = GostFachManager_1.GostFachManager.getFremdsprache(fsDurchgehend);
  216. if (fremdspracheDurchgehend === null)
  217. return;
  218. let biliSachfaecherDurchgehendSchriftlich = this.manager.filterBelegungenMitSchriftlichkeit(this.manager.filterDurchgehendBelegbar(this.biliSachfaecher), GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1);
  219. for (let biliSachfach of biliSachfaecherDurchgehendSchriftlich) {
  220. let fach = this.manager.getFach(biliSachfach);
  221. if ((fach === null) || (JavaObject_1.JavaObject.equalsTranspiler(fremdspracheDurchgehend, (fach.biliSprache))))
  222. continue;
  223. this.anzahl_schriftlich_durchgehend++;
  224. return;
  225. }
  226. }
  227. /**
  228. * Prüft, ob die Bedingungen für die Wahl eines bilingualen Sachfaches erfüllt sind, sofern eines
  229. * in der EF.1 belegt wurde.
  230. */
  231. pruefeEF1BilingualeSachfaecher() {
  232. if (this.biliSachfaecher === null)
  233. return;
  234. for (let biliSachfach of this.biliSachfaecher) {
  235. let fach = this.manager.getFach(biliSachfach);
  236. if (fach === null)
  237. continue;
  238. let biliSprache = fach.biliSprache;
  239. if (!SprachendatenManager_1.SprachendatenManager.hatSprachbelegungInSekIMitDauer(this.manager.getSprachendaten(), biliSprache, 2)) {
  240. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_14);
  241. continue;
  242. }
  243. let fremdsprache = this.manager.getSprachbelegung(biliSprache);
  244. if (this.manager.pruefeBelegungMitSchriftlichkeitEinzeln(fremdsprache, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1) || this.manager.pruefeBelegungMitSchriftlichkeitEinzeln(biliSachfach, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1))
  245. continue;
  246. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_4_INFO);
  247. }
  248. }
  249. /**
  250. * Prüfe, ob die Bedingungen für den bilingualen Bildungsgang erfüllt sind, sofern ein solcher vom Schüler gewählt wurde.
  251. */
  252. pruefeEF1BilingualenBildungsgang() {
  253. let biligualeSprache = this.manager.getBiligualenBildungsgang();
  254. if (biligualeSprache === null)
  255. return;
  256. let biliSprache = this.manager.getSprachbelegung(biligualeSprache);
  257. if (!this.manager.pruefeBelegungDurchgehendBelegbar(biliSprache, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1))
  258. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_10);
  259. if ((this.biliSachfaecher === null) || (this.biliSachfaecher.size() < 1)) {
  260. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_15);
  261. return;
  262. }
  263. if (this.biliSachfaecher.size() < 2)
  264. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_11_INFO);
  265. }
  266. pruefeGesamt() {
  267. this.pruefeGesamtSprachenfolge();
  268. this.pruefeGesamtFremdsprache1();
  269. this.pruefeGesamtFremdsprachenfolgeZweiteFremdsprache();
  270. this.pruefeGesamtSchriftlichkeit();
  271. this.pruefeGesamtAnzahlDurchgehenedeSprachen();
  272. this.pruefeGesamtBilingualeSachfaecher();
  273. this.pruefeGesamtBilingualenBildungsgang();
  274. }
  275. /**
  276. * Gesamt: Prüft bei der Sprachenfolge, ob eine laut Sprachenfolge fortgeführte
  277. * Fremdpsrache fehlerhafterweise als neu einsetzende Fremdsprache belegt wurde.
  278. */
  279. pruefeGesamtSprachenfolge() {
  280. if (this.manager.hatFortgefuehrteFremdspracheInSprachendaten(this.fremdsprachen_neu))
  281. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_20);
  282. if (this.manager.hatNeuEinsetzendeFremdspracheInSprachendaten(this.fremdsprachen_fortgefuehrt))
  283. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_21);
  284. if (!SprachendatenManager_1.SprachendatenManager.hatSprachbelegung(this.manager.getSprachendaten(), "E"))
  285. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_22_INFO);
  286. }
  287. /**
  288. * Prüft, ob eine gültige Fremdsprachenbelegung in Bezug auf eine durchgehende Belegung möglich ist.
  289. */
  290. pruefeGesamtFremdsprache1() {
  291. if (this.manager.pruefeBelegungExistiert(this.fremdsprachen_fortgefuehrt, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))
  292. return;
  293. if (this.manager.hatMuttersprachenPruefungEndeEF()) {
  294. if (this.manager.pruefeBelegungExistiert(this.fremdsprachen_neu, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))
  295. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_19_INFO);
  296. else
  297. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_18);
  298. return;
  299. }
  300. if (!this.manager.pruefeBelegungExistiert(this.fremdsprachen_fortgefuehrt, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2)) {
  301. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_10);
  302. return;
  303. }
  304. if (!this.manager.pruefeBelegungExistiert(this.fremdsprachen_neu, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))
  305. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_10);
  306. }
  307. /**
  308. * Prüft, ob eine zweite Fremdsprache in der Sek I vorhanden ist und prüft sonst auf eine neu
  309. * einsetzende Fremdsprache.
  310. */
  311. pruefeGesamtFremdsprachenfolgeZweiteFremdsprache() {
  312. if (this.manager.istSekIZweiteFremdspracheManuellGeprueft())
  313. return;
  314. if (SprachendatenManager_1.SprachendatenManager.hatZweiSprachenMitMin4JahrenDauerEndeSekI(this.manager.getSprachendaten()))
  315. return;
  316. if (SprachendatenManager_1.SprachendatenManager.hatEineSpracheMitMin4JahrenDauerEndeSekI(this.manager.getSprachendaten())) {
  317. if (this.manager.pruefeBelegungExistiert(this.fremdsprachen_neu, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))
  318. return;
  319. if (SprachendatenManager_1.SprachendatenManager.hatSprachfeststellungspruefungAufEFNiveau(this.manager.getSprachendaten()) || this.manager.hatMuttersprachenPruefungEndeEF()) {
  320. return;
  321. }
  322. if (SprachendatenManager_1.SprachendatenManager.hatSpracheMit2JahrenDauerEndeSekI(this.manager.getSprachendaten())) {
  323. let zweiteFremdsprache = this.manager.getSprachbelegung(SprachendatenManager_1.SprachendatenManager.getSpracheMit2JahrenDauerEndeSekI(this.manager.getSprachendaten()));
  324. if (!this.manager.pruefeBelegungMitSchriftlichkeit(zweiteFremdsprache, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2))
  325. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_13);
  326. return;
  327. }
  328. }
  329. if (SprachendatenManager_1.SprachendatenManager.hatSpracheMit2JahrenDauerEndeSekI(this.manager.getSprachendaten())) {
  330. let zweiteFremdsprache = this.manager.getSprachbelegung(SprachendatenManager_1.SprachendatenManager.getSpracheMit2JahrenDauerEndeSekI(this.manager.getSprachendaten()));
  331. if (!this.manager.pruefeBelegungMitSchriftlichkeit(zweiteFremdsprache, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2))
  332. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_13);
  333. if (this.manager.pruefeBelegungExistiert(this.fremdsprachen_neu, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))
  334. return;
  335. if (SprachendatenManager_1.SprachendatenManager.hatSprachfeststellungspruefungAufEFNiveau(this.manager.getSprachendaten()) || this.manager.hatMuttersprachenPruefungEndeEF()) {
  336. return;
  337. }
  338. }
  339. if (this.manager.pruefeBelegungExistiert(this.fremdsprachen_neu, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22)) {
  340. if (SprachendatenManager_1.SprachendatenManager.hatSprachfeststellungspruefungAufEFNiveau(this.manager.getSprachendaten()) || this.manager.hatMuttersprachenPruefungEndeEF()) {
  341. return;
  342. }
  343. return;
  344. }
  345. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_14);
  346. }
  347. /**
  348. * Prüft, ob eine gültige Fremdsprachenbelegung in Bezug auf die Schriftlichkeit und LK-Wahl vohanden ist.
  349. */
  350. pruefeGesamtSchriftlichkeit() {
  351. if (this.manager.pruefeBelegungExistiertHatMindestensEinmalSchriftlichkeit(this.fremdsprachen_neu, GostSchriftlichkeit_1.GostSchriftlichkeit.MUENDLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21))
  352. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_15);
  353. if (this.manager.pruefeBelegungExistiertHatMindestensEinmalKursart(this.fremdsprachen_neu, GostKursart_1.GostKursart.LK, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))
  354. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_17);
  355. if (this.manager.pruefeBelegungExistiertErfuelltNichtFallsBelegt(this.fremdsprachen_fortgefuehrt, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2))
  356. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_12);
  357. if (this.manager.pruefeBelegungDurchgehendBelegtExistiert(this.fremdsprachen_fortgefuehrt, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21))
  358. return;
  359. if (!this.manager.pruefeBelegungDurchgehendBelegtExistiert(this.fremdsprachen_neu, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21)) {
  360. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_11);
  361. return;
  362. }
  363. if (this.manager.hatMuttersprachenPruefungEndeEF() && this.manager.pruefeBelegungExistiertMitSchriftlichkeit(this.fremdsprachen_fortgefuehrt, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2))
  364. return;
  365. if (this.manager.hatMuttersprachenPruefungEndeEF() && this.manager.pruefeBelegungDurchgehendBelegtExistiert(this.fremdsprachen_neu, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21))
  366. return;
  367. if (!this.manager.pruefeBelegungExistiertMitSchriftlichkeit(this.fremdsprachen_fortgefuehrt, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2))
  368. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.FS_16);
  369. }
  370. /**
  371. * Zähle alle Fremdsprachen, die durchgehend schriftlich belegt wurden.
  372. * Hierzu zählt auch die Unterrichtssprache eines bilingualen Sachfachs als zweite durchgehende
  373. * Fremdsprache, sofern dieses durchgehend und schriftlich belegt wurde.
  374. */
  375. pruefeGesamtAnzahlDurchgehenedeSprachen() {
  376. let fremdsprachenDurchgehend = this.manager.filterBelegungen(this.fremdsprachen, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22);
  377. let fremdsprachenDurchgehendSchriftlich = this.manager.filterBelegungenMitSchriftlichkeit(fremdsprachenDurchgehend, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21);
  378. this.anzahl_schriftlich_durchgehend = fremdsprachenDurchgehendSchriftlich.size();
  379. if (this.anzahl_schriftlich_durchgehend !== 1)
  380. return;
  381. let fsDurchgehend = this.manager.getFach(fremdsprachenDurchgehendSchriftlich.get(0));
  382. if (fsDurchgehend === null)
  383. return;
  384. let fremdspracheDurchgehend = GostFachManager_1.GostFachManager.getFremdsprache(fsDurchgehend);
  385. if (fremdspracheDurchgehend === null)
  386. return;
  387. let biliSachfaecherDurchgehend = this.manager.filterBelegungen(this.biliSachfaecher, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22);
  388. let biliSachfaecherDurchgehendSchriftlich = this.manager.filterBelegungenMitSchriftlichkeit(biliSachfaecherDurchgehend, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21);
  389. for (let biliSachfach of biliSachfaecherDurchgehendSchriftlich) {
  390. let fach = this.manager.getFach(biliSachfach);
  391. if ((fach === null) || (JavaObject_1.JavaObject.equalsTranspiler(fremdspracheDurchgehend, (fach.biliSprache))))
  392. continue;
  393. this.anzahl_schriftlich_durchgehend++;
  394. return;
  395. }
  396. }
  397. /**
  398. * Prüft, ob die Bedingungen für die Wahl eines bilingualen Sachfaches erfüllt sind, sofern eines
  399. * belegt wurde.
  400. */
  401. pruefeGesamtBilingualeSachfaecher() {
  402. if (this.biliSachfaecher === null)
  403. return;
  404. for (let biliSachfach of this.biliSachfaecher) {
  405. let biliFach = this.manager.getFach(biliSachfach);
  406. if ((biliFach === null) || (!SprachendatenManager_1.SprachendatenManager.hatSprachbelegungInSekIMitDauer(this.manager.getSprachendaten(), biliFach.biliSprache, 2)))
  407. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_14);
  408. }
  409. }
  410. /**
  411. * Prüfe, ob die Bedingungen für ein bilinguales Abitur erfüllt sind, sofern ein solches vom
  412. * Schüler gewählt wurde.
  413. */
  414. pruefeGesamtBilingualenBildungsgang() {
  415. let biligualeSprache = this.manager.getBiligualenBildungsgang();
  416. if (biligualeSprache === null)
  417. return;
  418. let biliSprache = this.manager.getSprachbelegung(biligualeSprache);
  419. if ((!this.manager.pruefeBelegungMitSchriftlichkeit(biliSprache, GostSchriftlichkeit_1.GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2) || (!this.manager.pruefeBelegungMitKursart(biliSprache, GostKursart_1.GostKursart.LK, GostHalbjahr_1.GostHalbjahr.Q11, GostHalbjahr_1.GostHalbjahr.Q12, GostHalbjahr_1.GostHalbjahr.Q21, GostHalbjahr_1.GostHalbjahr.Q22))))
  420. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_10);
  421. let biliSachfaecherEF = this.manager.filterBelegungen(this.biliSachfaecher, GostHalbjahr_1.GostHalbjahr.EF1, GostHalbjahr_1.GostHalbjahr.EF2);
  422. if (biliSachfaecherEF.size() < 1) {
  423. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_15);
  424. return;
  425. }
  426. if (biliSachfaecherEF.size() < 2)
  427. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_11_INFO);
  428. let hatBiliSachfaecherDurchgehendSchriftlich = false;
  429. if (this.biliSachfaecher !== null) {
  430. for (let fach of this.biliSachfaecher) {
  431. if (this.manager.pruefeDurchgaengigkeitSchriftlich(fach)) {
  432. hatBiliSachfaecherDurchgehendSchriftlich = true;
  433. break;
  434. }
  435. }
  436. }
  437. if (!hatBiliSachfaecherDurchgehendSchriftlich)
  438. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_12);
  439. if (!this.manager.pruefeExistiertAbiFach(this.biliSachfaecher, GostAbiturFach_1.GostAbiturFach.AB3, GostAbiturFach_1.GostAbiturFach.AB4))
  440. this.addFehler(GostBelegungsfehler_1.GostBelegungsfehler.BIL_13);
  441. }
  442. /**
  443. * Gibt die Anzahl der durchgehend schriftlich belegten bzw. belegbaren Fremdsprachen zurück.
  444. * Durchgehend schriftlich bedeutet, dass das Fach mind. von EF.1 bis Q2.1 schriftlich belegt wurde.
  445. * Hierfür kommen Fremdsprachen und ggf. ein bilinguales Sachfach in Frage, dessen Unterrichtssprache
  446. * nicht durchgehend schriftlich belegt.
  447. *
  448. * @return die Anzahl der durchgehend schriftlich belegten bzw. belegbaren Fremdsprachen zurück.
  449. */
  450. getAnzahlDurchgehendSchritflichBelegt() {
  451. return this.anzahl_schriftlich_durchgehend;
  452. }
  453. isTranspiledInstanceOf(name) {
  454. return ['de.nrw.schule.svws.core.abschluss.gost.belegpruefung.Fremdsprachen', 'de.nrw.schule.svws.core.abschluss.gost.GostBelegpruefung'].includes(name);
  455. }
  456. }
  457. exports.Fremdsprachen = Fremdsprachen;
  458. function cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Fremdsprachen(obj) {
  459. return obj;
  460. }
  461. exports.cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Fremdsprachen = cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_Fremdsprachen;
  462. //# sourceMappingURL=Fremdsprachen.js.map