SprachendatenManager.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.cast_de_nrw_schule_svws_core_SprachendatenManager = exports.SprachendatenManager = void 0;
  4. const JavaObject_1 = require("../java/lang/JavaObject");
  5. const JavaInteger_1 = require("../java/lang/JavaInteger");
  6. const Sprachpruefungniveau_1 = require("../core/types/Sprachpruefungniveau");
  7. const Vector_1 = require("../java/util/Vector");
  8. const HashSet_1 = require("../java/util/HashSet");
  9. class SprachendatenManager extends JavaObject_1.JavaObject {
  10. constructor() {
  11. super();
  12. }
  13. /**
  14. * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache existiert.
  15. *
  16. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  17. * @param sprache das einstellige Kürzel der Sprache
  18. *
  19. * @return true, falls eine Belegung existiert und ansonsten false
  20. */
  21. static hatSprachbelegung(sprachendaten, sprache) {
  22. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
  23. return false;
  24. }
  25. return SprachendatenManager.getSprachbelegung(sprachendaten, sprache) !== null;
  26. }
  27. /**
  28. * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache in der Sekundarstufe I existiert.
  29. *
  30. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  31. * @param sprache das einstellige Kürzel der Sprache
  32. *
  33. * @return true, falls eine Belegung existiert und ansonsten false
  34. */
  35. static hatSprachbelegungInSekI(sprachendaten, sprache) {
  36. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
  37. return false;
  38. }
  39. let belegung = SprachendatenManager.getSprachbelegung(sprachendaten, sprache);
  40. if (belegung !== null && SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang) > 0) {
  41. return SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang) <= 10;
  42. }
  43. return false;
  44. }
  45. /**
  46. * Prüft, ob eine unterrichtliche Belegung der übergebenen Sprache in der Sekundarstufe I mit der angegebenen Belegungsdauer existiert.
  47. *
  48. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  49. * @param sprache das einstellige Kürzel der Sprache
  50. * @param mindestBelegdauer Zulässig sind Werte 1 bis 5 für die minimale Dauer der Sprachbelegung, damit die Sprache berücksichtigt wird.
  51. *
  52. * @return true, falls eine Belegung existiert und ansonsten false
  53. */
  54. static hatSprachbelegungInSekIMitDauer(sprachendaten, sprache, mindestBelegdauer) {
  55. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache)) || mindestBelegdauer === null || mindestBelegdauer <= 0) {
  56. return false;
  57. }
  58. let belegung = SprachendatenManager.getSprachbelegung(sprachendaten, sprache);
  59. if (belegung === null) {
  60. return false;
  61. }
  62. let belegtVonJahrgangNumerisch;
  63. let belegtBisJahrgangNumerisch;
  64. let letzterJahrgangSekI;
  65. if (belegung.belegungVonJahrgang !== null) {
  66. belegtVonJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang);
  67. belegtBisJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungBisJahrgang);
  68. letzterJahrgangSekI = 10;
  69. if (belegtVonJahrgangNumerisch === 6 || belegtVonJahrgangNumerisch === 8) {
  70. letzterJahrgangSekI = 9;
  71. }
  72. if (0 < belegtVonJahrgangNumerisch && belegtVonJahrgangNumerisch <= 10) {
  73. if (belegtBisJahrgangNumerisch === 0 || belegtBisJahrgangNumerisch > letzterJahrgangSekI) {
  74. belegtBisJahrgangNumerisch = letzterJahrgangSekI;
  75. }
  76. return ((belegtBisJahrgangNumerisch - belegtVonJahrgangNumerisch + 1) >= mindestBelegdauer);
  77. }
  78. }
  79. return false;
  80. }
  81. /**
  82. * Gibt die zu der übergebenen Sprache gehörende Sprachbelegung zurück.
  83. *
  84. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  85. * @param sprache das einstellige Kürzel der Sprache
  86. *
  87. * @return die Sprachbelegung oder null, falls keine existiert
  88. */
  89. static getSprachbelegung(sprachendaten, sprache) {
  90. if (sprachendaten === null || sprachendaten.belegungen === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
  91. return null;
  92. }
  93. let belegungen = sprachendaten.belegungen;
  94. for (let belegung of belegungen) {
  95. if (JavaObject_1.JavaObject.equalsTranspiler(sprache, (belegung.sprache))) {
  96. return belegung;
  97. }
  98. }
  99. return null;
  100. }
  101. /**
  102. * Liefert die Sprachen aus der Sprachenfolge zurück, deren Beginn im angegebenen Zeitraum liegt und die angegebene Dauer besitzt.
  103. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  104. * Bei einem Schüler der Sek-II wird auch nur die Dauer der Belegung in der Sek-I betrachtet.
  105. * Sprachprüfungen werden nicht berücksichtigt.
  106. *
  107. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  108. * @param belegungbeginnStart Es werden nur Sprachen berücksichtigt, deren Belegungsbeginn größer oder gleich dem angegebenen ASDJahrgang ist.
  109. * @param belegungbeginnEnde Es werden nur Sprachen berücksichtigt, deren Belegungsbeginn kleiner oder gleich dem angegebenen ASDJahrgang ist.
  110. * @param mindestBelegdauer Zulässig sind Werte 1 bis 5 für die minimale Dauer der Sprachbelegung, damit die Sprache berücksichtigt wird.
  111. *
  112. * @return Vector mit Sprachbelegungen, die die Kriterien erfüllen. Die Liste ist nach Belegungsbeginn aufsteigend sortiert
  113. */
  114. static getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, belegungbeginnStart, belegungbeginnEnde, mindestBelegdauer) {
  115. let belegungen = new Vector_1.Vector();
  116. if (sprachendaten !== null && sprachendaten.belegungen !== null && belegungbeginnStart !== null && !JavaObject_1.JavaObject.equalsTranspiler(belegungbeginnStart, ("")) && belegungbeginnEnde !== null && !JavaObject_1.JavaObject.equalsTranspiler(belegungbeginnEnde, ("")) && mindestBelegdauer !== null && mindestBelegdauer >= 0) {
  117. let belegtVonJahrgangNumerisch;
  118. let belegtBisJahrgangNumerisch;
  119. let letzterJahrgangSekI;
  120. let gefundeneSprachen = new HashSet_1.HashSet();
  121. let alleBelegungen = sprachendaten.belegungen;
  122. for (let belegung of alleBelegungen) {
  123. if (belegung.belegungVonJahrgang !== null) {
  124. belegtVonJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungVonJahrgang);
  125. belegtBisJahrgangNumerisch = SprachendatenManager.ASDJahrgangNumerisch(belegung.belegungBisJahrgang);
  126. letzterJahrgangSekI = 10;
  127. if (belegtVonJahrgangNumerisch === 6 || belegtVonJahrgangNumerisch === 8) {
  128. letzterJahrgangSekI = 9;
  129. }
  130. if (belegtVonJahrgangNumerisch > 0 && SprachendatenManager.ASDJahrgangNumerisch(belegungbeginnStart) <= belegtVonJahrgangNumerisch && belegtVonJahrgangNumerisch <= SprachendatenManager.ASDJahrgangNumerisch(belegungbeginnEnde)) {
  131. if (belegtBisJahrgangNumerisch === 0 || belegtBisJahrgangNumerisch > letzterJahrgangSekI) {
  132. belegtBisJahrgangNumerisch = letzterJahrgangSekI;
  133. }
  134. if ((belegtBisJahrgangNumerisch - belegtVonJahrgangNumerisch + 1) >= mindestBelegdauer) {
  135. if (!gefundeneSprachen.contains(belegung.sprache)) {
  136. belegungen.add(belegung);
  137. }
  138. gefundeneSprachen.add(belegung.sprache);
  139. }
  140. }
  141. }
  142. }
  143. }
  144. if (belegungen.size() > 0) {
  145. let comparator = { compare: (a, b) => JavaInteger_1.JavaInteger.compare(SprachendatenManager.ASDJahrgangNumerisch(a.belegungVonJahrgang), SprachendatenManager.ASDJahrgangNumerisch(b.belegungVonJahrgang)) };
  146. belegungen.sort(comparator);
  147. }
  148. return belegungen;
  149. }
  150. /**
  151. * Prüft, ob die übergebene Sprache als eine fortgeführte Fremdsprache in der gymnasialen Oberstufe
  152. * gemäß APO-GOSt ab EF belegt werden kann. Dazu zählen alle belegten Sprachen mit mind. 2 Jahren Belegung in Sek-I
  153. * sowie Sprachen aus bestimmten Sprachprüfungen.
  154. *
  155. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  156. * @param sprache das einstellige Kürzel der Sprache
  157. *
  158. * @return true, falls die Sprache als fortgeführte Fremdsprache als EF belegt werden kann, andernfalls false
  159. */
  160. static istFortfuehrbareSpracheInGOSt(sprachendaten, sprache) {
  161. if (sprachendaten === null || sprache === null || JavaObject_1.JavaObject.equalsTranspiler("", (sprache))) {
  162. return false;
  163. }
  164. if (SprachendatenManager.hatSprachbelegungInSekIMitDauer(sprachendaten, sprache, 2)) {
  165. return true;
  166. }
  167. let pruefungen = sprachendaten.pruefungen;
  168. if (pruefungen !== null) {
  169. for (let pruefung of pruefungen) {
  170. if (!JavaObject_1.JavaObject.equalsTranspiler(sprache, (pruefung.sprache)) && !JavaObject_1.JavaObject.equalsTranspiler(sprache, (pruefung.ersetzteSprache))) {
  171. continue;
  172. }
  173. if (pruefung.istHKUPruefung && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  174. return true;
  175. }
  176. if (pruefung.istFeststellungspruefung && (pruefung.note !== null) && (pruefung.note <= 4) && ((pruefung.kannBelegungAlsFortgefuehrteSpracheErlauben && pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) || ((pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id)))) {
  177. return true;
  178. }
  179. }
  180. }
  181. return false;
  182. }
  183. /**
  184. * Sammelt alle Sprachen, die in der GOSt als fortgeführte Sprachen belegt werden können, sei
  185. * es aufgrund einer Belegung von mindestens zwei Jahren oder aufgrund einer Sprachprüfung.
  186. *
  187. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  188. *
  189. * @return Liste alle Sprachen, die in der GOSt fortgeführt werden können.
  190. */
  191. static getFortfuehrbareSprachenInGOSt(sprachendaten) {
  192. let sprachen = new Vector_1.Vector();
  193. if (sprachendaten !== null) {
  194. let belegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 2);
  195. for (let belegung of belegungen) {
  196. sprachen.add(belegung.sprache);
  197. }
  198. let pruefungen = sprachendaten.pruefungen;
  199. if (pruefungen !== null) {
  200. for (let pruefung of pruefungen) {
  201. if (pruefung.istHKUPruefung && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  202. sprachen.add(pruefung.ersetzteSprache);
  203. }
  204. if (pruefung.istFeststellungspruefung && (pruefung.note !== null) && (pruefung.note <= 4) && ((pruefung.kannBelegungAlsFortgefuehrteSpracheErlauben && pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) || ((pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id)))) {
  205. sprachen.add(pruefung.ersetzteSprache);
  206. }
  207. }
  208. }
  209. }
  210. return sprachen;
  211. }
  212. /**
  213. * Prüft für den Zeitpunkt Ende Sek-I, ob eine Fremdsprache im Umfang von mindestens 4 Jahren belegt wurde.
  214. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  215. * Ist dies in der Sprachenfolge nicht der Fall, werden zusätzlich evtl. Sprachprüfungen herangezogen.
  216. *
  217. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  218. *
  219. * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
  220. */
  221. static hatEineSpracheMitMin4JahrenDauerEndeSekI(sprachendaten) {
  222. if (sprachendaten === null) {
  223. return false;
  224. }
  225. let anzahlSprachen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "07", 4).size();
  226. if (anzahlSprachen >= 1) {
  227. return true;
  228. }
  229. let pruefungen = sprachendaten.pruefungen;
  230. if (pruefungen !== null) {
  231. for (let pruefung of pruefungen) {
  232. if (pruefung.istFeststellungspruefung && (pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  233. return true;
  234. }
  235. }
  236. }
  237. return false;
  238. }
  239. /**
  240. * Prüft für den Zeitpunkt Ende Sek-I, ob eine zweite Fremdsprache im Umfang von mindestens 4 Jahren belegt wurde.
  241. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  242. * Ist dies in der Sprachenfolge nicht der Fall, werden zusätzlich evtl. Sprachprüfungen herangezogen.
  243. *
  244. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  245. *
  246. * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
  247. */
  248. static hatZweiSprachenMitMin4JahrenDauerEndeSekI(sprachendaten) {
  249. if (sprachendaten === null) {
  250. return false;
  251. }
  252. let belegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "07", 4);
  253. let anzahlSprachen = belegungen.size();
  254. if (anzahlSprachen >= 2) {
  255. return true;
  256. }
  257. if (anzahlSprachen === 1) {
  258. let pruefungen = sprachendaten.pruefungen;
  259. if (pruefungen !== null) {
  260. for (let pruefung of pruefungen) {
  261. if (pruefung.istFeststellungspruefung && (pruefung.kannErstePflichtfremdspracheErsetzen || pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  262. if (!JavaObject_1.JavaObject.equalsTranspiler(belegungen.get(0).sprache, (pruefung.sprache))) {
  263. return true;
  264. }
  265. }
  266. }
  267. }
  268. }
  269. return false;
  270. }
  271. /**
  272. * Prüft für den Zeitpunkt Ende Sek-I, ob eine Fremdsprache ab Kasse 8/9 im Umfang von mindestens 2 Jahren belegt wurde.
  273. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  274. *
  275. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  276. *
  277. * @return true, falls der Nachweis gemäß der aktuellen Sprachdaten erfüllt ist, andernfalls false.
  278. */
  279. static hatSpracheMit2JahrenDauerEndeSekI(sprachendaten) {
  280. if (sprachendaten === null) {
  281. return false;
  282. }
  283. let anzahlSprachen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "08", "10", 2).size();
  284. if (anzahlSprachen >= 1) {
  285. return true;
  286. }
  287. return false;
  288. }
  289. /**
  290. * Prüft, ob eine Sprachfeststellungsprüfung auf dem Niveau der Einführungsphase (EF) der GOSt vorliegt.
  291. * Nach §11 (2) APO-GOSt setzt das eine Prüfung in der gleichen Sprache am Ende der Sek-I voraus
  292. *
  293. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  294. *
  295. * @return true, falls entsprechende Sprachprüfungen vorhanden sind, andernfalls false.
  296. */
  297. static hatSprachfeststellungspruefungAufEFNiveau(sprachendaten) {
  298. if (sprachendaten === null) {
  299. return false;
  300. }
  301. let pruefungen = sprachendaten.pruefungen;
  302. if (pruefungen !== null) {
  303. for (let pruefungS1 of pruefungen) {
  304. if (pruefungS1.istFeststellungspruefung && (pruefungS1.kannErstePflichtfremdspracheErsetzen || pruefungS1.kannZweitePflichtfremdspracheErsetzen || pruefungS1.kannWahlpflichtfremdspracheErsetzen) && (pruefungS1.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefungS1.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefungS1.note !== null) && (pruefungS1.note <= 4)) {
  305. for (let pruefungEF of pruefungen) {
  306. if (pruefungEF.istFeststellungspruefung && JavaObject_1.JavaObject.equalsTranspiler(pruefungEF.ersetzteSprache, (pruefungS1.ersetzteSprache)) && (pruefungEF.kannErstePflichtfremdspracheErsetzen || pruefungEF.kannZweitePflichtfremdspracheErsetzen || pruefungEF.kannWahlpflichtfremdspracheErsetzen) && pruefungEF.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_EF.id && (pruefungEF.note !== null) && (pruefungEF.note <= 4)) {
  307. return true;
  308. }
  309. }
  310. }
  311. }
  312. }
  313. return false;
  314. }
  315. /**
  316. * Gibt die Fremdsprache zurück, die als erste Fremdsprache der Sekundarstufe I gewertet werden kann.
  317. * Im Falle einer Sprachprüfung als erste Pflichtfremdsprache wird diese mit der als Ersatz eingetragene Fremdsprache zurückgegeben.
  318. * Ist keine Sprachprüfung als erste Pflichtfremdsprache vorhanden, so wird die als erste Sprache in der Sekundarstufe I belegt
  319. * Sprache zurückgegeben, unabhängig von deren Belegdauer.
  320. *
  321. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  322. *
  323. * @return Die erste belegte Sprache (gemäß Belegung oder Prüfung) oder null, falls keine existiert
  324. */
  325. static getErsteSpracheInSekI(sprachendaten) {
  326. if (sprachendaten === null) {
  327. return null;
  328. }
  329. let pruefungen = sprachendaten.pruefungen;
  330. if (pruefungen !== null) {
  331. for (let pruefung of pruefungen) {
  332. if (pruefung.istFeststellungspruefung && pruefung.kannErstePflichtfremdspracheErsetzen && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  333. return pruefung.ersetzteSprache;
  334. }
  335. }
  336. }
  337. let belegungen = sprachendaten.belegungen;
  338. if (belegungen !== null) {
  339. let sprachbelegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 0);
  340. if (sprachbelegungen.size() > 0) {
  341. return sprachbelegungen.get(0).sprache;
  342. }
  343. }
  344. return null;
  345. }
  346. /**
  347. * Gibt die Fremdsprache zurück, die als zweite Fremdsprache der Sekundarstufe I gewertet werden kann.
  348. * Im Falle einer Sprachprüfung als zweite Pflichtfremdsprache bzw. WP-Sprache wird diese mit der als Ersatz eingetragene Fremdsprache zurückgegeben.
  349. * Ist keine Sprachprüfung als zweite Pflichtfremdsprache bzw. WP-Sprache vorhanden, so wird die als zweite Sprache in der Sekundarstufe I belegt
  350. * Sprache zurückgegeben, unabhängig von deren Belegdauer.
  351. *
  352. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  353. *
  354. * @return Die zweite belegte Sprache (gemäß Belegung oder Prüfung) oder null, falls keine existiert
  355. */
  356. static getZweiteSpracheInSekI(sprachendaten) {
  357. if (sprachendaten === null) {
  358. return null;
  359. }
  360. let pruefungErsteSprache = "";
  361. let pruefungZweiteSprache = "";
  362. let pruefungen = sprachendaten.pruefungen;
  363. if (pruefungen !== null) {
  364. for (let pruefung of pruefungen) {
  365. if (pruefung.istFeststellungspruefung && pruefung.kannErstePflichtfremdspracheErsetzen && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  366. pruefungErsteSprache = pruefung.ersetzteSprache;
  367. }
  368. if (pruefung.istFeststellungspruefung && (pruefung.kannZweitePflichtfremdspracheErsetzen || pruefung.kannWahlpflichtfremdspracheErsetzen) && (pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_HA10.id || pruefung.anspruchsniveauId === Sprachpruefungniveau_1.Sprachpruefungniveau.NIVEAU_MSA.id) && (pruefung.note !== null) && (pruefung.note <= 4)) {
  369. pruefungZweiteSprache = pruefung.ersetzteSprache;
  370. }
  371. }
  372. }
  373. if (!JavaObject_1.JavaObject.equalsTranspiler(pruefungZweiteSprache, (""))) {
  374. return pruefungZweiteSprache;
  375. }
  376. let belegungen = sprachendaten.belegungen;
  377. if (belegungen !== null) {
  378. let sprachbelegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "05", "10", 0);
  379. if (!JavaObject_1.JavaObject.equalsTranspiler(pruefungErsteSprache, (""))) {
  380. for (let sprachbelegung of sprachbelegungen) {
  381. if (!JavaObject_1.JavaObject.equalsTranspiler(sprachbelegung.sprache, (pruefungErsteSprache))) {
  382. return sprachbelegung.sprache;
  383. }
  384. }
  385. }
  386. else {
  387. if (sprachbelegungen.size() > 1) {
  388. return sprachbelegungen.get(1).sprache;
  389. }
  390. }
  391. }
  392. return null;
  393. }
  394. /**
  395. * Ermittelt, ob eine Fremdsprache ab Kasse 8/9 im Umfang von mindestens 2 Jahren belegt wurde und gibt sie zurück
  396. * Dabei wird davon ausgegangen, dass Sprachen ohne Ende der Belegung am Ende der Sekundarstufe I belegt wurden.
  397. *
  398. * @param sprachendaten die Sprachendaten mit Sprachbelegungen und Sprachprüfungen
  399. *
  400. * @return Sprache, falls eine Belegung vorhanden ist, sonst null
  401. */
  402. static getSpracheMit2JahrenDauerEndeSekI(sprachendaten) {
  403. if (sprachendaten === null) {
  404. return null;
  405. }
  406. let belegungen = sprachendaten.belegungen;
  407. if (belegungen !== null) {
  408. let sprachbelegungen = SprachendatenManager.getSprachlegungenNachBeginnUndDauerEndeSekI(sprachendaten, "08", "10", 2);
  409. if (sprachbelegungen.size() > 0) {
  410. return sprachbelegungen.get(0).sprache;
  411. }
  412. }
  413. return null;
  414. }
  415. /**
  416. * Hilfsfunktion, die einen ASDJahrgang nach APO-SI und APO-GOSt und in einen numerischen Wert für Vergleiche umwandelt.
  417. * Dabei wird EF zu 11, Q1 zu 12 und Q2 zu 13. Die übrigen Stufen werden gemäß ihrer numerischen Stufenangaben umgewandelt.
  418. *
  419. * @param ASDJahrgang Der in den mumerischen Wert umzuwandelnde ASDJahrgang.
  420. *
  421. * @return Wert des ASDJahrgangs zwischen 5 und 13, wenn dieser nicht bestimmt werden kann, wird der Wert 0 zurückgegeben.
  422. */
  423. static ASDJahrgangNumerisch(ASDJahrgang) {
  424. if (ASDJahrgang === null || JavaObject_1.JavaObject.equalsTranspiler(ASDJahrgang, (""))) {
  425. return 0;
  426. }
  427. switch (ASDJahrgang) {
  428. case "EF":
  429. return 11;
  430. case "Q1":
  431. return 12;
  432. case "Q2":
  433. return 13;
  434. default:
  435. try {
  436. return JavaInteger_1.JavaInteger.parseInt(ASDJahrgang);
  437. }
  438. catch (e) {
  439. return 0;
  440. }
  441. }
  442. }
  443. isTranspiledInstanceOf(name) {
  444. return ['de.nrw.schule.svws.core.SprachendatenManager'].includes(name);
  445. }
  446. }
  447. exports.SprachendatenManager = SprachendatenManager;
  448. function cast_de_nrw_schule_svws_core_SprachendatenManager(obj) {
  449. return obj;
  450. }
  451. exports.cast_de_nrw_schule_svws_core_SprachendatenManager = cast_de_nrw_schule_svws_core_SprachendatenManager;
  452. //# sourceMappingURL=SprachendatenManager.js.map