GesellschaftswissenschaftenUndReligion.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  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 { AbiturFachbelegung, cast_de_nrw_schule_svws_core_data_gost_AbiturFachbelegung } from '../../../../core/data/gost/AbiturFachbelegung';
  4. import { GostBelegpruefungsArt, cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegpruefungsArt } from '../../../../core/abschluss/gost/GostBelegpruefungsArt';
  5. import { AbiturFachbelegungHalbjahr, cast_de_nrw_schule_svws_core_data_gost_AbiturFachbelegungHalbjahr } from '../../../../core/data/gost/AbiturFachbelegungHalbjahr';
  6. import { GostBelegpruefung, cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegpruefung } from '../../../../core/abschluss/gost/GostBelegpruefung';
  7. import { AbiturdatenManager, cast_de_nrw_schule_svws_core_abschluss_gost_AbiturdatenManager } from '../../../../core/abschluss/gost/AbiturdatenManager';
  8. import { GostFachManager, cast_de_nrw_schule_svws_core_abschluss_gost_GostFachManager } from '../../../../core/abschluss/gost/GostFachManager';
  9. import { GostKursart, cast_de_nrw_schule_svws_core_types_gost_GostKursart } from '../../../../core/types/gost/GostKursart';
  10. import { GostFachbereich, cast_de_nrw_schule_svws_core_types_gost_GostFachbereich } from '../../../../core/types/gost/GostFachbereich';
  11. import { GostSchriftlichkeit, cast_de_nrw_schule_svws_core_types_gost_GostSchriftlichkeit } from '../../../../core/types/gost/GostSchriftlichkeit';
  12. import { GostHalbjahr, cast_de_nrw_schule_svws_core_types_gost_GostHalbjahr } from '../../../../core/types/gost/GostHalbjahr';
  13. import { List, cast_java_util_List } from '../../../../java/util/List';
  14. import { Vector, cast_java_util_Vector } from '../../../../java/util/Vector';
  15. import { GostBelegungsfehler, cast_de_nrw_schule_svws_core_abschluss_gost_GostBelegungsfehler } from '../../../../core/abschluss/gost/GostBelegungsfehler';
  16. export class GesellschaftswissenschaftenUndReligion extends GostBelegpruefung {
  17. private gesellschaftswissenschaften : List<AbiturFachbelegung> | null = null;
  18. private geschichte : List<AbiturFachbelegung> | null = null;
  19. private sozialwissenschaften : List<AbiturFachbelegung> | null = null;
  20. private philosophie : AbiturFachbelegung | null = null;
  21. private sonstige_gesellschaftswissenschaften : List<AbiturFachbelegung> | null = null;
  22. private religion : List<AbiturFachbelegung> | null = null;
  23. private zusatzkursFachbelegungen : Vector<AbiturFachbelegung> | null = null;
  24. /**
  25. * Erstellt eine neue Belegprüfung für den Bereich der Gesellschaftswissenschaften und Religion.
  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.gesellschaftswissenschaften = this.manager.getFachbelegungen(GostFachbereich.GESELLSCHAFTSWISSENSCHAFTLICH);
  35. this.geschichte = this.manager.getFachbelegungen(GostFachbereich.GESCHICHTE);
  36. this.sozialwissenschaften = this.manager.getFachbelegungen(GostFachbereich.SOZIALWISSENSCHAFTEN);
  37. this.philosophie = this.manager.getFachbelegung(GostFachbereich.PHILOSOPHIE);
  38. this.sonstige_gesellschaftswissenschaften = this.manager.getFachbelegungen(GostFachbereich.GESELLSCHAFTSWISSENSCHAFTLICH_SONSTIGE);
  39. this.religion = this.manager.getFachbelegungen(GostFachbereich.RELIGION);
  40. this.zusatzkursFachbelegungen = new Vector();
  41. }
  42. protected pruefeEF1() : void {
  43. this.pruefeGesellschaftswissenschaftenEF1();
  44. this.pruefeReligionEF1();
  45. }
  46. /**
  47. * EF1-Prüfung Punkte 8-10:
  48. * Prüfe, ob eine Gesellschaftswissenschaft in EF.1 schriftlich belegt wurde und durchgängig belegbar ist
  49. * und ob Geschichte belegt wurde
  50. * und ob Sozialwissenschaften belegt wurde
  51. */
  52. private pruefeGesellschaftswissenschaftenEF1() : void {
  53. if (!this.manager.pruefeBelegungDurchgehendBelegbarExistiert(this.gesellschaftswissenschaften, GostSchriftlichkeit.BELIEBIG, GostHalbjahr.EF1))
  54. this.addFehler(GostBelegungsfehler.GW_10);
  55. if (!this.manager.pruefeBelegungExistiertMitSchriftlichkeitEinzeln(this.gesellschaftswissenschaften, GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr.EF1))
  56. this.addFehler(GostBelegungsfehler.GW_11);
  57. if (this.manager.zaehleBelegungInHalbjahren(this.geschichte, GostHalbjahr.EF1) <= 0)
  58. this.addFehler(GostBelegungsfehler.GE_1_INFO);
  59. if (this.manager.zaehleBelegungInHalbjahren(this.sozialwissenschaften, GostHalbjahr.EF1) <= 0)
  60. this.addFehler(GostBelegungsfehler.SW_1_INFO);
  61. }
  62. /**
  63. * EF1-Prüfung Punkt 11:
  64. * Prüfe, ob Religion in EF.1 belegt wurde oder ob Philosophie und eine weitere durchgehend belegbare Gesellschaftswissenschaft belegt wurde.
  65. * Falls Philosophie als Ersatz für Religion gewählt wurde, zählt es nicht als durchgehend belegte Gesellschaftswissenschaft.
  66. */
  67. private pruefeReligionEF1() : void {
  68. if (this.manager.pruefeBelegungExistiert(this.religion, GostHalbjahr.EF1))
  69. return;
  70. if (!this.manager.pruefeBelegung(this.philosophie, GostHalbjahr.EF1)) {
  71. this.addFehler(GostBelegungsfehler.RE_10);
  72. } else
  73. if ((!this.manager.pruefeBelegungDurchgehendBelegbarExistiert(this.geschichte, GostSchriftlichkeit.BELIEBIG, GostHalbjahr.EF1)) && (!this.manager.pruefeBelegungDurchgehendBelegbarExistiert(this.sozialwissenschaften, GostSchriftlichkeit.BELIEBIG, GostHalbjahr.EF1)) && (!this.manager.pruefeBelegungDurchgehendBelegbarExistiert(this.sonstige_gesellschaftswissenschaften, GostSchriftlichkeit.BELIEBIG, GostHalbjahr.EF1))) {
  74. this.addFehler(GostBelegungsfehler.RE_10);
  75. }
  76. }
  77. protected pruefeGesamt() : void {
  78. this.pruefeSchriftlichkeitEF();
  79. this.pruefeDurchgaengigeBelegung();
  80. this.pruefeDurchgaengigeBelegungUndSchriftlich();
  81. this.pruefeZusatzkurs(this.geschichte);
  82. this.pruefeBelegungGeschichte();
  83. this.pruefeZusatzkurs(this.sozialwissenschaften);
  84. this.pruefeBelegungSozialwissenschaften();
  85. this.pruefeReligionEF();
  86. this.pruefeReligionQ1();
  87. this.pruefeReligionKontinuitaet();
  88. }
  89. /**
  90. * Gesamtprüfung Punkt 39:
  91. * Prüfe, on in EF.1 und EF.2 jeweils ein Fach der Gesellschaftswissenschaften schriftlich belegt wurde
  92. */
  93. private pruefeSchriftlichkeitEF() : void {
  94. if ((!this.manager.pruefeBelegungExistiertMitSchriftlichkeitEinzeln(this.gesellschaftswissenschaften, GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr.EF1)) || (!this.manager.pruefeBelegungExistiertMitSchriftlichkeitEinzeln(this.gesellschaftswissenschaften, GostSchriftlichkeit.SCHRIFTLICH, GostHalbjahr.EF2)))
  95. this.addFehler(GostBelegungsfehler.GW_11);
  96. }
  97. /**
  98. * Gesamtprüfung Punkt 38:
  99. * Prüfe, ob ein Fach der Gesellschaftswissenschaften von EF.1 bis Q2.2 durchgängig belegt wurde
  100. * - Zusatzkurse zählen hier nicht als Belegung
  101. */
  102. private pruefeDurchgaengigeBelegung() : void {
  103. if (!this.manager.pruefeBelegungExistiert(this.gesellschaftswissenschaften, GostHalbjahr.EF1, GostHalbjahr.EF2, GostHalbjahr.Q11, GostHalbjahr.Q12, GostHalbjahr.Q21, GostHalbjahr.Q22))
  104. this.addFehler(GostBelegungsfehler.GW_10);
  105. }
  106. /**
  107. * Gesamtprüfung Punkt 40:
  108. * Prüfe, ob ein Fach der Gesellschaftswissenschaften oder Religionslehre von EF.1 bis Q2.2 belegt
  109. * und von Q1.1 bis Q2.1 schriftlich belegt wurde, damit es als potentielles Abiturfach zur Verfügung steht.
  110. * - Zusatzkurse zählen hier nicht als Belegung
  111. */
  112. private pruefeDurchgaengigeBelegungUndSchriftlich() : void {
  113. if (this.manager.pruefeBelegungExistiertDurchgehendSchriftlich(this.gesellschaftswissenschaften))
  114. return;
  115. if (this.manager.pruefeBelegungExistiertDurchgehendSchriftlich(this.religion))
  116. return;
  117. this.addFehler(GostBelegungsfehler.GW_12);
  118. }
  119. /**
  120. * Gesamtprüfung Punkte 27, 29 und 30:
  121. * Prüft, ob der Zusatzkurs genau zwei mal belegt wurde
  122. * und ob ein Zusatzkurs belegt wurde, obwohl im Halbjahr zuvor ein Geschichtskurs belegt wurde.
  123. *
  124. * @param fachbelegungen die Fachbelegung für Geschichte oder Sozialwissehschaften
  125. */
  126. private pruefeZusatzkurs(fachbelegungen : List<AbiturFachbelegung> | null) : void {
  127. if ((fachbelegungen === null) || (fachbelegungen.size() === 0))
  128. return;
  129. fachbelegungen = this.manager.filterBelegungKursartExistiert(fachbelegungen, GostKursart.ZK);
  130. if (fachbelegungen.size() === 0)
  131. return;
  132. if (fachbelegungen.size() > 1)
  133. this.addFehler(GostBelegungsfehler.ZK_13);
  134. for (let fachbelegung of fachbelegungen) {
  135. let fach : GostFach | null = this.manager.getFach(fachbelegung);
  136. if ((fach === null) || (GostFachManager.istBilingual(fach)))
  137. this.addFehler(GostBelegungsfehler.ZK_13);
  138. let halbjahre : List<GostHalbjahr> = this.manager.getHalbjahreKursart(fachbelegung, GostKursart.ZK);
  139. if (halbjahre.size() === 2) {
  140. if (((this.manager.pruefeBelegungMitKursart(fachbelegung, GostKursart.ZK, GostHalbjahr.Q11, GostHalbjahr.Q12)) || (this.manager.pruefeBelegungMitKursart(fachbelegung, GostKursart.ZK, GostHalbjahr.Q12, GostHalbjahr.Q21)) || (this.manager.pruefeBelegungMitKursart(fachbelegung, GostKursart.ZK, GostHalbjahr.Q21, GostHalbjahr.Q22)))) {
  141. if (this.zusatzkursFachbelegungen !== null)
  142. this.zusatzkursFachbelegungen.add(fachbelegung);
  143. }
  144. } else
  145. if (halbjahre.size() > 1) {
  146. this.addFehler(GostBelegungsfehler.ZK_12);
  147. }
  148. if (halbjahre.size() > 0) {
  149. let prevHalbjahr : GostHalbjahr | null = halbjahre.get(0).previous();
  150. if ((prevHalbjahr !== null) && (this.manager.pruefeBelegung(fachbelegung, prevHalbjahr)))
  151. this.addFehler(GostBelegungsfehler.ZK_10);
  152. }
  153. }
  154. }
  155. /**
  156. * Gesamtprüfung Punkt 41:
  157. * Prüft, ob Geschichte korrekt belegt wurde (mind. von EF.1 bis Q1.2 oder als Zusatzkurs)
  158. */
  159. private pruefeBelegungGeschichte() : void {
  160. if ((this.geschichte === null) || (this.geschichte.size() <= 0)) {
  161. this.addFehler(GostBelegungsfehler.GE_10);
  162. return;
  163. }
  164. if (this.manager.pruefeBelegungExistiert(this.geschichte, GostHalbjahr.EF1, GostHalbjahr.EF2, GostHalbjahr.Q11, GostHalbjahr.Q12))
  165. return;
  166. if (this.zusatzkursFachbelegungen !== null)
  167. for (let zkBelegung of this.zusatzkursFachbelegungen)
  168. if (this.geschichte.contains(zkBelegung))
  169. return;
  170. this.addFehler(GostBelegungsfehler.GE_10);
  171. }
  172. /**
  173. * Gesamtprüfung Punkt 42:
  174. * Prüft, ob Sozialwissenschaften korrekt belegt wurde (mind. von EF.1 bis Q1.2 oder als Zusatzkurs)
  175. */
  176. private pruefeBelegungSozialwissenschaften() : void {
  177. if ((this.sozialwissenschaften === null) || (this.sozialwissenschaften.size() <= 0)) {
  178. this.addFehler(GostBelegungsfehler.SW_10);
  179. return;
  180. }
  181. if (this.manager.pruefeBelegungExistiert(this.sozialwissenschaften, GostHalbjahr.EF1, GostHalbjahr.EF2, GostHalbjahr.Q11, GostHalbjahr.Q12))
  182. return;
  183. if (this.zusatzkursFachbelegungen !== null)
  184. for (let zkBelegung of this.zusatzkursFachbelegungen)
  185. if (this.sozialwissenschaften.contains(zkBelegung))
  186. return;
  187. this.addFehler(GostBelegungsfehler.SW_10);
  188. }
  189. /**
  190. * Gesamtprüfung Punkte 43:
  191. * Prüft die Belegung von Religion und Philosophie in der EF. Wird Philosophie als Ersatz belegt, so wird auch geprüft,
  192. * ob eine weitere Gesellschaftswissenschaft belegt wurde.
  193. */
  194. private pruefeReligionEF() : void {
  195. for (let halbjahr of GostHalbjahr.getEinfuehrungsphase()) {
  196. if (this.manager.pruefeBelegungExistiertEinzeln(this.religion, halbjahr))
  197. continue;
  198. if ((!this.manager.pruefeBelegung(this.philosophie, halbjahr)) || (this.manager.pruefeDurchgaengigkeit(this.philosophie) && (this.manager.zaehleBelegungInHalbjahren(this.gesellschaftswissenschaften, halbjahr) <= 1))) {
  199. this.addFehler(GostBelegungsfehler.RE_10);
  200. break;
  201. }
  202. }
  203. }
  204. /**
  205. * Gesamtprüfung Punkt 44:
  206. * Prüft die Belegung von Religion und Philosophie. Wird Philosophie als Ersatz belegt, so wird auch geprüft, ob eine weitere
  207. * Gesellschaftswissenschaft belegt wurde.
  208. */
  209. private pruefeReligionQ1() : void {
  210. for (let halbjahr of GostHalbjahr.getHalbjahreFromJahrgang("Q1")) {
  211. if (this.manager.pruefeBelegungExistiertEinzeln(this.religion, halbjahr))
  212. continue;
  213. if (!this.manager.pruefeBelegung(this.philosophie, halbjahr)) {
  214. this.addFehler(GostBelegungsfehler.RE_10);
  215. return;
  216. }
  217. if (this.manager.pruefeDurchgaengigkeit(this.philosophie) && (this.manager.zaehleDurchgaengigeBelegungen(this.gesellschaftswissenschaften) > 1))
  218. continue;
  219. if (!this.manager.pruefeDurchgaengigkeit(this.philosophie) && (this.manager.zaehleDurchgaengigeBelegungen(this.gesellschaftswissenschaften) > 0))
  220. continue;
  221. if (this.manager.zaehleBelegungInHalbjahren(this.sonstige_gesellschaftswissenschaften, halbjahr) > 0)
  222. continue;
  223. if ((halbjahr as unknown === GostHalbjahr.Q11 as unknown) && (this.manager.pruefeBelegungExistiertEinzeln(this.geschichte, GostHalbjahr.Q11) || this.manager.pruefeBelegungExistiertEinzeln(this.sozialwissenschaften, GostHalbjahr.Q11)))
  224. continue;
  225. this.addFehler(GostBelegungsfehler.RE_10);
  226. break;
  227. }
  228. }
  229. /**
  230. * Gesamtprüfung Punkt 55:
  231. * Prüft, ob Fehler bei der Kontinuität bei Philosophie und Religion nur durch die Ersatzfachregelung bei Religion
  232. * zustandekommen und damit zulässig sind.
  233. */
  234. private pruefeReligionKontinuitaet() : void {
  235. if (this.philosophie === null)
  236. return;
  237. for (let belegung of this.philosophie.belegungen) {
  238. if (belegung === null)
  239. continue;
  240. let halbjahr : GostHalbjahr | null = GostHalbjahr.fromKuerzel(belegung.halbjahrKuerzel);
  241. if (halbjahr === null)
  242. continue;
  243. let prevHalbjahr : GostHalbjahr | null = halbjahr.previous();
  244. if (prevHalbjahr === null)
  245. continue;
  246. if (this.manager.pruefeBelegung(this.philosophie, prevHalbjahr))
  247. continue;
  248. if (this.manager.pruefeBelegungExistiertEinzeln(this.religion, halbjahr))
  249. this.addFehler(GostBelegungsfehler.E1BEL_10);
  250. if (!this.manager.pruefeBelegungExistiertEinzeln(this.religion, prevHalbjahr))
  251. this.addFehler(GostBelegungsfehler.E1BEL_10);
  252. }
  253. }
  254. isTranspiledInstanceOf(name : string): boolean {
  255. return ['de.nrw.schule.svws.core.abschluss.gost.belegpruefung.GesellschaftswissenschaftenUndReligion', 'de.nrw.schule.svws.core.abschluss.gost.GostBelegpruefung'].includes(name);
  256. }
  257. }
  258. export function cast_de_nrw_schule_svws_core_abschluss_gost_belegpruefung_GesellschaftswissenschaftenUndReligion(obj : unknown) : GesellschaftswissenschaftenUndReligion {
  259. return obj as GesellschaftswissenschaftenUndReligion;
  260. }