AbiFaecher.ts 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import { JavaObject, cast_java_lang_Object } from '../../../../java/lang/JavaObject';
  2. import { GostFach, cast_de_nrw_schule_svws_core_data_gost_GostFach } from '../../../../core/data/gost/GostFach';
  3. import { GostAbiturFach, cast_de_nrw_schule_svws_core_types_gost_GostAbiturFach } from '../../../../core/types/gost/GostAbiturFach';
  4. import { HashMap, cast_java_util_HashMap } from '../../../../java/util/HashMap';
  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 { GostFachbereich, cast_de_nrw_schule_svws_core_types_gost_GostFachbereich } from '../../../../core/types/gost/GostFachbereich';
  10. import { GostSchriftlichkeit, cast_de_nrw_schule_svws_core_types_gost_GostSchriftlichkeit } from '../../../../core/types/gost/GostSchriftlichkeit';
  11. import { GostHalbjahr, cast_de_nrw_schule_svws_core_types_gost_GostHalbjahr } from '../../../../core/types/gost/GostHalbjahr';
  12. import { List, cast_java_util_List } from '../../../../java/util/List';
  13. import { GostBelegungsfehler, cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegungsfehler } from '../../../../core/abschluss/gost/GostBelegungsfehler';
  14. import { HashSet, cast_java_util_HashSet } from '../../../../java/util/HashSet';
  15. export class AbiFaecher extends GostBelegpruefung {
  16. private mapAbiturFachbelegungen : HashMap<GostAbiturFach, AbiturFachbelegung> | null = null;
  17. private anzahlAbiFaecher : number = 0;
  18. private anzahlDeutschMatheFremdsprache : number = 0;
  19. private anzahlFremdsprachen : number = 0;
  20. private anzahlSportReligion : number = 0;
  21. private hatAufgabenfeldI : boolean = false;
  22. private hatAufgabenfeldII : boolean = false;
  23. private hatAufgabenfeldIII : boolean = false;
  24. /**
  25. * Erstellt eine neue Belegprüfung für die Projektkurse.
  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.mapAbiturFachbelegungen = new HashMap();
  35. this.anzahlAbiFaecher = 0;
  36. this.anzahlDeutschMatheFremdsprache = 0;
  37. this.anzahlFremdsprachen = 0;
  38. this.anzahlSportReligion = 0;
  39. this.hatAufgabenfeldI = false;
  40. this.hatAufgabenfeldII = false;
  41. this.hatAufgabenfeldIII = false;
  42. let alleFachbelegungen : List<AbiturFachbelegung> = this.manager.getFachbelegungen();
  43. for (let i : number = 0; i < alleFachbelegungen.size(); i++){
  44. let fachbelegung : AbiturFachbelegung | null = alleFachbelegungen.get(i);
  45. let abiturFach : GostAbiturFach | null = GostAbiturFach.fromID(fachbelegung.abiturFach);
  46. if (abiturFach === null)
  47. continue;
  48. this.mapAbiturFachbelegungen.put(abiturFach, fachbelegung);
  49. this.anzahlAbiFaecher++;
  50. let fach : GostFach | null = this.manager.getFach(fachbelegung);
  51. if (fach === null)
  52. continue;
  53. if (GostFachbereich.FREMDSPRACHE.hat(fach) || GostFachbereich.DEUTSCH.hat(fach))
  54. this.hatAufgabenfeldI = true;
  55. if (GostFachbereich.GESELLSCHAFTSWISSENSCHAFTLICH_MIT_RELIGION.hat(fach))
  56. this.hatAufgabenfeldII = true;
  57. if (GostFachbereich.MATHEMATISCH_NATURWISSENSCHAFTLICH.hat(fach))
  58. this.hatAufgabenfeldIII = true;
  59. if (GostFachbereich.FREMDSPRACHE.hat(fach) || GostFachbereich.DEUTSCH.hat(fach) || GostFachbereich.MATHEMATIK.hat(fach))
  60. this.anzahlDeutschMatheFremdsprache++;
  61. if (GostFachbereich.FREMDSPRACHE.hat(fach))
  62. this.anzahlFremdsprachen++;
  63. if (GostFachbereich.SPORT.hat(fach) || GostFachbereich.RELIGION.hat(fach))
  64. this.anzahlSportReligion++;
  65. }
  66. }
  67. protected pruefeEF1() : void {
  68. }
  69. protected pruefeGesamt() : void {
  70. this.pruefeLK1();
  71. this.pruefeAnzahlUndAufgabenfelderAbiFaecher();
  72. this.pruefeMehrfacheAbiturfaecher();
  73. this.pruefeSchriftlichkeitAB3undAB4();
  74. }
  75. /**
  76. * Gesamtprüfung Punkt 70:
  77. * Prüfe, ob der erste LK eine fortgeführte Fremdsprache, eine klassische Naturwissenschaft, Mathematik oder Deutsch ist
  78. */
  79. private pruefeLK1() : void {
  80. let lk1 : AbiturFachbelegung | null = this.mapAbiturFachbelegungen === null ? null : this.mapAbiturFachbelegungen.get(GostAbiturFach.LK1);
  81. let lk1fach : GostFach | null = this.manager.getFach(lk1);
  82. if ((lk1 === null) || (lk1fach === null) || !((GostFachbereich.DEUTSCH.hat(lk1fach)) || (GostFachbereich.FREMDSPRACHE.hat(lk1fach) && !lk1.istFSNeu) || (GostFachbereich.MATHEMATIK.hat(lk1fach)) || (GostFachbereich.NATURWISSENSCHAFTLICH_KLASSISCH.hat(lk1fach))))
  83. this.addFehler(GostBelegungsfehler.LK1_11);
  84. }
  85. /**
  86. * Gesamtprüfung Punkt 71-74:
  87. * Prüfe, ob die Zahl der Abiturfächer 4 ist und diese alle Aufgabenfelder abdecken
  88. * und ob mindestens 2 Fächer im Bereich Deutsch, Fremdsprache, Mathematik liegen
  89. * und ob maximale 1 Fach im Bereich Sport und Religion liegt
  90. * und ob Sport nicht als erstes oder drittes Abiturfach gewählt wurde
  91. */
  92. private pruefeAnzahlUndAufgabenfelderAbiFaecher() : void {
  93. if ((this.anzahlAbiFaecher !== 4) || (!this.hatAufgabenfeldI) || (!this.hatAufgabenfeldII) || (!this.hatAufgabenfeldIII))
  94. this.addFehler(GostBelegungsfehler.LK1_13);
  95. if (this.anzahlDeutschMatheFremdsprache < 2)
  96. this.addFehler(GostBelegungsfehler.ABI_10);
  97. if ((this.anzahlDeutschMatheFremdsprache < 3) && (this.anzahlFremdsprachen > 1))
  98. this.addFehler(GostBelegungsfehler.ABI_19);
  99. if (this.anzahlSportReligion > 1)
  100. this.addFehler(GostBelegungsfehler.ABI_11);
  101. let lk1 : AbiturFachbelegung | null = this.mapAbiturFachbelegungen === null ? null : this.mapAbiturFachbelegungen.get(GostAbiturFach.LK1);
  102. let lk1fach : GostFach | null = this.manager.getFach(lk1);
  103. let ab3 : AbiturFachbelegung | null = this.mapAbiturFachbelegungen === null ? null : this.mapAbiturFachbelegungen.get(GostAbiturFach.AB3);
  104. let ab3fach : GostFach | null = this.manager.getFach(ab3);
  105. if (((lk1fach !== null) && (GostFachbereich.SPORT.hat(lk1fach.kuerzel))) || ((ab3fach !== null) && (GostFachbereich.SPORT.hat(ab3fach.kuerzel))))
  106. this.addFehler(GostBelegungsfehler.ABI_15);
  107. }
  108. /**
  109. * Gesamtprüfung: Prüfe, ob eines der Abiturfächer mehrfach belegt wurde. Es ist nicht zulässig
  110. * Abiturfächer mehrfach belegt zu haben.
  111. */
  112. private pruefeMehrfacheAbiturfaecher() : void {
  113. let abiFaecher : HashSet<GostAbiturFach> = new HashSet();
  114. let alleFachbelegungen : List<AbiturFachbelegung> = this.manager.getFachbelegungen();
  115. for (let i : number = 0; i < alleFachbelegungen.size(); i++){
  116. let fachbelegung : AbiturFachbelegung | null = alleFachbelegungen.get(i);
  117. let abiturFach : GostAbiturFach | null = GostAbiturFach.fromID(fachbelegung.abiturFach);
  118. if (abiturFach === null)
  119. continue;
  120. if (!abiFaecher.contains(abiturFach)) {
  121. abiFaecher.add(abiturFach);
  122. continue;
  123. }
  124. switch (abiturFach) {
  125. case GostAbiturFach.LK1:
  126. this.addFehler(GostBelegungsfehler.ABI_21);
  127. break;
  128. case GostAbiturFach.LK2:
  129. this.addFehler(GostBelegungsfehler.ABI_22);
  130. break;
  131. case GostAbiturFach.AB3:
  132. this.addFehler(GostBelegungsfehler.ABI_23);
  133. break;
  134. case GostAbiturFach.AB4:
  135. this.addFehler(GostBelegungsfehler.ABI_24);
  136. break;
  137. }
  138. }
  139. }
  140. /**
  141. * Gesamtprüfung Punkte 76 und 77:
  142. * Prüfe ob das 3. Abiturfach von Q1.1 bis Q2.2 schriftlich belegt wurde
  143. * und on das 4. Abiturfach von Q1.1 bis Q2.1 schritlich und in Q2.2 mündlich belegt wurde
  144. *
  145. */
  146. private pruefeSchriftlichkeitAB3undAB4() : void {
  147. let ab3 : AbiturFachbelegung | null = this.mapAbiturFachbelegungen === null ? null : this.mapAbiturFachbelegungen.get(GostAbiturFach.AB3);
  148. if (ab3 !== null) {
  149. if (!this.manager.pruefeBelegungMitSchriftlichkeit(ab3, GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr.Q11, GostHalbjahr.Q12, GostHalbjahr.Q21))
  150. this.addFehler(GostBelegungsfehler.ABI_17);
  151. if (!this.manager.pruefeBelegungMitSchriftlichkeitEinzeln(ab3, GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr.Q22))
  152. this.addFehler(GostBelegungsfehler.ABI_12);
  153. }
  154. let ab4 : AbiturFachbelegung | null = this.mapAbiturFachbelegungen === null ? null : this.mapAbiturFachbelegungen.get(GostAbiturFach.AB4);
  155. if (ab4 !== null) {
  156. if (!this.manager.pruefeBelegungMitSchriftlichkeit(ab4, GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr.Q11, GostHalbjahr.Q12, GostHalbjahr.Q21))
  157. this.addFehler(GostBelegungsfehler.ABI_18);
  158. if (!this.manager.pruefeBelegungMitSchriftlichkeitEinzeln(ab4, GostSchriftlichkeit.MUENDLICH, GostHalbjahr.Q22))
  159. this.addFehler(GostBelegungsfehler.ABI_13);
  160. }
  161. }
  162. /**
  163. * Liefert die zugehörige Abitur-Fachbelegung zurück.
  164. *
  165. * @param abifach die Art des Abifachs (1., 2., 3. oder 4. Fach)
  166. *
  167. * @return die Abitur-Fachbelegung oder null, falls es (noch) nicht festgelegt wurde
  168. */
  169. public getAbiturfach(abifach : GostAbiturFach | null) : AbiturFachbelegung | null {
  170. return this.mapAbiturFachbelegungen === null ? null : this.mapAbiturFachbelegungen.get(abifach);
  171. }
  172. isTranspiledInstanceOf(name : string): boolean {
  173. return ['de.nrw.schule.svws.core.abschluss.gost.belegpruefung.AbiFaecher', 'de.nrw.schule.svws.core.abschluss.gost.GostBelegpruefung'].includes(name);
  174. }
  175. }
  176. export function cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_AbiFaecher(obj : unknown) : AbiFaecher {
  177. return obj as AbiFaecher;
  178. }