Fremdsprachen.ts 27 KB

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