@cyanheads/ris-austria-mcp-server 0.1.5

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 (154) hide show
  1. package/AGENTS.md +401 -0
  2. package/CLAUDE.md +401 -0
  3. package/Dockerfile +125 -0
  4. package/LICENSE +201 -0
  5. package/README.md +309 -0
  6. package/changelog/0.1.x/0.1.0.md +25 -0
  7. package/changelog/0.1.x/0.1.1.md +24 -0
  8. package/changelog/0.1.x/0.1.2.md +16 -0
  9. package/changelog/0.1.x/0.1.3.md +11 -0
  10. package/changelog/0.1.x/0.1.4.md +11 -0
  11. package/changelog/0.1.x/0.1.5.md +18 -0
  12. package/changelog/template.md +129 -0
  13. package/dist/config/server-config.d.ts +19 -0
  14. package/dist/config/server-config.d.ts.map +1 -0
  15. package/dist/config/server-config.js +35 -0
  16. package/dist/config/server-config.js.map +1 -0
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +37 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts +30 -0
  22. package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts.map +1 -0
  23. package/dist/mcp-server/resources/definitions/ris-document.resource.js +75 -0
  24. package/dist/mcp-server/resources/definitions/ris-document.resource.js.map +1 -0
  25. package/dist/mcp-server/tools/definitions/_shared.d.ts +8 -0
  26. package/dist/mcp-server/tools/definitions/_shared.d.ts.map +1 -0
  27. package/dist/mcp-server/tools/definitions/_shared.js +10 -0
  28. package/dist/mcp-server/tools/definitions/_shared.js.map +1 -0
  29. package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts +189 -0
  30. package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts.map +1 -0
  31. package/dist/mcp-server/tools/definitions/ris-get-document.tool.js +504 -0
  32. package/dist/mcp-server/tools/definitions/ris-get-document.tool.js.map +1 -0
  33. package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts +42 -0
  34. package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts.map +1 -0
  35. package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js +316 -0
  36. package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js.map +1 -0
  37. package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts +80 -0
  38. package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts.map +1 -0
  39. package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js +529 -0
  40. package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js.map +1 -0
  41. package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts +118 -0
  42. package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts.map +1 -0
  43. package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js +389 -0
  44. package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js.map +1 -0
  45. package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts +178 -0
  46. package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts.map +1 -0
  47. package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js +495 -0
  48. package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js.map +1 -0
  49. package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts +80 -0
  50. package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts.map +1 -0
  51. package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js +264 -0
  52. package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js.map +1 -0
  53. package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts +147 -0
  54. package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts.map +1 -0
  55. package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js +509 -0
  56. package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js.map +1 -0
  57. package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts +145 -0
  58. package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts.map +1 -0
  59. package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js +466 -0
  60. package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js.map +1 -0
  61. package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts +73 -0
  62. package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts.map +1 -0
  63. package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js +265 -0
  64. package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js.map +1 -0
  65. package/dist/services/ris/normalizer.d.ts +40 -0
  66. package/dist/services/ris/normalizer.d.ts.map +1 -0
  67. package/dist/services/ris/normalizer.js +480 -0
  68. package/dist/services/ris/normalizer.js.map +1 -0
  69. package/dist/services/ris/reference/applications.d.ts +529 -0
  70. package/dist/services/ris/reference/applications.d.ts.map +1 -0
  71. package/dist/services/ris/reference/applications.js +520 -0
  72. package/dist/services/ris/reference/applications.js.map +1 -0
  73. package/dist/services/ris/reference/changed-since-intervals.d.ts +42 -0
  74. package/dist/services/ris/reference/changed-since-intervals.d.ts.map +1 -0
  75. package/dist/services/ris/reference/changed-since-intervals.js +16 -0
  76. package/dist/services/ris/reference/changed-since-intervals.js.map +1 -0
  77. package/dist/services/ris/reference/citation-formats.d.ts +39 -0
  78. package/dist/services/ris/reference/citation-formats.d.ts.map +1 -0
  79. package/dist/services/ris/reference/citation-formats.js +39 -0
  80. package/dist/services/ris/reference/citation-formats.js.map +1 -0
  81. package/dist/services/ris/reference/collections.d.ts +82 -0
  82. package/dist/services/ris/reference/collections.d.ts.map +1 -0
  83. package/dist/services/ris/reference/collections.js +102 -0
  84. package/dist/services/ris/reference/collections.js.map +1 -0
  85. package/dist/services/ris/reference/courts.d.ts +201 -0
  86. package/dist/services/ris/reference/courts.d.ts.map +1 -0
  87. package/dist/services/ris/reference/courts.js +198 -0
  88. package/dist/services/ris/reference/courts.js.map +1 -0
  89. package/dist/services/ris/reference/decision-kinds.d.ts +78 -0
  90. package/dist/services/ris/reference/decision-kinds.d.ts.map +1 -0
  91. package/dist/services/ris/reference/decision-kinds.js +117 -0
  92. package/dist/services/ris/reference/decision-kinds.js.map +1 -0
  93. package/dist/services/ris/reference/decision-types.d.ts +36 -0
  94. package/dist/services/ris/reference/decision-types.d.ts.map +1 -0
  95. package/dist/services/ris/reference/decision-types.js +29 -0
  96. package/dist/services/ris/reference/decision-types.js.map +1 -0
  97. package/dist/services/ris/reference/district-authorities.d.ts +314 -0
  98. package/dist/services/ris/reference/district-authorities.d.ts.map +1 -0
  99. package/dist/services/ris/reference/district-authorities.js +212 -0
  100. package/dist/services/ris/reference/district-authorities.js.map +1 -0
  101. package/dist/services/ris/reference/gazette-parts.d.ts +73 -0
  102. package/dist/services/ris/reference/gazette-parts.d.ts.map +1 -0
  103. package/dist/services/ris/reference/gazette-parts.js +58 -0
  104. package/dist/services/ris/reference/gazette-parts.js.map +1 -0
  105. package/dist/services/ris/reference/index.d.ts +23 -0
  106. package/dist/services/ris/reference/index.d.ts.map +1 -0
  107. package/dist/services/ris/reference/index.js +23 -0
  108. package/dist/services/ris/reference/index.js.map +1 -0
  109. package/dist/services/ris/reference/issuing-bodies.d.ts +642 -0
  110. package/dist/services/ris/reference/issuing-bodies.d.ts.map +1 -0
  111. package/dist/services/ris/reference/issuing-bodies.js +616 -0
  112. package/dist/services/ris/reference/issuing-bodies.js.map +1 -0
  113. package/dist/services/ris/reference/justiz-subject-areas.d.ts +133 -0
  114. package/dist/services/ris/reference/justiz-subject-areas.d.ts.map +1 -0
  115. package/dist/services/ris/reference/justiz-subject-areas.js +67 -0
  116. package/dist/services/ris/reference/justiz-subject-areas.js.map +1 -0
  117. package/dist/services/ris/reference/law-types.d.ts +46 -0
  118. package/dist/services/ris/reference/law-types.d.ts.map +1 -0
  119. package/dist/services/ris/reference/law-types.js +41 -0
  120. package/dist/services/ris/reference/law-types.js.map +1 -0
  121. package/dist/services/ris/reference/ministries.d.ts +360 -0
  122. package/dist/services/ris/reference/ministries.d.ts.map +1 -0
  123. package/dist/services/ris/reference/ministries.js +408 -0
  124. package/dist/services/ris/reference/ministries.js.map +1 -0
  125. package/dist/services/ris/reference/search-syntax.d.ts +66 -0
  126. package/dist/services/ris/reference/search-syntax.d.ts.map +1 -0
  127. package/dist/services/ris/reference/search-syntax.js +65 -0
  128. package/dist/services/ris/reference/search-syntax.js.map +1 -0
  129. package/dist/services/ris/reference/section-types.d.ts +33 -0
  130. package/dist/services/ris/reference/section-types.d.ts.map +1 -0
  131. package/dist/services/ris/reference/section-types.js +29 -0
  132. package/dist/services/ris/reference/section-types.js.map +1 -0
  133. package/dist/services/ris/reference/stages.d.ts +41 -0
  134. package/dist/services/ris/reference/stages.d.ts.map +1 -0
  135. package/dist/services/ris/reference/stages.js +27 -0
  136. package/dist/services/ris/reference/stages.js.map +1 -0
  137. package/dist/services/ris/reference/states.d.ts +90 -0
  138. package/dist/services/ris/reference/states.d.ts.map +1 -0
  139. package/dist/services/ris/reference/states.js +85 -0
  140. package/dist/services/ris/reference/states.js.map +1 -0
  141. package/dist/services/ris/request-builder.d.ts +195 -0
  142. package/dist/services/ris/request-builder.d.ts.map +1 -0
  143. package/dist/services/ris/request-builder.js +673 -0
  144. package/dist/services/ris/request-builder.js.map +1 -0
  145. package/dist/services/ris/ris-service.d.ts +65 -0
  146. package/dist/services/ris/ris-service.d.ts.map +1 -0
  147. package/dist/services/ris/ris-service.js +200 -0
  148. package/dist/services/ris/ris-service.js.map +1 -0
  149. package/dist/services/ris/types.d.ts +651 -0
  150. package/dist/services/ris/types.d.ts.map +1 -0
  151. package/dist/services/ris/types.js +11 -0
  152. package/dist/services/ris/types.js.map +1 -0
  153. package/package.json +108 -0
  154. package/server.json +111 -0
@@ -0,0 +1,480 @@
1
+ /**
2
+ * @fileoverview Normalizer for RIS OGD responses: unwraps the JSON-serialized-XML envelope,
3
+ * coerces object-or-array lists, classifies in-band errors, and maps the six controller
4
+ * metadata classes to the normalized shapes in `types.ts`.
5
+ *
6
+ * Error classification (observed live 2026-07-05): the handbook documents an `@type`
7
+ * attribute on `OgdSearchResult.Error`, but production responses omit it and prefix the
8
+ * message with `soap:Client.` / `soap:Server.` instead — both signals are checked. Client
9
+ * errors become `InvalidParams` with RIS's message passed through (it names the invalid
10
+ * element); everything else is treated as a transient upstream failure, never a
11
+ * `SerializationError`.
12
+ * @module services/ris/normalizer
13
+ */
14
+ import { invalidParams, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
15
+ /* ------------------------------------------------------------------------------------ */
16
+ /* Generic coercion and text helpers */
17
+ /* ------------------------------------------------------------------------------------ */
18
+ /** Coerce RIS's object-or-array serialization to an array (empty for null/undefined/''). */
19
+ export function coerceOneOrMany(value) {
20
+ if (value === undefined || value === null || value === '')
21
+ return [];
22
+ return Array.isArray(value) ? value : [value];
23
+ }
24
+ /**
25
+ * Coerce a RIS wrapped list (`{ item: T | T[] }`), a bare scalar, or an empty element to
26
+ * a string array — the upstream uses all three shapes for the same logical field.
27
+ */
28
+ export function coerceWrappedList(value) {
29
+ if (value === undefined || value === null || value === '')
30
+ return [];
31
+ if (typeof value === 'string')
32
+ return [value];
33
+ return coerceOneOrMany(value.item).filter((entry) => typeof entry === 'string' && entry !== '');
34
+ }
35
+ const HTML_ENTITIES = [
36
+ [/&/g, '&'],
37
+ [/&lt;/g, '<'],
38
+ [/&gt;/g, '>'],
39
+ [/&quot;/g, '"'],
40
+ [/&#0?39;/g, "'"],
41
+ [/&nbsp;/g, ' '],
42
+ ];
43
+ /** Strip `<br/>` markers and residual HTML remnants from RIS text fields. */
44
+ export function stripHtmlRemnants(text) {
45
+ let out = text.replace(/<br\s*\/?>/gi, '\n').replace(/<[^>]+>/g, '');
46
+ for (const [pattern, replacement] of HTML_ENTITIES)
47
+ out = out.replace(pattern, replacement);
48
+ return out
49
+ .replace(/[ \t]+\n/g, '\n')
50
+ .replace(/\n{2,}/g, '\n')
51
+ .replace(/[ \t]{2,}/g, ' ')
52
+ .trim();
53
+ }
54
+ /** Strip and trim a raw text field; empty/absent values become `undefined`. */
55
+ function cleanText(value) {
56
+ if (typeof value !== 'string')
57
+ return;
58
+ const cleaned = stripHtmlRemnants(value);
59
+ return cleaned === '' ? undefined : cleaned;
60
+ }
61
+ /** Pass a raw scalar through unchanged, mapping empty strings to `undefined`. */
62
+ function rawText(value) {
63
+ return typeof value === 'string' && value !== '' ? value : undefined;
64
+ }
65
+ const CELEX_BRACKET = /\[CELEX-?Nr\.?:?\s*([^\]]+)\]/gi;
66
+ /** Parse `[CELEX-Nr.: …]` markers (possibly multi-valued) out of RIS text fields. */
67
+ export function parseCelexReferences(...texts) {
68
+ const out = new Set();
69
+ for (const text of texts) {
70
+ if (!text)
71
+ continue;
72
+ for (const match of text.matchAll(CELEX_BRACKET)) {
73
+ for (const token of (match[1] ?? '').split(/[,;\s]+/)) {
74
+ if (token !== '')
75
+ out.add(token);
76
+ }
77
+ }
78
+ }
79
+ return [...out];
80
+ }
81
+ /** Detect an HTML error page masquerading as an API response. */
82
+ export function isHtmlErrorPage(text) {
83
+ return /^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text);
84
+ }
85
+ /**
86
+ * Drop `undefined`-valued keys so optional fields stay genuinely absent
87
+ * (`exactOptionalPropertyTypes`). Input is keyed against the target type, so field-name
88
+ * typos still fail compilation.
89
+ */
90
+ function prune(obj) {
91
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
92
+ }
93
+ /* ------------------------------------------------------------------------------------ */
94
+ /* Envelope handling */
95
+ /* ------------------------------------------------------------------------------------ */
96
+ const SOAP_PREFIX = /^soap:(Client|Server)[.:]?\s*/;
97
+ function classifyError(error) {
98
+ const type = error['@type'];
99
+ if (type === 'Client' || type === 'Server')
100
+ return type;
101
+ const match = SOAP_PREFIX.exec(error.Message ?? '');
102
+ return match ? match[1] : undefined;
103
+ }
104
+ /**
105
+ * Throw when the envelope carries an in-band error. Client errors pass RIS's message
106
+ * through — it names the invalid element and its expected datatype; Server and
107
+ * unclassifiable errors are transient (`ServiceUnavailable`).
108
+ */
109
+ export function assertNoInBandError(result) {
110
+ const error = result.Error;
111
+ if (!error)
112
+ return;
113
+ const message = (error.Message ?? 'RIS returned an unspecified error.')
114
+ .replace(SOAP_PREFIX, '')
115
+ .trim();
116
+ const data = prune({ risApplication: rawText(error.Applikation) });
117
+ if (classifyError(error) === 'Client')
118
+ throw invalidParams(message, data);
119
+ throw serviceUnavailable(message, data);
120
+ }
121
+ function unrecognizedEnvelope(detail) {
122
+ throw serviceUnavailable(`RIS returned an unrecognized response envelope (${detail}) — retry shortly.`);
123
+ }
124
+ function parseEnvelope(payload) {
125
+ const result = payload?.OgdSearchResult;
126
+ if (result === undefined || result === null)
127
+ unrecognizedEnvelope('missing OgdSearchResult');
128
+ assertNoInBandError(result);
129
+ const documentResults = result.OgdDocumentResults;
130
+ const total = Number.parseInt(documentResults?.Hits?.['#text'] ?? '', 10);
131
+ if (documentResults === undefined || Number.isNaN(total))
132
+ unrecognizedEnvelope('missing Hits');
133
+ const references = coerceOneOrMany(documentResults.OgdDocumentReference);
134
+ const page = Number.parseInt(documentResults.Hits?.['@pageNumber'] ?? '', 10);
135
+ const pageSize = Number.parseInt(documentResults.Hits?.['@pageSize'] ?? '', 10);
136
+ return {
137
+ page: Number.isNaN(page) ? 1 : page,
138
+ pageSize: Number.isNaN(pageSize) ? references.length : pageSize,
139
+ references,
140
+ total,
141
+ };
142
+ }
143
+ /** Parse a search-controller response into a normalized result page. */
144
+ export function parseSearchResponse(payload) {
145
+ const { page, pageSize, references, total } = parseEnvelope(payload);
146
+ return { hits: references.map(normalizeHit), page, pageSize, total };
147
+ }
148
+ /** Parse a History-controller response, separating changed documents from deletions. */
149
+ export function parseHistoryResponse(payload) {
150
+ const { page, pageSize, references, total } = parseEnvelope(payload);
151
+ const changes = references.map((ref) => {
152
+ const deleted = ref.Deleted;
153
+ if (deleted) {
154
+ const documentNumber = rawText(deleted.ID);
155
+ if (!documentNumber)
156
+ unrecognizedEnvelope('deletion record without ID');
157
+ return {
158
+ kind: 'deleted',
159
+ record: prune({
160
+ application: rawText(deleted.Applikation),
161
+ deletedAt: rawText(deleted.ImportTimestamp),
162
+ documentNumber,
163
+ organ: rawText(deleted.Organ),
164
+ }),
165
+ };
166
+ }
167
+ return { kind: 'document', hit: normalizeHit(ref) };
168
+ });
169
+ return { changes, page, pageSize, total };
170
+ }
171
+ /* ------------------------------------------------------------------------------------ */
172
+ /* Content references */
173
+ /* ------------------------------------------------------------------------------------ */
174
+ const CORE_DATA_TYPES = {
175
+ Authentisch: 'authentic',
176
+ Html: 'html',
177
+ Pdf: 'pdf',
178
+ Rtf: 'rtf',
179
+ Xml: 'xml',
180
+ };
181
+ function keyContentUrls(contentUrl) {
182
+ const keyed = {};
183
+ const other = [];
184
+ for (const entry of coerceOneOrMany(contentUrl)) {
185
+ const url = rawText(entry.Url);
186
+ const dataType = rawText(entry.DataType);
187
+ if (!url || !dataType)
188
+ continue;
189
+ const core = CORE_DATA_TYPES[dataType];
190
+ if (core)
191
+ keyed[core] ??= url;
192
+ else
193
+ other.push({ dataType, url });
194
+ }
195
+ if (other.length > 0)
196
+ keyed.other = other;
197
+ return keyed;
198
+ }
199
+ function normalizeContentReferences(dokumentliste) {
200
+ if (dokumentliste === undefined || dokumentliste === '')
201
+ return [];
202
+ return coerceOneOrMany(dokumentliste.ContentReference).map((ref) => prune({
203
+ name: rawText(ref.Name),
204
+ type: rawText(ref.ContentType),
205
+ urls: keyContentUrls(ref.Urls?.ContentUrl),
206
+ }));
207
+ }
208
+ /* ------------------------------------------------------------------------------------ */
209
+ /* Controller-class metadata maps */
210
+ /* ------------------------------------------------------------------------------------ */
211
+ /** Map the shared consolidated-law node (BrKons / LrKons). */
212
+ function mapConsolidated(kons) {
213
+ return {
214
+ amendment: cleanText(kons?.Aenderung),
215
+ inForceFrom: rawText(kons?.Inkrafttretensdatum),
216
+ inForceUntil: rawText(kons?.Ausserkrafttretensdatum),
217
+ indexes: coerceWrappedList(kons?.Indizes),
218
+ keywords: cleanText(kons?.Schlagworte),
219
+ lawId: rawText(kons?.Gesetzesnummer),
220
+ lawUrl: rawText(kons?.GesamteRechtsvorschriftUrl),
221
+ normType: rawText(kons?.Typ),
222
+ promulgation: cleanText(kons?.Kundmachungsorgan),
223
+ sectionLabel: rawText(kons?.ArtikelParagraphAnlage),
224
+ };
225
+ }
226
+ function mapBundesrecht(raw) {
227
+ const { Begut, BgblAlt, BgblAuth, BgblPdf, BrKons, Erv, RegV } = raw;
228
+ return prune({
229
+ ...mapConsolidated(BrKons),
230
+ abbreviation: rawText(Begut?.Abkuerzung) ?? rawText(RegV?.Abkuerzung),
231
+ alexUrl: rawText(BgblAlt?.AlexUrl),
232
+ author: rawText(Erv?.Author),
233
+ celexReferences: [
234
+ ...new Set([
235
+ ...parseCelexReferences(raw.Titel, BrKons?.Aenderung),
236
+ ...coerceWrappedList(BgblPdf?.CelexNummer),
237
+ ]),
238
+ ],
239
+ controller: 'Bundesrecht',
240
+ decided: rawText(RegV?.Beschlussdatum),
241
+ eli: rawText(raw.Eli),
242
+ gazetteNumber: rawText(BgblAuth?.Bgblnummer) ?? rawText(BgblPdf?.Bgblnummer) ?? rawText(BgblAlt?.Fundstelle),
243
+ issue: rawText(BgblAlt?.Stueck),
244
+ keywords: cleanText(BrKons?.Schlagworte) ??
245
+ cleanText(Begut?.Schlagworte) ??
246
+ cleanText(RegV?.Schlagworte),
247
+ ministry: rawText(Begut?.EinbringendeStelle) ?? rawText(RegV?.EinbringendeStelle),
248
+ normType: rawText(BrKons?.Typ) ??
249
+ rawText(BgblAuth?.Typ) ??
250
+ rawText(BgblPdf?.Typ) ??
251
+ rawText(BgblAlt?.Typ),
252
+ part: rawText(BgblAuth?.Teil) ?? rawText(BgblPdf?.Teil),
253
+ promulgation: cleanText(BrKons?.Kundmachungsorgan) ?? cleanText(BgblAlt?.Kundmachungsorgan),
254
+ publishedDate: rawText(BgblAuth?.Ausgabedatum) ??
255
+ rawText(BgblPdf?.Kundmachungsdatum) ??
256
+ rawText(BgblAlt?.Kundmachungsdatum),
257
+ reviewDeadline: rawText(Begut?.EndeBegutachtungsfrist),
258
+ reviewStart: rawText(Begut?.BeginnBegutachtungsfrist),
259
+ shortTitle: cleanText(raw.Kurztitel),
260
+ source: rawText(Erv?.Source),
261
+ startPage: rawText(BgblAlt?.Anfangsseite),
262
+ title: cleanText(raw.Titel),
263
+ year: rawText(BgblPdf?.Jahrgang),
264
+ });
265
+ }
266
+ function mapLandesrecht(raw) {
267
+ const { Lgbl, LgblAuth, LgblNO, LrKons, Vbl } = raw;
268
+ return prune({
269
+ ...mapConsolidated(LrKons),
270
+ celexReferences: [
271
+ ...new Set([
272
+ ...parseCelexReferences(raw.Titel, LrKons?.Aenderung),
273
+ ...coerceWrappedList(LgblAuth?.CelexNummer),
274
+ ]),
275
+ ],
276
+ controller: 'Landesrecht',
277
+ eli: rawText(LrKons?.Eli) ?? rawText(LgblAuth?.EuropeanLegislationIdentifier),
278
+ gazetteNumber: rawText(LgblAuth?.Lgblnummer) ??
279
+ rawText(Lgbl?.Fundstelle) ??
280
+ rawText(Vbl?.Kundmachungsnummer),
281
+ indexes: [...coerceWrappedList(LrKons?.Indizes), ...coerceWrappedList(LgblNO?.Indizes)],
282
+ issue: rawText(LgblNO?.StueckNummer),
283
+ normType: rawText(LrKons?.Typ) ??
284
+ rawText(LgblAuth?.Typ) ??
285
+ rawText(Lgbl?.Typ) ??
286
+ rawText(LgblNO?.Typ) ??
287
+ rawText(Vbl?.Typ),
288
+ promulgation: cleanText(LrKons?.Kundmachungsorgan) ?? cleanText(Vbl?.Kundmachungsorgan),
289
+ publishedDate: rawText(raw.Kundmachungsdatum) ?? rawText(LgblNO?.Ausgabedatum),
290
+ shortTitle: cleanText(raw.Kurztitel),
291
+ state: rawText(raw.Bundesland),
292
+ systematicNumber: rawText(LgblNO?.Gliederungszahl),
293
+ title: cleanText(raw.Titel),
294
+ });
295
+ }
296
+ const JUDIKATUR_APP_KEYS = [
297
+ 'Vfgh',
298
+ 'Vwgh',
299
+ 'Justiz',
300
+ 'Normenliste',
301
+ 'Bvwg',
302
+ 'Lvwg',
303
+ 'Dsk',
304
+ 'Dok',
305
+ 'Pvak',
306
+ 'Gbk',
307
+ 'Uvs',
308
+ 'AsylGH',
309
+ 'Ubas',
310
+ 'Umse',
311
+ 'Bks',
312
+ 'Verg',
313
+ ];
314
+ function mapJudikatur(raw) {
315
+ const node = JUDIKATUR_APP_KEYS.map((key) => raw[key]).find((value) => value !== undefined && typeof value === 'object') ?? {};
316
+ return prune({
317
+ abbreviation: rawText(node.Abkuerzung),
318
+ caseNumbers: coerceWrappedList(raw.Geschaeftszahl),
319
+ collectionNumber: rawText(node.Sammlungsnummer),
320
+ controller: 'Judikatur',
321
+ courtName: rawText(node.Gericht),
322
+ decisionDate: rawText(raw.Entscheidungsdatum),
323
+ decisionDocumentType: rawText(raw.Dokumenttyp),
324
+ decisionKind: rawText(node.Entscheidungsart),
325
+ decisionUrl: rawText(raw.GesamteEntscheidungUrl),
326
+ ecli: rawText(raw.EuropeanCaseLawIdentifier),
327
+ guidingPrinciple: cleanText(node.Leitsatz),
328
+ headnotesUrl: rawText(raw.RechtssaetzeUrl),
329
+ indexes: coerceWrappedList(node.Indizes),
330
+ issuingBody: rawText(node.EntscheidendeBehoerde),
331
+ keywords: cleanText(raw.Schlagworte),
332
+ legalAreas: coerceWrappedList(node.Rechtsgebiete),
333
+ legalForceNote: cleanText(node.Anfechtung),
334
+ normType: rawText(node.Typ),
335
+ normsCited: coerceWrappedList(raw.Normen),
336
+ note: cleanText(node.Anmerkung),
337
+ reference: rawText(node.Fundstelle),
338
+ state: rawText(node.Bundesland),
339
+ summary: cleanText(node.Kurzinformation),
340
+ textUrl: rawText(raw.EntscheidungstextUrl),
341
+ title: cleanText(node.Titel),
342
+ });
343
+ }
344
+ function mapBezirke(raw) {
345
+ const bvb = raw.Bvb;
346
+ return prune({
347
+ controller: 'Bezirke',
348
+ districtAuthority: rawText(bvb?.Bezirksverwaltungsbehoerde),
349
+ gazetteNumber: rawText(bvb?.Kundmachungsnummer),
350
+ keywords: cleanText(bvb?.Schlagworte),
351
+ normType: rawText(bvb?.Typ),
352
+ promulgation: cleanText(bvb?.Kundmachungsorgan),
353
+ publishedDate: rawText(bvb?.Kundmachungsdatum),
354
+ shortTitle: cleanText(raw.Kurztitel),
355
+ state: rawText(raw.Bundesland),
356
+ title: cleanText(raw.Titel),
357
+ });
358
+ }
359
+ function mapGemeinden(raw) {
360
+ const { Gr, GrA } = raw;
361
+ return prune({
362
+ abbreviation: rawText(GrA?.Abkuerzung),
363
+ caseNumbers: coerceWrappedList(raw.Geschaeftszahl),
364
+ controller: 'Gemeinden',
365
+ district: rawText(GrA?.Bezirk),
366
+ gazetteNumber: rawText(GrA?.KundmachungsorganNr),
367
+ indexes: coerceWrappedList(Gr?.Indizes),
368
+ inForceFrom: rawText(Gr?.Inkrafttretensdatum),
369
+ keywords: cleanText(GrA?.Schlagworte),
370
+ municipality: rawText(raw.Gemeinde),
371
+ normType: rawText(raw.Typ),
372
+ note: cleanText(raw.Anmerkung),
373
+ publishedDate: rawText(GrA?.Kundmachungsdatum),
374
+ shortTitle: cleanText(raw.Kurztitel),
375
+ state: rawText(raw.Bundesland),
376
+ title: cleanText(raw.Titel),
377
+ });
378
+ }
379
+ function mapSonstige(raw) {
380
+ const { Avn, Avsv, Erlaesse, KmGer, Mrp, PruefGewO, Spg, Upts } = raw;
381
+ const issuers = [
382
+ ...(rawText(Avsv?.Urheber) ? [Avsv?.Urheber] : []),
383
+ ...(rawText(Erlaesse?.Bundesministerium) ? [Erlaesse?.Bundesministerium] : []),
384
+ ...coerceWrappedList(Mrp?.Einbringer),
385
+ ];
386
+ const caseNumbers = [
387
+ ...coerceWrappedList(Erlaesse?.Geschaeftszahl),
388
+ ...coerceWrappedList(Avn?.Geschaeftszahl),
389
+ ...coerceWrappedList(KmGer?.GZ),
390
+ ...coerceWrappedList(PruefGewO?.GZ),
391
+ ...coerceWrappedList(Upts?.GZ),
392
+ ];
393
+ return prune({
394
+ caseNumbers,
395
+ controller: 'Sonstige',
396
+ courtName: rawText(KmGer?.Gericht),
397
+ decisionDate: rawText(Upts?.Entscheidungsdatum),
398
+ department: rawText(Erlaesse?.Abteilung),
399
+ inForceFrom: rawText(Avn?.Inkrafttretensdatum) ??
400
+ rawText(Erlaesse?.Inkrafttretensdatum) ??
401
+ rawText(KmGer?.Inkrafttretensdatum) ??
402
+ rawText(PruefGewO?.Inkrafttretensdatum) ??
403
+ rawText(Spg?.Inkrafttretensdatum),
404
+ inForceUntil: rawText(Avn?.Ausserkrafttretensdatum) ??
405
+ rawText(Erlaesse?.Ausserkrafttretensdatum) ??
406
+ rawText(KmGer?.Ausserkrafttretensdatum),
407
+ issuers,
408
+ keywords: cleanText(raw.Schlagworte),
409
+ legislature: rawText(Mrp?.Gesetzgebungsperiode),
410
+ normType: rawText(Avn?.Typ) ??
411
+ rawText(Erlaesse?.Typ) ??
412
+ rawText(KmGer?.Typ) ??
413
+ rawText(PruefGewO?.Typ) ??
414
+ rawText(Spg?.Typ),
415
+ // Upts renders multiple cited norms as one newline-separated scalar (observed live).
416
+ normsCited: [
417
+ ...coerceWrappedList(Avn?.Normen),
418
+ ...(rawText(Upts?.Norm)
419
+ ?.split(/\r?\n/)
420
+ .map((norm) => norm.trim())
421
+ .filter((norm) => norm !== '') ?? []),
422
+ ],
423
+ note: cleanText(Avn?.Anmerkung) ?? cleanText(PruefGewO?.Anmerkung),
424
+ number: rawText(Avsv?.Avsvnummer) ?? rawText(Avn?.Avnnummer) ?? rawText(Spg?.Spgnummer),
425
+ party: rawText(Upts?.Partei),
426
+ planState: rawText(Spg?.Land),
427
+ publishedDate: rawText(raw.Kundmachungsdatum),
428
+ sessionDate: rawText(Mrp?.Sitzungsdatum),
429
+ sessionNumber: rawText(Mrp?.Sitzungsnummer),
430
+ shortTitle: cleanText(raw.Kurztitel),
431
+ summary: cleanText(Avsv?.Kurzinformation) ??
432
+ cleanText(Avn?.Kurzinformation) ??
433
+ cleanText(Erlaesse?.Kurzinformation) ??
434
+ cleanText(KmGer?.Kurzinformation) ??
435
+ cleanText(PruefGewO?.Kurzinformation) ??
436
+ cleanText(Spg?.Kurzinformation),
437
+ title: cleanText(raw.Titel),
438
+ });
439
+ }
440
+ /* ------------------------------------------------------------------------------------ */
441
+ /* Hit normalization */
442
+ /* ------------------------------------------------------------------------------------ */
443
+ /** Normalize one search hit. Throws `ServiceUnavailable` on unrecognized hit shapes. */
444
+ export function normalizeHit(ref) {
445
+ const data = ref.Data;
446
+ const metadaten = data?.Metadaten;
447
+ const documentNumber = rawText(metadaten?.Technisch?.ID);
448
+ if (!documentNumber)
449
+ unrecognizedEnvelope('hit without Technisch.ID');
450
+ let metadata;
451
+ if (metadaten?.Bundesrecht)
452
+ metadata = mapBundesrecht(metadaten.Bundesrecht);
453
+ else if (metadaten?.Landesrecht)
454
+ metadata = mapLandesrecht(metadaten.Landesrecht);
455
+ else if (metadaten?.Judikatur)
456
+ metadata = mapJudikatur(metadaten.Judikatur);
457
+ else if (metadaten?.Bezirke)
458
+ metadata = mapBezirke(metadaten.Bezirke);
459
+ else if (metadaten?.Gemeinden)
460
+ metadata = mapGemeinden(metadaten.Gemeinden);
461
+ else if (metadaten?.Sonstige)
462
+ metadata = mapSonstige(metadaten.Sonstige);
463
+ if (!metadata)
464
+ unrecognizedEnvelope(`hit ${documentNumber} without a controller metadata class`);
465
+ const contentReferences = normalizeContentReferences(data?.Dokumentliste);
466
+ const mainReference = contentReferences.find((entry) => entry.type === 'MainDocument') ?? contentReferences[0];
467
+ return prune({
468
+ application: rawText(metadaten?.Technisch?.Applikation),
469
+ changed: rawText(metadaten?.Allgemein?.Geaendert),
470
+ contentReferences,
471
+ contentUrls: mainReference?.urls ?? {},
472
+ documentNumber,
473
+ documentUrl: rawText(metadaten?.Allgemein?.DokumentUrl),
474
+ metadata,
475
+ organ: rawText(metadaten?.Technisch?.Organ),
476
+ published: rawText(metadaten?.Allgemein?.Veroeffentlicht),
477
+ submitter: rawText(metadaten?.Technisch?.Einbringer),
478
+ });
479
+ }
480
+ //# sourceMappingURL=normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../../src/services/ris/normalizer.ts"],"names":[],"mappings":"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"}