@kth/om-kursen-ladok-client 2.5.6 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/attributVardenConstants.d.ts +3 -0
  2. package/dist/attributVardenConstants.js +32 -1
  3. package/dist/attributVardenConstants.js.map +1 -1
  4. package/dist/createApiClient.js +2 -0
  5. package/dist/createApiClient.js.map +1 -1
  6. package/dist/groupSearchResults.d.ts +16 -5
  7. package/dist/groupSearchResults.js +46 -34
  8. package/dist/groupSearchResults.js.map +1 -1
  9. package/dist/index.d.ts +5 -0
  10. package/dist/index.js +1 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/kth/KTHPeriod/KTHPeriod.d.ts +2 -0
  13. package/dist/kth/KTHPeriod/KTHPeriod.js +5 -1
  14. package/dist/kth/KTHPeriod/KTHPeriod.js.map +1 -1
  15. package/dist/kth/KTHPeriod/calculateKTHPeriodSemesterFromTillfallesperiod.d.ts +2 -2
  16. package/dist/kth/KTHPeriod/calculateKTHPeriodSemesterFromTillfallesperiod.js +2 -13
  17. package/dist/kth/KTHPeriod/calculateKTHPeriodSemesterFromTillfallesperiod.js.map +1 -1
  18. package/dist/kth/KTHPeriod/createKTHPeriodSemester.d.ts +9 -0
  19. package/dist/kth/KTHPeriod/createKTHPeriodSemester.js +26 -0
  20. package/dist/kth/KTHPeriod/createKTHPeriodSemester.js.map +1 -0
  21. package/dist/kth/KTHPeriod/extractKTHPeriodSemesterFromLasperiodsfordelning.d.ts +1 -1
  22. package/dist/kth/KTHPeriod/extractKTHPeriodSemesterFromLasperiodsfordelning.js +5 -10
  23. package/dist/kth/KTHPeriod/extractKTHPeriodSemesterFromLasperiodsfordelning.js.map +1 -1
  24. package/dist/kth/KTHPeriod/getKTHPeriodSemesters.d.ts +2 -2
  25. package/dist/kth/index.d.ts +1 -0
  26. package/dist/kth/index.js +18 -0
  27. package/dist/kth/index.js.map +1 -0
  28. package/dist/mapCourseInstance.js +1 -1
  29. package/dist/mapCourseInstance.js.map +1 -1
  30. package/dist/{mapSearchResult.d.ts → mapCourseInstanceResult.d.ts} +7 -5
  31. package/dist/{mapSearchResult.js → mapCourseInstanceResult.js} +11 -20
  32. package/dist/mapCourseInstanceResult.js.map +1 -0
  33. package/dist/report/createReportApi.d.ts +3 -0
  34. package/dist/report/createReportApi.js +22 -0
  35. package/dist/report/createReportApi.js.map +1 -0
  36. package/dist/report/getSchedulingReport.d.ts +4 -0
  37. package/dist/report/getSchedulingReport.js +228 -0
  38. package/dist/report/getSchedulingReport.js.map +1 -0
  39. package/dist/report/index.d.ts +4 -0
  40. package/dist/report/index.js +10 -0
  41. package/dist/report/index.js.map +1 -0
  42. package/dist/report/mapCourseInstanceToSchedulingReportCourse.d.ts +14 -0
  43. package/dist/report/mapCourseInstanceToSchedulingReportCourse.js +111 -0
  44. package/dist/report/mapCourseInstanceToSchedulingReportCourse.js.map +1 -0
  45. package/dist/report/types.d.ts +33 -0
  46. package/dist/report/types.js +3 -0
  47. package/dist/report/types.js.map +1 -0
  48. package/dist/search/createSearchApi.js +1 -35
  49. package/dist/search/createSearchApi.js.map +1 -1
  50. package/dist/search/searchService.d.ts +9 -0
  51. package/dist/search/searchService.js +39 -0
  52. package/dist/search/searchService.js.map +1 -1
  53. package/dist/search/types.d.ts +13 -9
  54. package/dist/search/utils/createLadokPeriodsAndKthPeriods.d.ts +16 -0
  55. package/dist/search/utils/createLadokPeriodsAndKthPeriods.js +62 -0
  56. package/dist/search/utils/createLadokPeriodsAndKthPeriods.js.map +1 -0
  57. package/dist/search/utils/mapCourseInstanceSearchDTO.js +30 -17
  58. package/dist/search/utils/mapCourseInstanceSearchDTO.js.map +1 -1
  59. package/dist/search/utils/searchUtils.d.ts +13 -5
  60. package/dist/search/utils/searchUtils.js +36 -19
  61. package/dist/search/utils/searchUtils.js.map +1 -1
  62. package/dist/types/OmKursenLadokApiClient.d.ts +2 -0
  63. package/dist/utils/SearchError.d.ts +5 -5
  64. package/dist/utils/SearchError.js +5 -6
  65. package/dist/utils/SearchError.js.map +1 -1
  66. package/dist/utils/collectionUtils.d.ts +9 -0
  67. package/dist/utils/collectionUtils.js +24 -1
  68. package/dist/utils/collectionUtils.js.map +1 -1
  69. package/dist/utils/concurrentTasks.js +13 -7
  70. package/dist/utils/concurrentTasks.js.map +1 -1
  71. package/dist/utils/getAllEntitiesByUseOfContinuation.js +3 -3
  72. package/dist/utils/getAllEntitiesByUseOfContinuation.js.map +1 -1
  73. package/dist/utils/partOfProgrammeUtil.d.ts +1 -1
  74. package/dist/utils/partOfProgrammeUtil.js +13 -4
  75. package/dist/utils/partOfProgrammeUtil.js.map +1 -1
  76. package/dist/utils/periodUtil.d.ts +1 -1
  77. package/dist/utils/periodUtil.js +3 -3
  78. package/dist/utils/periodUtil.js.map +1 -1
  79. package/dist/utils/programmeStructureUtil.d.ts +7 -0
  80. package/dist/utils/programmeStructureUtil.js +4 -3
  81. package/dist/utils/programmeStructureUtil.js.map +1 -1
  82. package/package.json +2 -2
  83. package/dist/mapSearchResult.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { LadokStatus } from '@kth/ladok-attributvarde-utils';
2
- import { SokUtbildningsTillfalleItem, SokUtbildningsTillfalleSlimItem } from '@kth/ladok-mellanlager-client';
2
+ import { PeriodItem, SokUtbildningsTillfalleItem, SokUtbildningsTillfalleSlimItem } from '@kth/ladok-mellanlager-client';
3
3
  import { Language, TranslatedGrunddata, TranslatedOrganisation, TranslatedUtbildningstyp } from './utils/languageUtil';
4
+ import { KTHPeriodSemester } from './kth/KTHPeriod/KTHPeriod';
4
5
  export type SearchResultPeriod = {
5
6
  startperiod: string;
6
7
  forstaUndervisningsdatum?: {
@@ -17,7 +18,7 @@ export type SearchResultPeriod = {
17
18
  };
18
19
  tillfallesperioderNummer: number;
19
20
  };
20
- export type CourseSearchResult = {
21
+ export type CourseInstanceResult = {
21
22
  versionsnummer: number;
22
23
  kod: string;
23
24
  benamning: string;
@@ -36,8 +37,9 @@ export type CourseSearchResult = {
36
37
  code: string;
37
38
  inDigits: string | null;
38
39
  };
39
- period?: SearchResultPeriod;
40
- isMiljo?: boolean;
41
40
  status?: LadokStatus;
41
+ isMiljo?: boolean;
42
+ kthPeriods: KTHPeriodSemester[];
43
+ startingKTHPeriod: KTHPeriodSemester | undefined;
42
44
  };
43
- export declare const mapKursTillfalleResult: (courseInstance: SokUtbildningsTillfalleItem | SokUtbildningsTillfalleSlimItem, language: Language) => CourseSearchResult;
45
+ export declare const mapCourseInstanceResult: (courseInstance: SokUtbildningsTillfalleItem | SokUtbildningsTillfalleSlimItem, periodItems: PeriodItem[], language: Language) => CourseInstanceResult;
@@ -1,14 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapKursTillfalleResult = void 0;
3
+ exports.mapCourseInstanceResult = void 0;
4
4
  const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
5
5
  const languageUtil_1 = require("./utils/languageUtil");
6
6
  const utils_1 = require("./utils");
7
7
  const creditsUtil_1 = require("./utils/creditsUtil");
8
8
  const schoolUtil_1 = require("./utils/schoolUtil");
9
- // TODO Benni this should be refactored together with mapCourseInstance
10
- const mapKursTillfalleResult = (courseInstance, language) => {
11
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
9
+ const getKTHPeriodSemesters_1 = require("./kth/KTHPeriod/getKTHPeriodSemesters");
10
+ // TODO this should be refactored together with mapCourseInstance
11
+ const mapCourseInstanceResult = (courseInstance, periodItems, language) => {
12
+ var _a, _b, _c;
12
13
  const benamning = {
13
14
  sv: (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.svensk.benamning'),
14
15
  en: (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.engelsk.benamning'),
@@ -26,6 +27,8 @@ const mapKursTillfalleResult = (courseInstance, language) => {
26
27
  const schoolCode = (0, schoolUtil_1.extractSchoolCodeFromOrganisation)(organisation, language);
27
28
  const omfattning = (_b = (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.omfattning', 'omfattning')) !== null && _b !== void 0 ? _b : '';
28
29
  const isMiljo = (0, ladok_attributvarde_utils_1.extractIsMiljo)(courseInstance.instans.Attributvarden);
30
+ const kthPeriods = (0, getKTHPeriodSemesters_1.getKTHPeriodSemesters)(courseInstance.Tillfallesperioder, periodItems);
31
+ const startingKTHPeriod = kthPeriods.at(0);
29
32
  return {
30
33
  versionsnummer: (0, ladok_attributvarde_utils_1.extractVersionNumber)(courseInstance.instans.Attributvarden),
31
34
  kod: (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.kod'),
@@ -44,24 +47,12 @@ const mapKursTillfalleResult = (courseInstance, language) => {
44
47
  code: startperiod.code,
45
48
  inDigits: (0, utils_1.transformPeriodInDigits)(startperiod.code),
46
49
  },
47
- period: {
48
- startperiod: (startperiod === null || startperiod === void 0 ? void 0 : startperiod.code) || '',
49
- forstaUndervisningsdatum: Object.assign({ date: (_d = courseInstance.Tillfallesperioder.at(0)) === null || _d === void 0 ? void 0 : _d.ForstaUndervisningsdatum, period: (0, utils_1.getKthStudyPeriod)(new Date((_e = courseInstance.Tillfallesperioder.at(0)) === null || _e === void 0 ? void 0 : _e.ForstaUndervisningsdatum), {
50
- code: startperiod === null || startperiod === void 0 ? void 0 : startperiod.code,
51
- startDate: startperiod && new Date(startperiod.startDay),
52
- endDate: startperiod && new Date(startperiod.lastDay),
53
- }, 'start') }, (0, utils_1.getYearAndWeek)((_f = courseInstance.Tillfallesperioder.at(0)) === null || _f === void 0 ? void 0 : _f.ForstaUndervisningsdatum)),
54
- sistaUndervisningsdatum: Object.assign({ date: (_g = courseInstance.Tillfallesperioder.at(-1)) === null || _g === void 0 ? void 0 : _g.SistaUndervisningsdatum, period: (0, utils_1.getKthStudyPeriod)(new Date((_h = courseInstance.Tillfallesperioder.at(-1)) === null || _h === void 0 ? void 0 : _h.SistaUndervisningsdatum), {
55
- code: startperiod === null || startperiod === void 0 ? void 0 : startperiod.code,
56
- startDate: startperiod && new Date(startperiod.startDay),
57
- endDate: startperiod && new Date(startperiod.lastDay),
58
- }, 'end') }, (0, utils_1.getYearAndWeek)((_j = courseInstance.Tillfallesperioder.at(-1)) === null || _j === void 0 ? void 0 : _j.SistaUndervisningsdatum)),
59
- tillfallesperioderNummer: courseInstance.Tillfallesperioder.length,
60
- },
50
+ kthPeriods,
51
+ startingKTHPeriod,
61
52
  schoolCode,
62
53
  isMiljo,
63
54
  status: (0, ladok_attributvarde_utils_1.extractLadokStatus)(courseInstance.Attributvarden),
64
55
  };
65
56
  };
66
- exports.mapKursTillfalleResult = mapKursTillfalleResult;
67
- //# sourceMappingURL=mapSearchResult.js.map
57
+ exports.mapCourseInstanceResult = mapCourseInstanceResult;
58
+ //# sourceMappingURL=mapCourseInstanceResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapCourseInstanceResult.js","sourceRoot":"","sources":["../src/mapCourseInstanceResult.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { LadokMellanlagerApiClient } from '@kth/ladok-mellanlager-client';
2
+ import { ReportApi } from './types';
3
+ export declare const createReportApi: (ladokClient: LadokMellanlagerApiClient) => ReportApi;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createReportApi = void 0;
13
+ const getSchedulingReport_1 = require("./getSchedulingReport");
14
+ const createReportApi = (ladokClient) => {
15
+ return {
16
+ getSemesterCoursesGroupedByProgramme: (semester, language) => __awaiter(void 0, void 0, void 0, function* () {
17
+ return (0, getSchedulingReport_1.getSemesterCoursesGroupedByProgramme)(ladokClient, semester, language);
18
+ }),
19
+ };
20
+ };
21
+ exports.createReportApi = createReportApi;
22
+ //# sourceMappingURL=createReportApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createReportApi.js","sourceRoot":"","sources":["../../src/report/createReportApi.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,+DAA4E;AAErE,MAAM,eAAe,GAAG,CAAC,WAAsC,EAAa,EAAE;IACnF,OAAO;QACL,oCAAoC,EAAE,CAAO,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACjE,OAAO,IAAA,0DAAoC,EAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC9E,CAAC,CAAA;KACF,CAAA;AACH,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B"}
@@ -0,0 +1,4 @@
1
+ import { LadokMellanlagerApiClient } from '@kth/ladok-mellanlager-client';
2
+ import { Language } from '../utils/languageUtil';
3
+ import { SchedulingReport } from './types';
4
+ export declare const getSemesterCoursesGroupedByProgramme: (ladokClient: LadokMellanlagerApiClient, semester: string, language: Language) => Promise<SchedulingReport>;
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getSemesterCoursesGroupedByProgramme = void 0;
13
+ const getAllEntitiesByUseOfContinuation_1 = require("../utils/getAllEntitiesByUseOfContinuation");
14
+ const responseUtils_1 = require("../utils/responseUtils");
15
+ const partOfProgrammeUtil_1 = require("../utils/partOfProgrammeUtil");
16
+ const attributVardenConstants_1 = require("../attributVardenConstants");
17
+ const queryConstants_1 = require("../queryConstants");
18
+ const mapCourseInstanceToSchedulingReportCourse_1 = require("./mapCourseInstanceToSchedulingReportCourse");
19
+ const periodUtil_1 = require("../utils/periodUtil");
20
+ const programmeStructureUtil_1 = require("../utils/programmeStructureUtil");
21
+ const COURSE_UTBILDNINGSTYP_IDS = '52,101955,101382,101994,102008';
22
+ /*
23
+ ** 2007KTF – 52
24
+ ** 2007FKTF – 101955
25
+ ** FUPKTF – 101382
26
+ ** UPHPKTF – 101994
27
+ ** UPVKTF – 102008
28
+ */
29
+ // Common base query parameters for all search phases
30
+ const BASE_SEARCH_QUERY = {
31
+ kodEllerBenamning: '*',
32
+ attributVarden: attributVardenConstants_1.ATTRIBUT_VARDEN_FOR_COURSE_INSTANCES_SCHEDULING,
33
+ instansAttributVarden: attributVardenConstants_1.INSTANS_ATTRIBUT_VARDEN_FOR_COURSE_INSTANCES_SCHEDULING,
34
+ antalTraffar: queryConstants_1.MAX_ANTAL_TRAFFAR,
35
+ utbildningstypgrundtyp: 'KURS',
36
+ utbildningstypid: COURSE_UTBILDNINGSTYP_IDS,
37
+ };
38
+ // Common continuation options for all search phases
39
+ const SEARCH_CONTINUATION_OPTIONS = {
40
+ maxSearchResultsToReturn: 10000,
41
+ maxContinuationIterations: 500,
42
+ };
43
+ const getSemesterDates = (semesterCode, periods) => {
44
+ const period = (0, periodUtil_1.findPeriodByKod)(semesterCode, periods);
45
+ if (!period) {
46
+ throw new Error(`Period not found for semester code: ${semesterCode}`);
47
+ }
48
+ return {
49
+ startDate: period.Giltighetsperiod.Startdatum,
50
+ endDate: period.Giltighetsperiod.Slutdatum,
51
+ };
52
+ };
53
+ const getSemesterCoursesGroupedByProgramme = (ladokClient, semester, language) => __awaiter(void 0, void 0, void 0, function* () {
54
+ const overallStartTime = Date.now();
55
+ const periods = yield ladokClient.period();
56
+ const periodsData = (0, responseUtils_1.throwIfError)(periods);
57
+ const { startDate, endDate } = getSemesterDates(semester, periodsData.Period);
58
+ // Map to deduplicate course instances by tillfalle_uid
59
+ const entityMap = new Map();
60
+ // PHASE 1 – PRIMARY SEARCH (STARTPERIOD-BASED)
61
+ console.log(`Phase 1: Primary search with startPeriod=${semester}`);
62
+ const phase1StartTime = Date.now();
63
+ const phase1Result = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokKursTillfalleSlim, Object.assign(Object.assign({}, BASE_SEARCH_QUERY), { startPeriod: semester }), SEARCH_CONTINUATION_OPTIONS);
64
+ const phase1Entities = (0, responseUtils_1.throwIfContinuationError)(phase1Result);
65
+ phase1Entities.forEach(entity => {
66
+ entityMap.set(entity.tillfalle_uid, entity);
67
+ });
68
+ const phase1Duration = ((Date.now() - phase1StartTime) / 1000).toFixed(2);
69
+ console.log(`Phase 1: Found ${phase1Entities.length} course instances (${phase1Duration}s)`);
70
+ // PHASE 2 – SAFETY NET SEARCH (ONGOING AT SEMESTER START)
71
+ console.log(`Phase 2: Safety net search at semester start (${startDate})`);
72
+ const phase2StartTime = Date.now();
73
+ const phase2Result = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokKursTillfalleSlim, Object.assign(Object.assign({}, BASE_SEARCH_QUERY), { pagaendeDatum: startDate }), SEARCH_CONTINUATION_OPTIONS);
74
+ const phase2Entities = (0, responseUtils_1.throwIfContinuationError)(phase2Result);
75
+ let phase2NewCount = 0;
76
+ phase2Entities.forEach(entity => {
77
+ if (!entityMap.has(entity.tillfalle_uid)) {
78
+ entityMap.set(entity.tillfalle_uid, entity);
79
+ phase2NewCount++;
80
+ }
81
+ });
82
+ const phase2Duration = ((Date.now() - phase2StartTime) / 1000).toFixed(2);
83
+ console.log(`Phase 2: Found ${phase2Entities.length} total, ${phase2NewCount} new course instances (${phase2Duration}s)`);
84
+ // PHASE 3 – SAFETY NET SEARCH (ONGOING AT SEMESTER END)
85
+ console.log(`Phase 3: Safety net search at semester end (${endDate})`);
86
+ const phase3StartTime = Date.now();
87
+ const phase3Result = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokKursTillfalleSlim, Object.assign(Object.assign({}, BASE_SEARCH_QUERY), { pagaendeDatum: endDate }), SEARCH_CONTINUATION_OPTIONS);
88
+ const phase3Entities = (0, responseUtils_1.throwIfContinuationError)(phase3Result);
89
+ let phase3NewCount = 0;
90
+ phase3Entities.forEach(entity => {
91
+ if (!entityMap.has(entity.tillfalle_uid)) {
92
+ entityMap.set(entity.tillfalle_uid, entity);
93
+ phase3NewCount++;
94
+ }
95
+ });
96
+ const phase3Duration = ((Date.now() - phase3StartTime) / 1000).toFixed(2);
97
+ console.log(`Phase 3: Found ${phase3Entities.length} total, ${phase3NewCount} new course instances (${phase3Duration}s)`);
98
+ // AFTER ALL THREE PHASES - Convert to array
99
+ const allEntities = Array.from(entityMap.values());
100
+ const totalSearchDuration = ((Date.now() - overallStartTime) / 1000).toFixed(2);
101
+ console.log(`Total unique course instances after deduplication: ${allEntities.length} (Total search time: ${totalSearchDuration}s)`);
102
+ // Get programme associations
103
+ console.log('Fetching programme associations...');
104
+ const partOfProgrammesStartTime = Date.now();
105
+ const partOfProgrammes = yield (0, partOfProgrammeUtil_1.getPartOfProgrammes)(allEntities, periodsData.Period, ladokClient, true);
106
+ const partOfProgrammesDuration = ((Date.now() - partOfProgrammesStartTime) / 1000).toFixed(2);
107
+ console.log(`Programme associations fetched in ${partOfProgrammesDuration}s`);
108
+ const coursesWithProgrammes = allEntities.map(entity => (0, mapCourseInstanceToSchedulingReportCourse_1.mapCourseInstanceToSchedulingReportCourse)(entity, language, partOfProgrammes[entity.tillfalle_uid] || [], periodsData.Period));
109
+ // Categorize courses by programme
110
+ const { programmes, standaloneCourses } = categorizeCoursesByProgramme(coursesWithProgrammes);
111
+ return {
112
+ programmes,
113
+ standaloneCourses,
114
+ };
115
+ });
116
+ exports.getSemesterCoursesGroupedByProgramme = getSemesterCoursesGroupedByProgramme;
117
+ /**
118
+ * Categorize courses by programme or as standalone courses.
119
+ * Courses are grouped by programme code, and courses without programmes are kept separate.
120
+ */
121
+ const categorizeCoursesByProgramme = (courses) => {
122
+ const programmeMap = new Map();
123
+ const standaloneCourses = [];
124
+ courses.forEach(course => {
125
+ if (!course.partOfProgrammes || course.partOfProgrammes.length === 0) {
126
+ // Course is not part of any programme - "Fristående kurs"
127
+ standaloneCourses.push(course);
128
+ }
129
+ else {
130
+ // Course is part of one or more programmes
131
+ course.partOfProgrammes.forEach((programme) => {
132
+ if (!programmeMap.has(programme.kod)) {
133
+ programmeMap.set(programme.kod, {
134
+ programmeCode: programme.kod,
135
+ programmeName: programme.benamning,
136
+ courses: [],
137
+ });
138
+ }
139
+ const programmeGroup = programmeMap.get(programme.kod);
140
+ // Create course entry for this programme with only the programme-specific partOfProgrammes
141
+ const courseInProgramme = {
142
+ kod: course.kod,
143
+ benamning: course.benamning,
144
+ omfattning: course.omfattning,
145
+ tillfalleskod: course.tillfalleskod,
146
+ startperiod: course.startperiod,
147
+ organisation: course.organisation,
148
+ finansieringsform: course.finansieringsform,
149
+ utbildningsplatser: course.utbildningsplatser,
150
+ status: course.status,
151
+ connectedProgrammes: course.connectedProgrammes,
152
+ weeks: course.weeks,
153
+ kthPeriods: course.kthPeriods,
154
+ studietakt: course.studietakt,
155
+ utbildningstyp: course.utbildningstyp,
156
+ // Include only this specific programme's context
157
+ partOfProgrammes: [programme],
158
+ };
159
+ programmeGroup.courses.push(courseInProgramme);
160
+ });
161
+ }
162
+ });
163
+ // Convert map to array and sort courses within each programme
164
+ const programmes = Array.from(programmeMap.values()).map(group => (Object.assign(Object.assign({}, group), { courses: sortCoursesForProgramme(group.courses) })));
165
+ // Sort programme groups by programme code
166
+ programmes.sort((a, b) => a.programmeCode.localeCompare(b.programmeCode));
167
+ return {
168
+ programmes,
169
+ standaloneCourses,
170
+ };
171
+ };
172
+ /**
173
+ * Sort courses within a programme by:
174
+ * 1. Study year (ascending)
175
+ * 2. Common (shared) courses first, then specialisation-specific courses
176
+ * 3. Course-type priority: Compulsory -> Conditionally elective -> Elective -> Recommended
177
+ * 4. Course code (alphabetically)
178
+ */
179
+ const sortCoursesForProgramme = (courses) => {
180
+ const valinfoRank = (part) => {
181
+ if (!part)
182
+ return 0;
183
+ const desc = part.sv && part.sv.trim().length > 0 ? part.sv : part.en;
184
+ const category = (0, programmeStructureUtil_1.getCategory)(desc);
185
+ switch (category) {
186
+ case programmeStructureUtil_1.ValvillkorCategory.O:
187
+ return 0;
188
+ case programmeStructureUtil_1.ValvillkorCategory.VV:
189
+ return 1;
190
+ case programmeStructureUtil_1.ValvillkorCategory.V:
191
+ return 2;
192
+ case programmeStructureUtil_1.ValvillkorCategory.R:
193
+ return 3;
194
+ default:
195
+ return 0;
196
+ }
197
+ };
198
+ return courses.sort((a, b) => {
199
+ var _a, _b, _c, _d, _e, _f;
200
+ const aPart = (_a = a.partOfProgrammes) === null || _a === void 0 ? void 0 : _a[0];
201
+ const bPart = (_b = b.partOfProgrammes) === null || _b === void 0 ? void 0 : _b[0];
202
+ const aStudyYear = (_c = aPart === null || aPart === void 0 ? void 0 : aPart.arskurs) !== null && _c !== void 0 ? _c : 0;
203
+ const bStudyYear = (_d = bPart === null || bPart === void 0 ? void 0 : bPart.arskurs) !== null && _d !== void 0 ? _d : 0;
204
+ // 1) Study year ascending
205
+ if (aStudyYear !== bStudyYear)
206
+ return aStudyYear - bStudyYear;
207
+ // 2) Common (shared) courses first (no inriktning)
208
+ const aIsShared = !(aPart === null || aPart === void 0 ? void 0 : aPart.inriktning);
209
+ const bIsShared = !(bPart === null || bPart === void 0 ? void 0 : bPart.inriktning);
210
+ if (aIsShared !== bIsShared)
211
+ return aIsShared ? -1 : 1;
212
+ // If both are specialisation courses, group by inriktning code
213
+ if (!aIsShared && !bIsShared) {
214
+ const aInr = (_e = aPart === null || aPart === void 0 ? void 0 : aPart.inriktning) !== null && _e !== void 0 ? _e : '';
215
+ const bInr = (_f = bPart === null || bPart === void 0 ? void 0 : bPart.inriktning) !== null && _f !== void 0 ? _f : '';
216
+ if (aInr !== bInr)
217
+ return aInr.localeCompare(bInr);
218
+ }
219
+ // 3) Course-type priority
220
+ const aValRank = valinfoRank(aPart === null || aPart === void 0 ? void 0 : aPart.valinformation);
221
+ const bValRank = valinfoRank(bPart === null || bPart === void 0 ? void 0 : bPart.valinformation);
222
+ if (aValRank !== bValRank)
223
+ return aValRank - bValRank;
224
+ // 4) Finally, sort alphabetically by course code
225
+ return a.kod.localeCompare(b.kod);
226
+ });
227
+ };
228
+ //# sourceMappingURL=getSchedulingReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSchedulingReport.js","sourceRoot":"","sources":["../../src/report/getSchedulingReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { getSemesterCoursesGroupedByProgramme } from './getSchedulingReport';
2
+ export { mapCourseInstanceToSchedulingReportCourse } from './mapCourseInstanceToSchedulingReportCourse';
3
+ export { createReportApi } from './createReportApi';
4
+ export type { ReportApi, SchedulingReport, SchedulingReportProgramme, SchedulingReportCourse } from './types';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createReportApi = exports.mapCourseInstanceToSchedulingReportCourse = exports.getSemesterCoursesGroupedByProgramme = void 0;
4
+ var getSchedulingReport_1 = require("./getSchedulingReport");
5
+ Object.defineProperty(exports, "getSemesterCoursesGroupedByProgramme", { enumerable: true, get: function () { return getSchedulingReport_1.getSemesterCoursesGroupedByProgramme; } });
6
+ var mapCourseInstanceToSchedulingReportCourse_1 = require("./mapCourseInstanceToSchedulingReportCourse");
7
+ Object.defineProperty(exports, "mapCourseInstanceToSchedulingReportCourse", { enumerable: true, get: function () { return mapCourseInstanceToSchedulingReportCourse_1.mapCourseInstanceToSchedulingReportCourse; } });
8
+ var createReportApi_1 = require("./createReportApi");
9
+ Object.defineProperty(exports, "createReportApi", { enumerable: true, get: function () { return createReportApi_1.createReportApi; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":";;;AAAA,6DAA4E;AAAnE,2IAAA,oCAAoC,OAAA;AAC7C,yGAAuG;AAA9F,sKAAA,yCAAyC,OAAA;AAClD,qDAAmD;AAA1C,kHAAA,eAAe,OAAA"}
@@ -0,0 +1,14 @@
1
+ import { SokUtbildningsTillfalleSlimItem, PeriodItem } from '@kth/ladok-mellanlager-client';
2
+ import { Language } from '../utils/languageUtil';
3
+ import { PartOfProgramme } from '../mapPartOfProgramme';
4
+ import { SchedulingReportCourse } from './types';
5
+ /**
6
+ * Map a course instance entity to CourseInstanceWithProgrammes with scheduling information.
7
+ *
8
+ * @param entity - The course instance entity from Ladok
9
+ * @param language - Language for text fields ('sv' or 'en')
10
+ * @param partOfProgrammes - Programme associations for this course instance
11
+ * @param periodItems - Period definitions for KTH period calculation (optional)
12
+ * @returns Mapped course instance with extended scheduling information
13
+ */
14
+ export declare const mapCourseInstanceToSchedulingReportCourse: (entity: SokUtbildningsTillfalleSlimItem, language: Language, partOfProgrammes: PartOfProgramme[], periodItems?: PeriodItem[]) => SchedulingReportCourse;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapCourseInstanceToSchedulingReportCourse = void 0;
4
+ const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
5
+ const utils_1 = require("../utils");
6
+ const creditsUtil_1 = require("../utils/creditsUtil");
7
+ const getKTHPeriodSemesters_1 = require("../kth/KTHPeriod/getKTHPeriodSemesters");
8
+ /**
9
+ * Map a course instance entity to CourseInstanceWithProgrammes with scheduling information.
10
+ *
11
+ * @param entity - The course instance entity from Ladok
12
+ * @param language - Language for text fields ('sv' or 'en')
13
+ * @param partOfProgrammes - Programme associations for this course instance
14
+ * @param periodItems - Period definitions for KTH period calculation (optional)
15
+ * @returns Mapped course instance with extended scheduling information
16
+ */
17
+ const mapCourseInstanceToSchedulingReportCourse = (entity, language, partOfProgrammes, periodItems) => {
18
+ var _a, _b, _c, _d;
19
+ const attributeValues = entity.Attributvarden;
20
+ const instansAttributeValues = entity.instans.Attributvarden;
21
+ // Extract basic course information
22
+ const kod = (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.kod');
23
+ const benamning = {
24
+ sv: (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.svensk.benamning'),
25
+ en: (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.engelsk.benamning'),
26
+ };
27
+ const omfattningValue = (_a = (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.omfattning', 'omfattning')) !== null && _a !== void 0 ? _a : '';
28
+ const utbildningstyp = (0, ladok_attributvarde_utils_1.extractUtbildningstyp)(instansAttributeValues);
29
+ const studietakt = (0, ladok_attributvarde_utils_1.extractStudietakt)(attributeValues);
30
+ // Extract scheduling-specific fields
31
+ const organisation = (0, ladok_attributvarde_utils_1.extractOrganisation)(attributeValues);
32
+ const finansieringsform = (0, ladok_attributvarde_utils_1.extractGrunddata)(attributeValues, 'utbildning.attribut.finansieringsform');
33
+ const tillfalleskod = (0, ladok_attributvarde_utils_1.extractString)(attributeValues, 'utbildning.attribut.utbildningstillfalleskod');
34
+ const utbildningsplatser = (0, ladok_attributvarde_utils_1.extractUtbildningsplatser)(attributeValues);
35
+ const status = (0, ladok_attributvarde_utils_1.extractLadokStatus)(attributeValues);
36
+ const startperiod = (0, ladok_attributvarde_utils_1.extractStartPeriod)(attributeValues);
37
+ // Extract teaching dates
38
+ const forstaUndervisningsdatum = (_b = entity.Tillfallesperioder.at(0)) === null || _b === void 0 ? void 0 : _b.ForstaUndervisningsdatum;
39
+ const sistaUndervisningsdatum = (_c = entity.Tillfallesperioder.at(-1)) === null || _c === void 0 ? void 0 : _c.SistaUndervisningsdatum;
40
+ const forstaDate = forstaUndervisningsdatum
41
+ ? Object.assign({ date: forstaUndervisningsdatum }, (0, utils_1.getYearAndWeek)(forstaUndervisningsdatum)) : undefined;
42
+ const sistaDate = sistaUndervisningsdatum
43
+ ? Object.assign({ date: sistaUndervisningsdatum }, (0, utils_1.getYearAndWeek)(sistaUndervisningsdatum)) : undefined;
44
+ const weeks = forstaDate && sistaDate
45
+ ? forstaDate.year === sistaDate.year
46
+ ? `${forstaDate.year} week ${forstaDate.week} - week ${sistaDate.week}`
47
+ : `${forstaDate.year} week ${forstaDate.week} - ${sistaDate.year} week ${sistaDate.week}`
48
+ : undefined;
49
+ const kthPeriods = periodItems && entity.Tillfallesperioder ? (0, getKTHPeriodSemesters_1.getKTHPeriodSemesters)(entity.Tillfallesperioder, periodItems) : [];
50
+ // Build formatted connected programmes string from `partOfProgrammes`.
51
+ // Group by programme code AND year, collect specialisations (inriktning) for each combination.
52
+ const connectedProgrammes = (() => {
53
+ if (!partOfProgrammes || partOfProgrammes.length === 0)
54
+ return undefined;
55
+ // Map key: "CODE_YEAR" -> { hasMain, specialisations }
56
+ const map = new Map();
57
+ partOfProgrammes.forEach(p => {
58
+ const year = p.arskurs || 0;
59
+ const key = `${p.kod}_${year}`;
60
+ const entry = map.get(key) || { kod: p.kod, arskurs: year, hasMain: false, specialisations: [] };
61
+ if (p.inriktning) {
62
+ if (!entry.specialisations.includes(p.inriktning))
63
+ entry.specialisations.push(p.inriktning);
64
+ }
65
+ else {
66
+ entry.hasMain = true;
67
+ }
68
+ map.set(key, entry);
69
+ });
70
+ const parts = [];
71
+ for (const info of map.values()) {
72
+ const yearSuffix = info.arskurs ? `${info.arskurs}` : '';
73
+ const specials = info.hasMain ? ['-'].concat(info.specialisations) : info.specialisations;
74
+ const bracket = specials.length > 0 ? ` [${specials.join(', ')}]` : '';
75
+ // Format: CODE{YEAR} [BRACKET]
76
+ parts.push(`${info.kod}${yearSuffix}${bracket}`);
77
+ }
78
+ const result = parts.join(', ');
79
+ return result.length > 0 ? result : undefined;
80
+ })();
81
+ return {
82
+ kod,
83
+ benamning: (_d = benamning[language]) !== null && _d !== void 0 ? _d : '',
84
+ omfattning: (0, creditsUtil_1.formatCreditsWithUnitLabel)(omfattningValue, utbildningstyp, language),
85
+ utbildningstyp: utbildningstyp ? (0, utils_1.translateUtbildningstyp)(utbildningstyp, language).name : '',
86
+ studietakt: studietakt ? (0, utils_1.translateStudietakt)(studietakt, language) : undefined,
87
+ partOfProgrammes,
88
+ tillfalleskod,
89
+ startperiod: startperiod
90
+ ? {
91
+ code: startperiod.code,
92
+ inDigits: (0, utils_1.transformPeriodInDigits)(startperiod.code),
93
+ }
94
+ : undefined,
95
+ organisation: organisation
96
+ ? {
97
+ kod: (0, utils_1.translateOrganisation)(organisation, language).code,
98
+ benamning: (0, utils_1.translateOrganisation)(organisation, language).name,
99
+ organisationType: (0, utils_1.translateOrganisation)(organisation, language).organisationTypeName,
100
+ }
101
+ : undefined,
102
+ finansieringsform: finansieringsform ? (0, utils_1.translateGrunddata)(finansieringsform, language) : undefined,
103
+ utbildningsplatser,
104
+ status,
105
+ connectedProgrammes,
106
+ weeks,
107
+ kthPeriods: kthPeriods.length > 0 ? kthPeriods : undefined,
108
+ };
109
+ };
110
+ exports.mapCourseInstanceToSchedulingReportCourse = mapCourseInstanceToSchedulingReportCourse;
111
+ //# sourceMappingURL=mapCourseInstanceToSchedulingReportCourse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapCourseInstanceToSchedulingReportCourse.js","sourceRoot":"","sources":["../../src/report/mapCourseInstanceToSchedulingReportCourse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Language } from '../utils';
2
+ import { PartOfProgramme } from '../mapPartOfProgramme';
3
+ import { CourseInstance } from '../mapCourseInstance';
4
+ import { KTHPeriodSemester } from '../kth/KTHPeriod/KTHPeriod';
5
+ export type ReportApi = {
6
+ getSemesterCoursesGroupedByProgramme: (semester: string, language: Language) => Promise<SchedulingReport>;
7
+ };
8
+ export type SchedulingReportCourse = Pick<CourseInstance, 'tillfalleskod' | 'startperiod' | 'finansieringsform' | 'utbildningsplatser' | 'status' | 'studietakt' | 'utbildningstyp'> & {
9
+ kod: string;
10
+ benamning: string;
11
+ omfattning: string;
12
+ organisation?: {
13
+ kod: string;
14
+ benamning: string;
15
+ organisationType?: string;
16
+ };
17
+ weeks?: string;
18
+ kthPeriods?: KTHPeriodSemester[];
19
+ partOfProgrammes?: PartOfProgramme[];
20
+ connectedProgrammes?: string;
21
+ };
22
+ export type SchedulingReportProgramme = {
23
+ programmeCode: string;
24
+ programmeName: {
25
+ sv: string;
26
+ en: string;
27
+ };
28
+ courses: SchedulingReportCourse[];
29
+ };
30
+ export type SchedulingReport = {
31
+ programmes: SchedulingReportProgramme[];
32
+ standaloneCourses: SchedulingReportCourse[];
33
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/report/types.ts"],"names":[],"mappings":""}