@kth/om-kursen-ladok-client 1.3.11 → 1.3.13

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 (40) hide show
  1. package/dist/attributVardenConstants.js +1 -0
  2. package/dist/attributVardenConstants.js.map +1 -1
  3. package/dist/createApiClient.js +5 -3
  4. package/dist/createApiClient.js.map +1 -1
  5. package/dist/mapCourseRound.js +4 -4
  6. package/dist/mapCourseRound.js.map +1 -1
  7. package/dist/mapPartOfProgramme.d.ts +1 -1
  8. package/dist/mapPartOfProgramme.js +5 -3
  9. package/dist/mapPartOfProgramme.js.map +1 -1
  10. package/dist/mapProgramTerm.js +2 -1
  11. package/dist/mapProgramTerm.js.map +1 -1
  12. package/dist/search/createSearchApi.js +13 -23
  13. package/dist/search/createSearchApi.js.map +1 -1
  14. package/dist/search/types.d.ts +4 -0
  15. package/dist/search/utbildningsTypIdConstants.d.ts +20 -4
  16. package/dist/search/utbildningsTypIdConstants.js +17 -16
  17. package/dist/search/utbildningsTypIdConstants.js.map +1 -1
  18. package/dist/search/utils/educationalTypeUtils.d.ts +11 -0
  19. package/dist/search/utils/educationalTypeUtils.js +36 -0
  20. package/dist/search/utils/educationalTypeUtils.js.map +1 -0
  21. package/dist/search/utils/getAllEntitiesByUseOfContinuation.js +1 -1
  22. package/dist/search/utils/getLatestCompletedCourseVersions.d.ts +8 -0
  23. package/dist/search/utils/getLatestCompletedCourseVersions.js +20 -0
  24. package/dist/search/utils/getLatestCompletedCourseVersions.js.map +1 -0
  25. package/dist/search/utils/searchUtils.d.ts +12 -6
  26. package/dist/search/utils/searchUtils.js +80 -38
  27. package/dist/search/utils/searchUtils.js.map +1 -1
  28. package/dist/supportApis/createSupportApis.d.ts +16 -0
  29. package/dist/supportApis/createSupportApis.js +137 -0
  30. package/dist/supportApis/createSupportApis.js.map +1 -0
  31. package/dist/types/OmKursenLadokApiClient.d.ts +4 -1
  32. package/dist/utils/programStrukturUtil.d.ts +3 -2
  33. package/dist/utils/programStrukturUtil.js +12 -10
  34. package/dist/utils/programStrukturUtil.js.map +1 -1
  35. package/dist/utils/programUtil.js +28 -14
  36. package/dist/utils/programUtil.js.map +1 -1
  37. package/dist/utils/studyYearUtil.d.ts +4 -3
  38. package/dist/utils/studyYearUtil.js +30 -14
  39. package/dist/utils/studyYearUtil.js.map +1 -1
  40. package/package.json +3 -3
@@ -1,25 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepareSearchRequestQueryForKursInstans = exports.prepareSearchRequestQueryForKursTillfallen = exports.validateSearchParams = void 0;
3
+ exports.prepareSearchRequestQueryForKursInstans = exports.prepareSearchRequestQueryForKursTillfallen = exports.validateAndCleanSearchParams = void 0;
4
4
  const SearchError_1 = require("../SearchError");
5
5
  const utils_1 = require("../../utils");
6
6
  const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
7
7
  const utbildningsTypIdConstants_1 = require("../utbildningsTypIdConstants");
8
8
  const attributVardenConstants_1 = require("../../attributVardenConstants");
9
+ const educationalTypeUtils_1 = require("./educationalTypeUtils");
10
+ const typeChecking_1 = require("../../utils/typeChecking");
9
11
  /**
12
+ * Validates and cleans the search parameters for the search API.
10
13
  * Throws an error if the searchParams are invalid.
11
14
  * @param searchParams
15
+ * @returns
16
+ * @throws SearchError
17
+ * - noRestrictions: if no search parameters are provided
18
+ * - kodEllerBenamning: if kodEllerBenamning is provided but less than 3 characters
12
19
  */
13
- const validateSearchParams = (searchParams) => {
14
- const { kodEllerBenamning, organisation, sprak, startPeriod, utbildningsniva, avvecklad } = searchParams;
15
- if (!avvecklad && !kodEllerBenamning && !organisation && !sprak && !startPeriod && !utbildningsniva) {
20
+ const validateAndCleanSearchParams = (searchParams) => {
21
+ const { kodEllerBenamning, organisation, sprak, startPeriod, utbildningsniva: rawUtbildningsniva, avvecklad, } = searchParams;
22
+ if (!avvecklad && !kodEllerBenamning && !organisation && !sprak && !startPeriod && !rawUtbildningsniva) {
16
23
  throw SearchError_1.SearchError.noRestrictions();
17
24
  }
18
25
  if (kodEllerBenamning && kodEllerBenamning.length < 3) {
19
26
  throw SearchError_1.SearchError.kodEllerBenamning();
20
27
  }
28
+ const utbildningsniva = rawUtbildningsniva ? cleanUtbildningsnivaParam(rawUtbildningsniva) : undefined;
29
+ return {
30
+ kodEllerBenamning,
31
+ organisation,
32
+ sprak,
33
+ startPeriod,
34
+ utbildningsniva,
35
+ avvecklad,
36
+ };
37
+ };
38
+ exports.validateAndCleanSearchParams = validateAndCleanSearchParams;
39
+ const cleanUtbildningsnivaParam = (utbildningsniva) => {
40
+ const mappedUtbildningsniva = utbildningsniva.map(mapUtbildningsniva);
41
+ return mappedUtbildningsniva.filter(typeChecking_1.isDefined);
42
+ };
43
+ const mapUtbildningsniva = (utbildningsniva) => {
44
+ switch (utbildningsniva) {
45
+ case ladok_attributvarde_utils_1.EducationalLevelCode.Preparatory:
46
+ return ladok_attributvarde_utils_1.EducationalLevelCode.Preparatory;
47
+ case ladok_attributvarde_utils_1.EducationalLevelCode.Advanced:
48
+ return ladok_attributvarde_utils_1.EducationalLevelCode.Advanced;
49
+ case ladok_attributvarde_utils_1.EducationalLevelCode.Basic:
50
+ return ladok_attributvarde_utils_1.EducationalLevelCode.Basic;
51
+ case ladok_attributvarde_utils_1.EducationalLevelCode.Research:
52
+ return ladok_attributvarde_utils_1.EducationalLevelCode.Research;
53
+ default:
54
+ return undefined;
55
+ }
21
56
  };
22
- exports.validateSearchParams = validateSearchParams;
23
57
  const MAX_ANTAL_TRAFFAR = '100';
24
58
  // TODO Benni, maybe this does not make things cleaner, observe
25
59
  // TODO Benni don't forget this when cleaning up types on query object
@@ -28,45 +62,53 @@ const DEFAULT_INSTANCE_QUERY_PARAMS = {
28
62
  instansAttributVarden: 'utbildningstyp',
29
63
  antalTraffar: MAX_ANTAL_TRAFFAR,
30
64
  };
31
- const prepareSearchRequestQueryForKursTillfallen = (utbildningstyper, searchParams) => {
65
+ const prepareSearchRequestQueryForKursTillfallen = (searchParams) => {
32
66
  const { kodEllerBenamning, organisation, sprak, startPeriod, utbildningsniva, avvecklad } = searchParams;
33
- const educationalTypes = filterAndMapEducationalTypes({ utbildningsniva, utbildningstyper });
67
+ const educationalTypes = getUtbildningsnivaParameterForKursTillfalle(utbildningsniva);
34
68
  const filterPeriod = !Boolean(startPeriod);
35
- const requestQuery = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ kodEllerBenamning: kodEllerBenamning !== null && kodEllerBenamning !== void 0 ? kodEllerBenamning : '*' }, getStartPeriodOrTerminkodStart(startPeriod)), (educationalTypes && { utbildningsniva: educationalTypes.join(',') })), (organisation && { organisation })), (sprak && { sprak })), (avvecklad && { avvecklad })), DEFAULT_INSTANCE_QUERY_PARAMS), { utbildningstypid: utbildningsTypIdConstants_1.INSTANCE_UTBILDNINGSTYP_IDS });
69
+ const requestQuery = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ kodEllerBenamning: kodEllerBenamning !== null && kodEllerBenamning !== void 0 ? kodEllerBenamning : '*' }, getStartPeriodOrTerminkodStart(startPeriod)), (educationalTypes && { utbildningsniva: educationalTypes })), (organisation && { organisation })), (sprak && { sprak })), (avvecklad && { avvecklad })), DEFAULT_INSTANCE_QUERY_PARAMS), { utbildningstypid: utbildningsTypIdConstants_1.INSTANCE_UTBILDNINGSTYP_IDS });
36
70
  return { requestQuery, filterPeriod }; // TODO Benni this does two things, filterPeriod should probably be split out
37
71
  };
38
72
  exports.prepareSearchRequestQueryForKursTillfallen = prepareSearchRequestQueryForKursTillfallen;
39
- const prepareSearchRequestQueryForKursInstans = (searchParams) => ({
40
- kodEllerBenamning: searchParams.kodEllerBenamning,
41
- antalTraffar: MAX_ANTAL_TRAFFAR,
42
- avvecklad: 'false',
43
- utbildningstypgrundtyp: 'KURS',
44
- utbildningstypid: utbildningsTypIdConstants_1.VERSION_UTBILDNINGSTYP_IDS,
45
- instansAttributVarden: attributVardenConstants_1.ATTRIBUT_VARDEN_FOR_COURSE_VERSIONS,
46
- senasteversion: 'true',
47
- });
48
- exports.prepareSearchRequestQueryForKursInstans = prepareSearchRequestQueryForKursInstans;
49
- const filterAndMapEducationalTypes = ({ utbildningsniva, utbildningstyper: ladokTypes, }) => {
50
- if (!utbildningsniva)
51
- return [];
52
- const preparatoryTypes = [ladok_attributvarde_utils_1.EDUCATIONAL_TYPE_CODE_FOR_PREPARATORY_LEVEL]; // Hard coded
53
- const basicTypes = ladokTypes
54
- .filter(typ => String(typ.NivaInomStudieordningID) === ladok_attributvarde_utils_1.EducationalLevelCode.Basic)
55
- .map(x => x.Kod);
56
- const advancedTypes = ladokTypes
57
- .filter(typ => String(typ.NivaInomStudieordningID) === ladok_attributvarde_utils_1.EducationalLevelCode.Advanced)
58
- .map(x => x.Kod);
59
- const researchTypes = ladokTypes
60
- .filter(typ => String(typ.NivaInomStudieordningID) === ladok_attributvarde_utils_1.EducationalLevelCode.Research)
61
- .map(x => x.Kod);
62
- const levelMap = new Map([
63
- [ladok_attributvarde_utils_1.EducationalLevelCode.Preparatory, preparatoryTypes],
64
- [ladok_attributvarde_utils_1.EducationalLevelCode.Basic, basicTypes],
65
- [ladok_attributvarde_utils_1.EducationalLevelCode.Advanced, advancedTypes],
66
- [ladok_attributvarde_utils_1.EducationalLevelCode.Research, researchTypes],
67
- ]);
68
- return utbildningsniva === null || utbildningsniva === void 0 ? void 0 : utbildningsniva.flatMap(level => levelMap.get(level) || []);
73
+ /**
74
+ * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypKoder.
75
+ * @param educationalLevels
76
+ * @returns
77
+ */
78
+ const getUtbildningsnivaParameterForKursTillfalle = (educationalLevels) => {
79
+ if (!educationalLevels)
80
+ return undefined;
81
+ return getCommaSeparatedEducationalTypesInFormat('Kod', educationalLevels);
69
82
  };
83
+ /**
84
+ * Takes an array of educational levels and returns a comma-separated string of the corresponding utbildningstypIDn.
85
+ * @param educationalLevels
86
+ * @returns
87
+ */
88
+ const getUtbildningsnivaParameterForKursInstans = (educationalLevels) => {
89
+ if (!educationalLevels)
90
+ return (0, educationalTypeUtils_1.getAllVersionUtbildningstyperIDs)().join(',');
91
+ return getCommaSeparatedEducationalTypesInFormat('ID', educationalLevels);
92
+ };
93
+ const getCommaSeparatedEducationalTypesInFormat = (format, educationalLevels) => {
94
+ const selectedEducationalTypes = (0, educationalTypeUtils_1.getVersionUtbildningstyperForEducationalLevels)(educationalLevels);
95
+ const selectedEducationalTypeIdentifiers = selectedEducationalTypes.map(item => item[format]);
96
+ return selectedEducationalTypeIdentifiers.join(',');
97
+ };
98
+ const getOrganisationsFilter = (organisationer, organisation) => {
99
+ var _a, _b;
100
+ if (organisation && (organisation === null || organisation === void 0 ? void 0 : organisation.length) === 1) {
101
+ return ((_b = (_a = organisationer
102
+ .find(org => org.departmentPrefix === organisation)) === null || _a === void 0 ? void 0 : _a.departments.map(department => department.code).join(',')) !== null && _b !== void 0 ? _b : organisation);
103
+ }
104
+ return organisation;
105
+ };
106
+ const prepareSearchRequestQueryForKursInstans = (searchParams, schoolsWithDepartments) => {
107
+ const { kodEllerBenamning, avvecklad, organisation, utbildningsniva } = searchParams;
108
+ const organisationsFilter = getOrganisationsFilter(schoolsWithDepartments, organisation);
109
+ return Object.assign(Object.assign(Object.assign({ kodEllerBenamning: kodEllerBenamning !== null && kodEllerBenamning !== void 0 ? kodEllerBenamning : '*', antalTraffar: MAX_ANTAL_TRAFFAR }, (avvecklad && { avvecklad })), (organisationsFilter && { organisation: organisationsFilter })), { utbildningstypgrundtyp: 'KURS', utbildningstypid: getUtbildningsnivaParameterForKursInstans(utbildningsniva), instansAttributVarden: attributVardenConstants_1.ATTRIBUT_VARDEN_FOR_COURSE_VERSIONS, senasteversion: 'true' });
110
+ };
111
+ exports.prepareSearchRequestQueryForKursInstans = prepareSearchRequestQueryForKursInstans;
70
112
  /**
71
113
  * If startPeriod is defined, returns it as an object with startPeriod property and comma-separated values.
72
114
  * If not, returns an object with terminkodStart property and the default period.
@@ -1 +1 @@
1
- {"version":3,"file":"searchUtils.js","sourceRoot":"","sources":["../../../src/search/utils/searchUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchUtils.js","sourceRoot":"","sources":["../../../src/search/utils/searchUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { LadokMellanlagerApiClient } from '@kth/ladok-mellanlager-client';
2
+ import { Language } from '../utils';
3
+ export declare const createSupportApi: (ladokClient: LadokMellanlagerApiClient) => SupportApi;
4
+ export type SupportApi = {
5
+ createDepartmentList: (language: Language, deprecated?: boolean) => Promise<SchoolWithDepartments[]>;
6
+ };
7
+ type DepartmentFlat = {
8
+ name: string;
9
+ code: string;
10
+ };
11
+ export type SchoolWithDepartments = {
12
+ departmentPrefix: string;
13
+ name: string;
14
+ departments: DepartmentFlat[];
15
+ };
16
+ export {};
@@ -0,0 +1,137 @@
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.createSupportApi = void 0;
13
+ const createSupportApi = (ladokClient) => {
14
+ return {
15
+ createDepartmentList: (language_1, ...args_1) => __awaiter(void 0, [language_1, ...args_1], void 0, function* (language, deprecated = false) {
16
+ var _a, _b, _c, _d;
17
+ const [organisationskopplingsResponse, organisationsResponse] = yield Promise.all([
18
+ ladokClient.organisationskoppling(),
19
+ ladokClient.organisation(),
20
+ ]);
21
+ const organisationer = (_b = (_a = organisationsResponse.data) === null || _a === void 0 ? void 0 : _a.Organisationer) !== null && _b !== void 0 ? _b : [];
22
+ const organisationskopplingar = (_d = (_c = organisationskopplingsResponse.data) === null || _c === void 0 ? void 0 : _c.Organisationskopplingar) !== null && _d !== void 0 ? _d : [];
23
+ const schoolsWithDepartments = extractSchoolsWithDepartments({
24
+ organisationer,
25
+ organisationskopplingar,
26
+ language,
27
+ deprecated,
28
+ });
29
+ return schoolsWithDepartments;
30
+ }),
31
+ };
32
+ };
33
+ exports.createSupportApi = createSupportApi;
34
+ const currentSchoolCodes = ['A', 'C', 'J', 'M', 'S', 'U'];
35
+ const deprecatedSchoolCodes = ['D', 'K', 'H', 'L'];
36
+ const deprecatedOrganisationCodesToInclude = ['DM', 'KD', 'KE', 'KF', 'HA', 'HPN', 'LA', 'LPA'];
37
+ const currentOrganisationCodesToExclude = [
38
+ 'AA',
39
+ 'AD',
40
+ 'ADA',
41
+ 'AG',
42
+ 'AGA',
43
+ 'AI',
44
+ 'AIA',
45
+ 'AK',
46
+ 'AKA',
47
+ 'ALA',
48
+ 'AM',
49
+ 'CA',
50
+ 'CBA',
51
+ 'CBB',
52
+ 'JA',
53
+ 'MA',
54
+ 'MAD',
55
+ 'MAS',
56
+ 'MFE',
57
+ 'MK',
58
+ 'SAC',
59
+ 'UTHS',
60
+ 'LA',
61
+ ]; // TODO This is a list of organisationCodes that has neither current nor cancelled courses. We have to find a better way to do this.
62
+ const getSchoolCodes = (deprecated) => {
63
+ if (deprecated)
64
+ return deprecatedSchoolCodes;
65
+ return currentSchoolCodes;
66
+ };
67
+ const filterDepartments = (departments, deprecated) => {
68
+ if (deprecated) {
69
+ return departments.filter(department => deprecatedOrganisationCodesToInclude.includes(department.code));
70
+ }
71
+ return departments.filter(department => currentOrganisationCodesToExclude.every(code => !department.code.startsWith(code)));
72
+ };
73
+ function extractSchoolsWithDepartments({ organisationer, organisationskopplingar, language, deprecated = false, }) {
74
+ const schoolCodes = getSchoolCodes(deprecated);
75
+ const schoolOrganisations = organisationer.filter(organisation => schoolCodes.includes(organisation.Organisationskod));
76
+ const schoolsWithDepartments = schoolOrganisations.map(school => {
77
+ const departmentHierarchy = getSubDepartments({
78
+ uid: school.Uid,
79
+ organisationskopplingar,
80
+ organisationer,
81
+ language,
82
+ });
83
+ const allDepartments = departmentHierarchy.flatMap(flattenDepartment);
84
+ // This filters out departments like "9A"
85
+ const departments = allDepartments.filter(department => department.code.startsWith(school.Organisationskod));
86
+ departments.sort((a, b) => a.code.localeCompare(b.code));
87
+ const departmentsToShow = filterDepartments(departments, deprecated);
88
+ return {
89
+ departmentPrefix: school.Organisationskod,
90
+ name: getSchoolNameFromLadokOrganisation(school, language),
91
+ departments: departmentsToShow,
92
+ };
93
+ });
94
+ schoolsWithDepartments.sort((a, b) => a.departmentPrefix.localeCompare(b.departmentPrefix));
95
+ return schoolsWithDepartments;
96
+ }
97
+ const getSubDepartments = ({ uid, organisationskopplingar, organisationer, language, }) => {
98
+ const matchingDepartmentKopplingar = organisationskopplingar.filter(koppling => koppling.OverliggandeRef.Uid === uid);
99
+ const matchingDepartments = matchingDepartmentKopplingar
100
+ .map(koppling => {
101
+ var _a;
102
+ const department = organisationer.find(org => org.Uid === koppling.UnderliggandeRef.Uid);
103
+ if (!department || !isCurrentDepartment(department))
104
+ return null;
105
+ const name = getDepartmentNameFromLadokOrganisation(department, language);
106
+ return {
107
+ name,
108
+ code: (_a = department.Organisationskod) !== null && _a !== void 0 ? _a : '',
109
+ departments: getSubDepartments({ uid: department.Uid, organisationskopplingar, organisationer, language }),
110
+ };
111
+ })
112
+ .filter(department => department !== null);
113
+ return matchingDepartments;
114
+ };
115
+ const isCurrentDepartment = (organisation) => {
116
+ var _a, _b;
117
+ return !((_a = organisation.Giltighetsperiod) === null || _a === void 0 ? void 0 : _a.Slutdatum) || new Date((_b = organisation.Giltighetsperiod) === null || _b === void 0 ? void 0 : _b.Slutdatum) > new Date();
118
+ };
119
+ const getSchoolNameFromLadokOrganisation = (org, language) => {
120
+ var _a;
121
+ let name = (_a = org.Benamning[language].split('/')[1]) !== null && _a !== void 0 ? _a : org.Benamning.sv;
122
+ name = name.replace('Skolan för ', '');
123
+ name = `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
124
+ return name;
125
+ };
126
+ const getDepartmentNameFromLadokOrganisation = (org, language) => {
127
+ var _a;
128
+ let name = (_a = org.Benamning[language].split('/')[1]) !== null && _a !== void 0 ? _a : org.Benamning.sv;
129
+ return name;
130
+ };
131
+ const flattenDepartment = ({ name, code, departments }) => {
132
+ if (departments.length === 0) {
133
+ return [{ code, name }];
134
+ }
135
+ return [{ code, name }, ...departments.flatMap(flattenDepartment)];
136
+ };
137
+ //# sourceMappingURL=createSupportApis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSupportApis.js","sourceRoot":"","sources":["../../src/supportApis/createSupportApis.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ import { ProgramInstans } from '../mapProgramInstans';
9
9
  import { ProgramTillfalle } from '../mapProgramTillfalle';
10
10
  import { SearchApi } from '../search/types';
11
11
  import { ProgramCurriculum } from '../utils/programUtil';
12
+ import { ProgramSyllabus } from '../mapProgramSyllabus';
13
+ import { SupportApi } from '../supportApis/createSupportApis';
12
14
  export type OmKursenLadokApiClient = {
13
15
  getLatestCourseVersion: (courseCode: string, language: Language) => Promise<(Course & ResponseInfo) | ResponseInfo>;
14
16
  getLatestCourseVersionIncludingCancelled: (courseCode: string, language: Language) => Promise<(Course & ResponseInfo) | ResponseInfo>;
@@ -28,9 +30,10 @@ export type OmKursenLadokApiClient = {
28
30
  }>;
29
31
  getUtbildningstilfalleStructure: (utbildningstillfalleUID: string, language: Language) => Promise<any>;
30
32
  getCourseSyllabus: (courseCode: string, semester: string, language: Language) => Promise<KursPlan> | undefined;
31
- getProgramSyllabus: (courseCode: string, semester: string, language: Language) => any;
33
+ getProgramSyllabus: (courseCode: string, semester: string, language: Language) => Promise<ProgramSyllabus>;
32
34
  getCourseSyllabuses: (courseCode: string, language: Language) => Promise<KursPlan[]> | undefined;
33
35
  getAllGradingScales: () => Promise<any>;
34
36
  getAllGradingScalesCodes: () => Promise<any>;
35
37
  getPeriods: () => Promise<MellanlagringResponse<Period>>;
38
+ Support: SupportApi;
36
39
  };
@@ -1,4 +1,4 @@
1
- import { LadokMellanlagerApiClient, Strukturdel } from '@kth/ladok-mellanlager-client';
1
+ import { Fritext, LadokMellanlagerApiClient, Strukturdel } from '@kth/ladok-mellanlager-client';
2
2
  import { Language } from './languageUtil';
3
3
  import { StructurePartInstance } from '../mapStructureCourses';
4
4
  import { StructurePartVersion } from '../mapStructurePartVersions';
@@ -23,7 +23,7 @@ export declare const handleError: (message: string, error?: any) => {
23
23
  error: string;
24
24
  details: any;
25
25
  };
26
- export declare const fetchStructureByTillfalleUid: (uid: string, ladokClient: LadokMellanlagerApiClient) => Promise<Strukturdel[]>;
26
+ export declare const fetchStructureByTillfalleUid: (uid: string, ladokClient: LadokMellanlagerApiClient) => Promise<import("@kth/ladok-mellanlager-client").UtbildningstillfalleStruktur | undefined>;
27
27
  export declare const fetchStructureByInstansUid: (uid: string, ladokClient: LadokMellanlagerApiClient) => Promise<Strukturdel[]>;
28
28
  export declare const fetchStructurePartInstances: (utbildningstillfalleUIDn: string[], ladokClient: LadokMellanlagerApiClient) => Promise<(import("@kth/ladok-mellanlager-client").UtbildningstillfalleSlim | undefined)[]>;
29
29
  export declare const fetchStructurePartsVersions: (utbildningsinstansUIDn: string[], ladokClient: LadokMellanlagerApiClient) => Promise<(import("@kth/ladok-mellanlager-client").UtbildningsinstansSlim | undefined)[]>;
@@ -33,6 +33,7 @@ type CategorizedStrukturdel = Strukturdel & {
33
33
  export declare const fetchAndCategorizeStructureParts: (utbildningstillfalleUID: string, language: Language, ladokClient: LadokMellanlagerApiClient) => Promise<{
34
34
  structureCourses: ProgramCourse[];
35
35
  structureSpecializations: StructurePartInstance[];
36
+ freeTexts: Fritext[];
36
37
  }>;
37
38
  export declare const fetchProgramStructure: (utbildningstillfalleUID: string, language: Language, ladokClient: LadokMellanlagerApiClient) => Promise<ProgramCurriculumFromStructure[]>;
38
39
  export {};
@@ -20,10 +20,9 @@ const handleError = (message, error) => {
20
20
  };
21
21
  exports.handleError = handleError;
22
22
  const fetchStructureByTillfalleUid = (uid, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
23
- var _a;
24
23
  try {
25
24
  const struktur = yield ladokClient.utbildningstillfalleStruktur(uid);
26
- return ((_a = struktur === null || struktur === void 0 ? void 0 : struktur.data) === null || _a === void 0 ? void 0 : _a.Strukturdelar) || [];
25
+ return struktur === null || struktur === void 0 ? void 0 : struktur.data;
27
26
  }
28
27
  catch (error) {
29
28
  throw (0, exports.handleError)('Failed to fetch structure', error);
@@ -197,14 +196,16 @@ function mergeStructurePartInstancesAndVersions(filteredMappedStructurePartsDivi
197
196
  });
198
197
  }
199
198
  const fetchAndCategorizeStructureParts = (utbildningstillfalleUID, language, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
200
- const structureParts = yield (0, exports.fetchStructureByTillfalleUid)(utbildningstillfalleUID, ladokClient);
201
- const categorizedStrukturParts = categorizeStructureParts(structureParts);
199
+ const structureData = yield (0, exports.fetchStructureByTillfalleUid)(utbildningstillfalleUID, ladokClient);
200
+ const { Strukturdelar = [], Fritexter: freeTexts = [] } = structureData || {};
201
+ const categorizedStrukturParts = categorizeStructureParts(Strukturdelar);
202
202
  const structurePartsDevidedByType = yield fetchStructurePartsByType(categorizedStrukturParts, language, ladokClient);
203
203
  const { filteredMappedStructurePartsDividedByType, specializationListFromStructure } = separateSpecializations(structurePartsDevidedByType);
204
204
  const filteredMappedStructurePartInstancesAndVersions = yield mergeStructurePartInstancesAndVersions(filteredMappedStructurePartsDividedByType, ladokClient, language);
205
205
  return {
206
206
  structureCourses: filteredMappedStructurePartInstancesAndVersions,
207
207
  structureSpecializations: specializationListFromStructure,
208
+ freeTexts,
208
209
  };
209
210
  });
210
211
  exports.fetchAndCategorizeStructureParts = fetchAndCategorizeStructureParts;
@@ -218,12 +219,13 @@ const getMainProgramInstanceData = (uid, language, ladokClient) => __awaiter(voi
218
219
  const omfattning = programDetails.data.Tillfallesperioder.reduce((sum, period) => sum + period.Omfattningsvarde, 0);
219
220
  const startperiod = (0, ladok_attributvarde_utils_1.extractGrunddata)(programDetails.data.Attributvarden, 'utbildning.attribut.startperiod');
220
221
  const lengthInStudyYears = Math.ceil(Number(omfattning) / 60);
221
- const { structureCourses, structureSpecializations } = yield (0, exports.fetchAndCategorizeStructureParts)(uid, language, ladokClient);
222
+ const { structureCourses, structureSpecializations, freeTexts } = yield (0, exports.fetchAndCategorizeStructureParts)(uid, language, ladokClient);
222
223
  return {
223
224
  startperiod,
224
225
  lengthInStudyYears,
225
226
  structureCourses,
226
227
  structureSpecializations,
228
+ freeTexts,
227
229
  };
228
230
  });
229
231
  const mapSpecializationCurriculums = (specializations, startperiodCode, lengthInStudyYears, language, ladokClient, allPeriods) => __awaiter(void 0, void 0, void 0, function* () {
@@ -234,11 +236,11 @@ const mapSpecializationCurriculums = (specializations, startperiodCode, lengthIn
234
236
  .filter(Boolean)
235
237
  .map(entity => (0, mapStructurePartVersions_1.mapStructurePartVersions)(entity, language));
236
238
  const specializationsCourseListFromStructure = yield Promise.all(tillfalleUids.map((uid) => __awaiter(void 0, void 0, void 0, function* () {
237
- const { structureCourses } = yield (0, exports.fetchAndCategorizeStructureParts)(uid, language, ladokClient);
238
- return structureCourses;
239
+ const { structureCourses, freeTexts } = yield (0, exports.fetchAndCategorizeStructureParts)(uid, language, ladokClient);
240
+ return { structureCourses, freeTexts };
239
241
  })));
240
242
  return mappedSpecializations.map((spec, index) => ({
241
- studyYears: (0, studyYearUtil_1.generateStudyYearData)(specializationsCourseListFromStructure[index], allPeriods, startperiodCode, lengthInStudyYears),
243
+ studyYears: (0, studyYearUtil_1.generateStudyYearData)(specializationsCourseListFromStructure[index].structureCourses, specializationsCourseListFromStructure[index].freeTexts, allPeriods, startperiodCode, lengthInStudyYears),
242
244
  programmeSpecialization: {
243
245
  programmeSpecializationCode: spec.kod,
244
246
  title: spec.benamning,
@@ -247,12 +249,12 @@ const mapSpecializationCurriculums = (specializations, startperiodCode, lengthIn
247
249
  });
248
250
  const fetchProgramStructure = (utbildningstillfalleUID, language, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
249
251
  try {
250
- const { startperiod, lengthInStudyYears, structureCourses, structureSpecializations } = yield getMainProgramInstanceData(utbildningstillfalleUID, language, ladokClient);
252
+ const { startperiod, lengthInStudyYears, structureCourses, structureSpecializations, freeTexts } = yield getMainProgramInstanceData(utbildningstillfalleUID, language, ladokClient);
251
253
  const periodData = yield ladokClient.period(); // TODO: Use cached values
252
254
  if (periodData.type === 'error') {
253
255
  throw new Error(`API error: ${periodData.responseInfo.message}`);
254
256
  }
255
- const mainStudyYears = (0, studyYearUtil_1.generateStudyYearData)(structureCourses, periodData.data.Period, startperiod === null || startperiod === void 0 ? void 0 : startperiod.code, lengthInStudyYears);
257
+ const mainStudyYears = (0, studyYearUtil_1.generateStudyYearData)(structureCourses, freeTexts, periodData.data.Period, startperiod === null || startperiod === void 0 ? void 0 : startperiod.code, lengthInStudyYears);
256
258
  const specializationCurriculums = yield mapSpecializationCurriculums(structureSpecializations, startperiod === null || startperiod === void 0 ? void 0 : startperiod.code, lengthInStudyYears, language, ladokClient, periodData.data.Period);
257
259
  return [{ studyYears: mainStudyYears }, ...specializationCurriculums];
258
260
  }
@@ -1 +1 @@
1
- {"version":3,"file":"programStrukturUtil.js","sourceRoot":"","sources":["../../src/utils/programStrukturUtil.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"programStrukturUtil.js","sourceRoot":"","sources":["../../src/utils/programStrukturUtil.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ const programStrukturUtil_1 = require("./programStrukturUtil");
25
25
  const courseSyllabusUtil_1 = require("./courseSyllabusUtil");
26
26
  const mapProgramSyllabus_1 = require("../mapProgramSyllabus");
27
27
  const SEMESTER_FOR_START_READING_STRUCTURES = {
28
- code: 'HT2020', // we will increase 2025 by 5 (maximum study year that we have for a program) since there can be ongoing programs until 2025
28
+ code: 'HT2025', // we will increase 2025 by {lengthInStudyYear} (maximum study year that we have for a program) since there can be ongoing programs until 2025
29
29
  year: 2025,
30
30
  }; // Based on the following document: https://confluence.sys.kth.se/confluence/pages/viewpage.action?pageId=262933569
31
31
  const DATE_FOR_START_READING_SYLLABUSES = '1998-01-01';
@@ -74,8 +74,18 @@ const hasCourseListMarking = (lokalmarkning) => {
74
74
  attr.markningsvarde.code === ladok_attributvarde_utils_1.MarkningsvardeCode.Ja)) !== null && _a !== void 0 ? _a : false);
75
75
  };
76
76
  exports.hasCourseListMarking = hasCourseListMarking;
77
+ const getTerminKodStartForFetchStructures = (programLengthInYears) => {
78
+ /*
79
+ * Calculates the earliest term code (`terminKodStart`) from which to start reading program structures to find activeProgramTerms.
80
+ *
81
+ * Example: If the current semester is HT2025 and the program runs for 3 years,
82
+ * we calculate HT2022 to ensure we capture all ongoing or overlapping program instances.
83
+ */
84
+ const startYear = SEMESTER_FOR_START_READING_STRUCTURES.year - programLengthInYears + 1;
85
+ return `HT${startYear}`;
86
+ };
77
87
  const getProgramTerms = (program, oldestProgram, language, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
78
- var _a, _b, _c;
88
+ var _a, _b, _c, _d;
79
89
  const { kod, sistaAntagningstermin } = program;
80
90
  const transformedSistaAntagningstermin = sistaAntagningstermin
81
91
  ? (0, periodUtil_1.transformDigitsInPeriod)(sistaAntagningstermin)
@@ -95,23 +105,27 @@ const getProgramTerms = (program, oldestProgram, language, ladokClient) => __awa
95
105
  kodEllerBenamning: kod,
96
106
  baraSistaVersion: 'false',
97
107
  striktKod: 'true',
98
- terminKodStart: SEMESTER_FOR_START_READING_STRUCTURES.code,
99
- attributVarden: 'status,utbildning.attribut.lokalmarkning',
108
+ terminKodStart: getTerminKodStartForFetchStructures(program.lengthInStudyYears),
109
+ attributVarden: 'status,utbildning.attribut.lokalmarkning,utbildning.attribut.startperiod',
100
110
  antalTraffar: '100',
101
111
  };
102
112
  const responseForStructures = yield ladokClient.sokProgramTillfalleSlim(requestObjectForStructures);
103
113
  // 2. searching for structures
114
+ const skipSyllabusesCheck = !!((_a = oldestProgram.giltigFrom) === null || _a === void 0 ? void 0 : _a.startDay) && oldestProgram.giltigFrom.startDay > SEMESTER_FOR_END_READING_SYLLABUSES.date;
115
+ let responseForSyllabuses;
104
116
  // here we will sort out invalid syllabuses terms as well, we need syllabuses being valid after the giltigFran data and before sistaAntagningstermin date
105
- const requestObjectForSyllabuses = {
106
- kodEllerBenamning: kod,
107
- striktKod: 'true',
108
- tillstand: 'BESLUTAD',
109
- attributVarden: 'utbildning.lokalt.attribut.29.utgava',
110
- giltigTill: (_a = lastAdmissionTermData === null || lastAdmissionTermData === void 0 ? void 0 : lastAdmissionTermData.TomDatum) !== null && _a !== void 0 ? _a : SEMESTER_FOR_END_READING_SYLLABUSES.date,
111
- giltigFran: (_c = (_b = oldestProgram.giltigFrom) === null || _b === void 0 ? void 0 : _b.startDay) !== null && _c !== void 0 ? _c : DATE_FOR_START_READING_SYLLABUSES, // we are not able to add giltigTill without giltigFran so this is added for that purpose only
112
- antalTraffar: '100',
113
- };
114
- const responseForSyllabuses = yield ladokClient.sokPlanSlim(requestObjectForSyllabuses);
117
+ if (!skipSyllabusesCheck) {
118
+ const requestObjectForSyllabuses = {
119
+ kodEllerBenamning: kod,
120
+ striktKod: 'true',
121
+ tillstand: 'BESLUTAD',
122
+ attributVarden: 'utbildning.lokalt.attribut.29.utgava',
123
+ giltigTill: (_b = lastAdmissionTermData === null || lastAdmissionTermData === void 0 ? void 0 : lastAdmissionTermData.TomDatum) !== null && _b !== void 0 ? _b : SEMESTER_FOR_END_READING_SYLLABUSES.date,
124
+ giltigFran: (_d = (_c = oldestProgram.giltigFrom) === null || _c === void 0 ? void 0 : _c.startDay) !== null && _d !== void 0 ? _d : DATE_FOR_START_READING_SYLLABUSES, // we are not able to add giltigTill without giltigFran so this is added for that purpose only
125
+ antalTraffar: '100',
126
+ };
127
+ responseForSyllabuses = yield ladokClient.sokPlanSlim(requestObjectForSyllabuses);
128
+ }
115
129
  // 3. searching for sylabuses
116
130
  let programTermsFromStructures = [];
117
131
  if (responseForStructures === null || responseForStructures === void 0 ? void 0 : responseForStructures.items) {