@auditcore/ui-core 0.3.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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1326 -0
  3. package/dist/account/camera.d.ts +8 -0
  4. package/dist/account/controller.d.ts +30 -0
  5. package/dist/account/index.d.ts +7 -0
  6. package/dist/account/messages.d.ts +2 -0
  7. package/dist/account/port.d.ts +10 -0
  8. package/dist/account/presentation.d.ts +9 -0
  9. package/dist/account/types.d.ts +42 -0
  10. package/dist/account/view.d.ts +12 -0
  11. package/dist/attributes/controller.d.ts +26 -0
  12. package/dist/attributes/index.d.ts +5 -0
  13. package/dist/attributes/messages.d.ts +3 -0
  14. package/dist/attributes/port.d.ts +4 -0
  15. package/dist/attributes/types.d.ts +60 -0
  16. package/dist/attributes/view.d.ts +49 -0
  17. package/dist/base/icons.d.ts +38 -0
  18. package/dist/base/index.d.ts +3 -0
  19. package/dist/base/types.d.ts +3 -0
  20. package/dist/batchchecks/controller.d.ts +60 -0
  21. package/dist/batchchecks/index.d.ts +7 -0
  22. package/dist/batchchecks/messages.d.ts +3 -0
  23. package/dist/batchchecks/model.d.ts +38 -0
  24. package/dist/batchchecks/port.d.ts +6 -0
  25. package/dist/batchchecks/rest-port.d.ts +4 -0
  26. package/dist/batchchecks/types.d.ts +121 -0
  27. package/dist/batchchecks/view.d.ts +58 -0
  28. package/dist/benford/chart.d.ts +49 -0
  29. package/dist/benford/controller.d.ts +48 -0
  30. package/dist/benford/index.d.ts +7 -0
  31. package/dist/benford/messages.d.ts +3 -0
  32. package/dist/benford/model.d.ts +32 -0
  33. package/dist/benford/rest-port.d.ts +4 -0
  34. package/dist/benford/types.d.ts +144 -0
  35. package/dist/benford/view.d.ts +45 -0
  36. package/dist/dataprotection/dsfa.d.ts +55 -0
  37. package/dist/dataprotection/dsfaView.d.ts +45 -0
  38. package/dist/dataprotection/exporters.d.ts +33 -0
  39. package/dist/dataprotection/index.d.ts +10 -0
  40. package/dist/dataprotection/messages.d.ts +5 -0
  41. package/dist/dataprotection/registerView.d.ts +47 -0
  42. package/dist/dataprotection/requests.d.ts +16 -0
  43. package/dist/dataprotection/rest-port.d.ts +4 -0
  44. package/dist/dataprotection/types.d.ts +291 -0
  45. package/dist/dataprotection/vvt.d.ts +69 -0
  46. package/dist/dbkanban/controller.d.ts +54 -0
  47. package/dist/dbkanban/index.d.ts +3 -0
  48. package/dist/dbkanban/messages.d.ts +5 -0
  49. package/dist/dbkanban/view.d.ts +39 -0
  50. package/dist/documents/controller.d.ts +63 -0
  51. package/dist/documents/form.d.ts +52 -0
  52. package/dist/documents/importing.d.ts +12 -0
  53. package/dist/documents/index.d.ts +6 -0
  54. package/dist/documents/list.d.ts +21 -0
  55. package/dist/documents/messages.d.ts +8 -0
  56. package/dist/documents/view.d.ts +36 -0
  57. package/dist/download.d.ts +14 -0
  58. package/dist/extraction/controller.d.ts +34 -0
  59. package/dist/extraction/index.d.ts +5 -0
  60. package/dist/extraction/messages.d.ts +3 -0
  61. package/dist/extraction/rest-port.d.ts +4 -0
  62. package/dist/extraction/types.d.ts +115 -0
  63. package/dist/extraction/view.d.ts +35 -0
  64. package/dist/extrapolation/controller-subsample.d.ts +20 -0
  65. package/dist/extrapolation/controller.d.ts +72 -0
  66. package/dist/extrapolation/index.d.ts +9 -0
  67. package/dist/extrapolation/messages.d.ts +3 -0
  68. package/dist/extrapolation/model-design.d.ts +28 -0
  69. package/dist/extrapolation/model-subsample.d.ts +40 -0
  70. package/dist/extrapolation/model.d.ts +92 -0
  71. package/dist/extrapolation/rest-port.d.ts +4 -0
  72. package/dist/extrapolation/types.d.ts +255 -0
  73. package/dist/extrapolation/view-details.d.ts +46 -0
  74. package/dist/extrapolation/view.d.ts +50 -0
  75. package/dist/focus.d.ts +10 -0
  76. package/dist/geo/controller.d.ts +87 -0
  77. package/dist/geo/index.d.ts +6 -0
  78. package/dist/geo/mapView.d.ts +30 -0
  79. package/dist/geo/messages.d.ts +3 -0
  80. package/dist/geo/model.d.ts +43 -0
  81. package/dist/geo/rest-port.d.ts +12 -0
  82. package/dist/geo/types.d.ts +195 -0
  83. package/dist/i18n.d.ts +29 -0
  84. package/dist/identifiers/controller.d.ts +63 -0
  85. package/dist/identifiers/index.d.ts +5 -0
  86. package/dist/identifiers/messages.d.ts +3 -0
  87. package/dist/identifiers/model.d.ts +87 -0
  88. package/dist/identifiers/rest-port.d.ts +4 -0
  89. package/dist/identifiers/types.d.ts +101 -0
  90. package/dist/index.d.ts +33 -0
  91. package/dist/index.js +10676 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/kanban/index.d.ts +2 -0
  94. package/dist/kanban/messages.d.ts +6 -0
  95. package/dist/messages.d.ts +2 -0
  96. package/dist/reporting/controller.d.ts +46 -0
  97. package/dist/reporting/index.d.ts +5 -0
  98. package/dist/reporting/messages.d.ts +3 -0
  99. package/dist/reporting/rest-port.d.ts +4 -0
  100. package/dist/reporting/types.d.ts +72 -0
  101. package/dist/reporting/view.d.ts +12 -0
  102. package/dist/reporttemplates/controller.d.ts +46 -0
  103. package/dist/reporttemplates/index.d.ts +5 -0
  104. package/dist/reporttemplates/messages.d.ts +3 -0
  105. package/dist/reporttemplates/port.d.ts +4 -0
  106. package/dist/reporttemplates/types.d.ts +92 -0
  107. package/dist/reporttemplates/view.d.ts +27 -0
  108. package/dist/risk/controller.d.ts +54 -0
  109. package/dist/risk/format.d.ts +13 -0
  110. package/dist/risk/index.d.ts +7 -0
  111. package/dist/risk/labels.d.ts +9 -0
  112. package/dist/risk/messages.d.ts +3 -0
  113. package/dist/risk/port.d.ts +41 -0
  114. package/dist/risk/state.d.ts +61 -0
  115. package/dist/risk/types.d.ts +107 -0
  116. package/dist/runner/aktionen.d.ts +16 -0
  117. package/dist/runner/controller.d.ts +72 -0
  118. package/dist/runner/eingabe.d.ts +5 -0
  119. package/dist/runner/index.d.ts +9 -0
  120. package/dist/runner/messages.d.ts +3 -0
  121. package/dist/runner/port.d.ts +20 -0
  122. package/dist/runner/profil.d.ts +39 -0
  123. package/dist/runner/types.d.ts +109 -0
  124. package/dist/runner/view-listen.d.ts +32 -0
  125. package/dist/runner/view.d.ts +95 -0
  126. package/dist/samplesize/controller.d.ts +33 -0
  127. package/dist/samplesize/index.d.ts +7 -0
  128. package/dist/samplesize/messages.d.ts +3 -0
  129. package/dist/samplesize/model.d.ts +40 -0
  130. package/dist/samplesize/port.d.ts +9 -0
  131. package/dist/samplesize/types.d.ts +92 -0
  132. package/dist/samplesize/view.d.ts +39 -0
  133. package/dist/sampling/controller.d.ts +62 -0
  134. package/dist/sampling/index.d.ts +6 -0
  135. package/dist/sampling/messages.d.ts +3 -0
  136. package/dist/sampling/model.d.ts +63 -0
  137. package/dist/sampling/rest-port.d.ts +4 -0
  138. package/dist/sampling/types.d.ts +136 -0
  139. package/dist/sampling/view.d.ts +45 -0
  140. package/dist/screening/controller.d.ts +52 -0
  141. package/dist/screening/index.d.ts +8 -0
  142. package/dist/screening/messages.d.ts +7 -0
  143. package/dist/screening/rest-port.d.ts +4 -0
  144. package/dist/screening/runForm.d.ts +22 -0
  145. package/dist/screening/types.d.ts +295 -0
  146. package/dist/screening/view.d.ts +84 -0
  147. package/dist/store.d.ts +30 -0
  148. package/dist/synopsis/controller.d.ts +68 -0
  149. package/dist/synopsis/exporters.d.ts +16 -0
  150. package/dist/synopsis/index.d.ts +8 -0
  151. package/dist/synopsis/messages.d.ts +3 -0
  152. package/dist/synopsis/navigation.d.ts +5 -0
  153. package/dist/synopsis/port.d.ts +38 -0
  154. package/dist/synopsis/types.d.ts +121 -0
  155. package/dist/synopsis/viewModel.d.ts +74 -0
  156. package/dist/synopsis/wordDiff.d.ts +31 -0
  157. package/dist/table/index.d.ts +6 -0
  158. package/dist/tabular/index.d.ts +2 -0
  159. package/dist/tabular/messages.d.ts +3 -0
  160. package/dist/tabular/tableImport.d.ts +40 -0
  161. package/package.json +55 -0
  162. package/styles/account.css +37 -0
  163. package/styles/attributes.css +18 -0
  164. package/styles/base.css +116 -0
  165. package/styles/batchchecks.css +26 -0
  166. package/styles/benford.css +39 -0
  167. package/styles/dataprotection.css +68 -0
  168. package/styles/dbkanban.css +38 -0
  169. package/styles/documents.css +51 -0
  170. package/styles/extraction.css +25 -0
  171. package/styles/extrapolation.css +34 -0
  172. package/styles/geo.css +54 -0
  173. package/styles/identifiers.css +38 -0
  174. package/styles/index.css +24 -0
  175. package/styles/kanban.css +115 -0
  176. package/styles/reporting.css +22 -0
  177. package/styles/reporttemplates.css +21 -0
  178. package/styles/risk.css +92 -0
  179. package/styles/runner.css +54 -0
  180. package/styles/samplesize.css +27 -0
  181. package/styles/sampling.css +31 -0
  182. package/styles/screening.css +86 -0
  183. package/styles/synopsis.css +83 -0
  184. package/styles/table.css +17 -0
  185. package/styles/tabular.css +11 -0
  186. package/styles/tokens.css +121 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Datentypen des REST-Vertrags `auditcore_risk.web` (docs/ui/risk-rest.md).
3
+ * Die Komponenten lesen nur diese Felder; unbekannte Felder werden ignoriert.
4
+ */
5
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
6
+ [key: string]: JsonValue;
7
+ };
8
+ export type JsonObject = {
9
+ [key: string]: JsonValue;
10
+ };
11
+ export type ProfileStatus = 'LEGACY_CHARACTERIZED' | 'CANDIDATE_HUMAN_DECISION_REQUIRED' | 'APPROVED';
12
+ export type WhenMissingColumns = 'error' | 'skip' | 'all_false' | 'undetermined';
13
+ export type Severity = 'INFO' | 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
14
+ export interface ProfileReference {
15
+ id: string;
16
+ version: string;
17
+ fingerprint: string;
18
+ status: ProfileStatus | string;
19
+ }
20
+ export interface RuleView {
21
+ code: string;
22
+ label: string;
23
+ kind: string;
24
+ scope: 'record' | 'dataset' | string;
25
+ severity: Severity | string | null;
26
+ interpretation: string;
27
+ note: string | null;
28
+ requires: string[];
29
+ when_missing_columns: WhenMissingColumns | string;
30
+ inputs: string[];
31
+ parameters: JsonObject;
32
+ origin: JsonObject;
33
+ }
34
+ export interface FieldUse {
35
+ code: string;
36
+ label: string;
37
+ role: string;
38
+ absent: string;
39
+ empty: string;
40
+ }
41
+ export interface FieldEntry {
42
+ name: string;
43
+ meaning: string | null;
44
+ meaning_source: string | null;
45
+ requirement: 'required' | 'value_required' | 'optional' | string;
46
+ required_by: string[];
47
+ value_required_by: string[];
48
+ uses: FieldUse[];
49
+ }
50
+ export interface ProfileDetail extends ProfileReference {
51
+ kind: string;
52
+ legal_status: string;
53
+ rule_count: number;
54
+ field_count: number;
55
+ source: JsonObject;
56
+ input_contract: string | null;
57
+ open_decisions: string[];
58
+ summary_format: string | null;
59
+ assessment: string | null;
60
+ rules: RuleView[];
61
+ fields: FieldEntry[];
62
+ }
63
+ export interface FlagHit {
64
+ code: string;
65
+ label: string;
66
+ reason: string;
67
+ interpretation: string;
68
+ note: string | null;
69
+ severity: Severity | string | null;
70
+ messages: Record<string, string> | null;
71
+ evidence: JsonObject;
72
+ origin: JsonObject;
73
+ inputs?: JsonObject;
74
+ }
75
+ export interface RecordView {
76
+ index: number;
77
+ key?: JsonValue;
78
+ /** Code → Treffer (`true`), kein Merkmal (`false`) oder unbestimmt (`null`). */
79
+ flags: Record<string, boolean | null>;
80
+ codes: string[];
81
+ undetermined: Record<string, string>;
82
+ values: JsonObject;
83
+ assessment: JsonObject | null;
84
+ hits: FlagHit[];
85
+ /** Code → gelesene Eingabefelder mit Werten (Treffer und unbestimmte Merkmale). */
86
+ inputs?: Record<string, JsonObject>;
87
+ }
88
+ export interface DatasetFinding {
89
+ code: string;
90
+ label: string;
91
+ triggered: boolean;
92
+ value: number | string | null;
93
+ reason: string;
94
+ evidence: JsonObject;
95
+ }
96
+ export interface Evaluation {
97
+ library: string;
98
+ profile: ProfileReference;
99
+ records: RecordView[];
100
+ dataset: DatasetFinding[];
101
+ /** Übersprungene Regeln: Code → Grund (z. B. „Spalten fehlen: …“). */
102
+ skipped: Record<string, string>;
103
+ summary: JsonObject[];
104
+ rules?: RuleView[];
105
+ columns?: string[];
106
+ missing_columns?: Record<string, string[]>;
107
+ }
@@ -0,0 +1,16 @@
1
+ import { Store } from '../store';
2
+ import { RunnerController, RunnerData } from './controller';
3
+ import { RunnerPort } from './types';
4
+ type Run = <T>(kind: string, task: (port: RunnerPort) => Promise<T>) => Promise<T | null>;
5
+ export interface RunnerKontext {
6
+ store: Store<RunnerData>;
7
+ run: Run;
8
+ applied: (version: number) => void;
9
+ }
10
+ type ProfilAktionen = Pick<RunnerController, 'setze' | 'eingabe' | 'verwerfen' | 'pruefen' | 'anwenden' | 'gespeichertUebernehmen' | 'entwurfTrotzdemAnwenden' | 'verschiebe' | 'prioritaet'>;
11
+ type WerkzeugAktionen = Pick<RunnerController, 'werkzeug' | 'werkzeugZahl' | 'werkzeugeSpeichern'>;
12
+ type KlassenAktionen = Pick<RunnerController, 'neueKlasseEingabe' | 'klasseHinzufuegen' | 'klassenNameEingabe' | 'klasseUmbenennen'>;
13
+ export declare function profilAktionen(kontext: RunnerKontext): ProfilAktionen;
14
+ export declare function werkzeugAktionen({ store, run }: RunnerKontext): WerkzeugAktionen;
15
+ export declare function klassenAktionen({ store }: RunnerKontext): KlassenAktionen;
16
+ export {};
@@ -0,0 +1,72 @@
1
+ import { RequestState, Store } from '../store';
2
+ import { MessageParams } from '../i18n';
3
+ import { RunnerMessageKey } from './messages';
4
+ import { RunnerFeldArt } from './eingabe';
5
+ import { RunnerPfad, RunnerPrioritaet, RunnerUnterschied } from './profil';
6
+ import { RunnerAnsicht, RunnerPort, RunnerProfil, RunnerProfilStand, RunnerPruefung, RunnerStatus, RunnerWerkzeugEinstellung, RunnerWerkzeuge, RunnerWerkzeugProfile } from './types';
7
+ export interface RunnerCallbacks {
8
+ applied?: (version: number) => void;
9
+ failed?: (message: string) => void;
10
+ }
11
+ export interface RunnerKonfliktStand {
12
+ gespeichert: RunnerProfilStand;
13
+ meldung: string;
14
+ unterschiede: readonly RunnerUnterschied[];
15
+ }
16
+ /** Rückmeldung nach einer Aktion (übersetzt in der Ansicht). */
17
+ export interface RunnerMeldung {
18
+ key: RunnerMessageKey;
19
+ params?: MessageParams;
20
+ ton: 'success' | 'warning';
21
+ }
22
+ /** Stand; `error` ist die Meldung der letzten abgelehnten Anfrage. */
23
+ export interface RunnerData extends RequestState<string> {
24
+ ansicht: RunnerAnsicht;
25
+ status: RunnerStatus | null;
26
+ stand: RunnerProfilStand | null;
27
+ entwurf: RunnerProfil | null;
28
+ pruefung: RunnerPruefung | null;
29
+ konflikt: RunnerKonfliktStand | null;
30
+ werkzeuge: RunnerWerkzeuge | null;
31
+ werkzeugEntwurf: RunnerWerkzeugProfile | null;
32
+ meldung: RunnerMeldung | null;
33
+ /** Rohtext der Eingabefelder je Feld-ID, solange getippt wird (Zahlen, Listen). */
34
+ eingaben: Readonly<Record<string, string>>;
35
+ /** Entwürfe der Klassennamen beim Umbenennen (bisheriger Name → Eingabe). */
36
+ klassenNamen: Readonly<Record<string, string>>;
37
+ /** Eingabe „Neue Klasse“. */
38
+ neueKlasse: string;
39
+ }
40
+ export interface RunnerSource {
41
+ /** Fachlogik; hat Vorrang vor `api`. */
42
+ port: () => RunnerPort | null | undefined;
43
+ /** Basis-URL der JSON-API (z. B. `/api`), wenn kein Port übergeben wird. */
44
+ api?: () => string | null | undefined;
45
+ callbacks?: () => RunnerCallbacks;
46
+ }
47
+ export interface RunnerController {
48
+ store: Store<RunnerData>;
49
+ load: () => Promise<void>;
50
+ zeige: (ansicht: RunnerAnsicht) => void;
51
+ setze: (pfad: RunnerPfad, wert: unknown) => void;
52
+ /** Eingabe eines Formularfelds: Rohtext merken, umgesetzten Wert in den Entwurf. */
53
+ eingabe: (pfad: RunnerPfad, art: RunnerFeldArt, roh: string | boolean) => void;
54
+ verwerfen: () => void;
55
+ pruefen: () => Promise<void>;
56
+ anwenden: () => Promise<void>;
57
+ gespeichertUebernehmen: () => void;
58
+ entwurfTrotzdemAnwenden: () => Promise<void>;
59
+ verschiebe: (index: number, richtung: -1 | 1) => void;
60
+ prioritaet: (index: number, aenderung: Partial<Pick<RunnerPrioritaet, 'verdraengbar' | 'min'>>) => void;
61
+ werkzeug: (profil: string, werkzeug: string, aenderung: Partial<RunnerWerkzeugEinstellung>) => void;
62
+ /** Zahleneingabe (Zeitlimit, Priorität) eines Werkzeugs; ungültiger Rohtext bleibt nur sichtbar. */
63
+ werkzeugZahl: (profil: string, werkzeug: string, feld: 'zeitlimit_s' | 'prioritaet', roh: string) => void;
64
+ werkzeugeSpeichern: () => Promise<void>;
65
+ neueKlasseEingabe: (roh: string) => void;
66
+ klasseHinzufuegen: () => void;
67
+ klassenNameEingabe: (alt: string, roh: string) => void;
68
+ klasseUmbenennen: (alt: string) => void;
69
+ }
70
+ export declare const INITIAL_RUNNER: RunnerData;
71
+ export declare const RUNNER_ANSICHTEN: readonly RunnerAnsicht[];
72
+ export declare function createRunnerController(source: RunnerSource): RunnerController;
@@ -0,0 +1,5 @@
1
+ export type RunnerFeldArt = 'zahl' | 'schalter' | 'auswahl' | 'text' | 'liste';
2
+ /** Eingabe eines Feldes in den Profilwert umsetzen (Zahl, Liste, Schalter, Text). */
3
+ export declare function runnerEingabe(feldArt: RunnerFeldArt, roh: string | boolean): unknown;
4
+ /** Schlüssel des Rohtexts einer Werkzeug-Zahleneingabe. */
5
+ export declare function runnerWerkzeugFeldId(profil: string, werkzeug: string, feld: string): string;
@@ -0,0 +1,9 @@
1
+ export { runnerMessages, type RunnerMessageKey } from './messages';
2
+ export type * from './types';
3
+ export { createRunnerMemoryPort, createRunnerRestPort, RUNNER_SCHREIB_KOPF, RUNNER_WERKZEUG_SCHEMA } from './port';
4
+ export * from './profil';
5
+ export * from './controller';
6
+ export type { RunnerKontext } from './aktionen';
7
+ export * from './eingabe';
8
+ export * from './view';
9
+ export * from './view-listen';
@@ -0,0 +1,3 @@
1
+ /** Texte der Runner-Konsole (Vue `RunnerConsole`, React `FlowauditRunnerConsole`); sichtbare Texte nur hier. */
2
+ export declare const runnerMessages: import('..').Catalogs<"loading" | "meta" | "title" | "image" | "unbekannt" | "working" | "failed" | "hoch" | "fehlt" | "tabs" | "tabStatus" | "tabEinstellungen" | "tabWerkzeuge" | "tabPrioritaeten" | "syncAus" | "syncZentral" | "nurLesen" | "refresh" | "ueberblick" | "ziel" | "sollQuelle" | "profilVersion" | "aenderung" | "aenderungWert" | "aenderungKeine" | "netzsperre" | "kontingent" | "runnerVersion" | "runnerVersionFrist" | "vorhanden" | "aktiv" | "inaktiv" | "klassen" | "keineKlassen" | "spalteKlasse" | "spalteSoll" | "spalteMax" | "spalteInstanzen" | "spalteRegistriert" | "spalteBelegt" | "spalteWarteschlange" | "spalteGruende" | "hardware" | "hinweisUnbekannt" | "hinweisImage" | "hinweisNetzsperre" | "abschnittAllgemein" | "abschnittRegelung" | "abschnittThermik" | "abschnittNetz" | "abschnittKlasse" | "abschnittKarte" | "fSollQuelle" | "fSollDatei" | "fBackend" | "fImage" | "fReserveCpus" | "fReserveSpeicher" | "fVorrang" | "fLeerlauf" | "fAnteil" | "fSwap" | "fRam" | "fLast" | "fTemperatur" | "fVon" | "fBis" | "fHaltezeit" | "fThermikAktiv" | "fThermikUrl" | "fNetzAktiv" | "fSperre" | "kArt" | "oCpu" | "oGpu" | "klasseName" | "umbenennen" | "neueKlasse" | "hinzufuegen" | "klasseNameUngueltig" | "klasseNameVergeben" | "anmeldung" | "kAktiv" | "kMin" | "kMax" | "kLeise" | "kCpus" | "kSpeicher" | "kVram" | "kLabels" | "gErlaubt" | "gKlasse" | "oStatisch" | "oLokal" | "oDatei" | "pruefen" | "anwenden" | "verwerfen" | "ungespeichert" | "gueltig" | "ungueltig" | "probleme" | "vorschau" | "keineAenderung" | "schritte" | "rootBefehl" | "angewendet" | "nichtAngewendet" | "konflikt" | "konfliktFeld" | "konfliktEntwurf" | "konfliktGespeichert" | "gespeichertUebernehmen" | "entwurfAnwenden" | "werkzeugProfil" | "spalteWerkzeug" | "spalteBereich" | "spalteImage" | "spalteAktiv" | "spalteZeitlimit" | "spaltePrioritaet" | "nichtInstalliert" | "speichern" | "gespeichert" | "keineWerkzeuge" | "prioritaetenHinweis" | "keinePrioritaeten" | "rang" | "runter" | "verdraengbar" | "mindestens" | "weichtZuerst" | "keinerVerdraengbar">;
3
+ export type RunnerMessageKey = keyof typeof runnerMessages.de;
@@ -0,0 +1,20 @@
1
+ import { RestOptions } from '@auditcore/common';
2
+ import { RunnerPort, RunnerProfil, RunnerProfilStand, RunnerPruefung, RunnerStatus, RunnerWerkzeuge } from './types';
3
+ /** Kopfzeile, ohne die `auditcore-runner ui` schreibende Anfragen ablehnt. */
4
+ export declare const RUNNER_SCHREIB_KOPF: {
5
+ readonly 'X-Auditcore-Runner': "1";
6
+ };
7
+ export declare const RUNNER_WERKZEUG_SCHEMA = "auditcore-runner/werkzeuge/1";
8
+ /** Port im Arbeitsspeicher (Demo, Tests); Konflikt, wenn `erwarteteVersion` nicht zur gespeicherten passt. */
9
+ export declare function createRunnerMemoryPort(start: {
10
+ status: RunnerStatus;
11
+ profil: RunnerProfilStand;
12
+ werkzeuge?: RunnerWerkzeuge;
13
+ pruefen?: (profil: RunnerProfil) => RunnerPruefung;
14
+ }): RunnerPort;
15
+ /**
16
+ * Port auf die JSON-API von `auditcore-runner ui` (Basis z. B. `/api`).
17
+ * Schreibende Aufrufe senden `X-Auditcore-Runner: 1`; HTTP 409 beim Anwenden
18
+ * wird zum Ergebnis mit `konflikt: true`.
19
+ */
20
+ export declare function createRunnerRestPort(rest: RestOptions): RunnerPort;
@@ -0,0 +1,39 @@
1
+ import { RunnerProfil } from './types';
2
+ export type RunnerPfad = readonly (string | number)[];
3
+ export interface RunnerPrioritaet {
4
+ klasse: string;
5
+ rang: number;
6
+ verdraengbar: boolean;
7
+ min: number;
8
+ }
9
+ export interface RunnerUnterschied {
10
+ pfad: string;
11
+ entwurf: string;
12
+ gespeichert: string;
13
+ }
14
+ export declare function runnerWert(profil: RunnerProfil | null | undefined, pfad: RunnerPfad): unknown;
15
+ /** Neuer Entwurf mit geändertem Wert; der alte bleibt unverändert. */
16
+ export declare function runnerSetze(profil: RunnerProfil, pfad: RunnerPfad, wert: unknown): RunnerProfil;
17
+ /** Feldweise Unterschiede (Pfad in Punktschreibweise), sortiert; ohne `version` und `aenderung`. */
18
+ export declare function runnerUnterschiede(entwurf: RunnerProfil, gespeichert: RunnerProfil): RunnerUnterschied[];
19
+ export declare function runnerGeaendert(entwurf: RunnerProfil | null, gespeichert: RunnerProfil | null): boolean;
20
+ export declare function runnerVersion(profil: RunnerProfil | null | undefined): number;
21
+ /** Prioritäten des Entwurfs nach Rang (1 = höchster), fehlerhafte Einträge übersprungen. */
22
+ export declare function runnerPrioritaeten(profil: RunnerProfil | null | undefined): RunnerPrioritaet[];
23
+ /** Eintrag an Position `index` um eine Stelle verschieben; Ränge werden fortlaufend neu vergeben. */
24
+ export declare function runnerVerschiebe(profil: RunnerProfil, index: number, richtung: -1 | 1): RunnerProfil;
25
+ /** Eigenschaft eines Prioritätseintrags (Position in der sortierten Liste) ändern. */
26
+ export declare function runnerPrioritaetSetze(profil: RunnerProfil, index: number, aenderung: Partial<Pick<RunnerPrioritaet, 'verdraengbar' | 'min'>>): RunnerProfil;
27
+ /** Wer bei knapper Kapazität zuerst weicht: der verdrängbare Eintrag mit dem niedrigsten Rang (größte Zahl). */
28
+ export declare function runnerWeichtZuerst(liste: readonly RunnerPrioritaet[]): RunnerPrioritaet | null;
29
+ /** Klassenname wie im Backend (`auditcore_runner.profile.CLASS_NAME`). */
30
+ export declare const RUNNER_KLASSEN_NAME: RegExp;
31
+ export type RunnerKlassenArt = 'cpu' | 'gpu';
32
+ export declare function runnerKlassen(profil: RunnerProfil | null | undefined): string[];
33
+ export declare function runnerKlassenArt(profil: RunnerProfil | null | undefined, name: string): RunnerKlassenArt;
34
+ /** Fehlerart eines Klassennamens; `null` = gültig. `alt` ist der bisherige Name beim Umbenennen. */
35
+ export declare function runnerKlassenNameFehler(profil: RunnerProfil | null | undefined, name: string, alt?: string): 'ungueltig' | 'vergeben' | null;
36
+ /** Neue Klasse der Art `cpu` mit neutralen Werten (höchstens eine Instanz). */
37
+ export declare function runnerKlasseHinzu(profil: RunnerProfil, name: string): RunnerProfil;
38
+ /** Klasse umbenennen; Verweise in Karten, Prioritäten und das gleichnamige Label ziehen mit. */
39
+ export declare function runnerKlasseUmbenennen(profil: RunnerProfil, alt: string, neu: string): RunnerProfil;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Vertrag der lokalen JSON-API von `auditcore_runner` (`auditcore-runner ui`,
3
+ * Doku `packages/auditcore_runner/docs/api.md`). Feldnamen wie im Backend.
4
+ */
5
+ export type RunnerAnsicht = 'status' | 'einstellungen' | 'werkzeuge' | 'prioritaeten';
6
+ /** Stand einer Runner-Klasse im Status. `null`: unbekannt (z. B. GitHub nicht erreichbar). */
7
+ export interface RunnerKlasseStatus {
8
+ aktiv: boolean;
9
+ max: number;
10
+ soll: number | null;
11
+ gruende: readonly string[];
12
+ instanzen_aktiv: number;
13
+ registriert: number | null;
14
+ belegt: number | null;
15
+ /** Wartende Jobs der Klasse (sobald das Backend sie liefert). */
16
+ warteschlange?: number | null;
17
+ }
18
+ export interface RunnerAenderung {
19
+ zeit: string;
20
+ quelle: string;
21
+ wer: string;
22
+ }
23
+ /** `GET /api/status` (Schema `auditcore-runner/status/1`). */
24
+ export interface RunnerStatus {
25
+ rechner: string;
26
+ profil_version: number;
27
+ profil_hash: string;
28
+ aenderung: RunnerAenderung;
29
+ /** `aus` oder Name der zentralen Verwaltung. */
30
+ sync: string;
31
+ ziel: string;
32
+ soll_quelle: string;
33
+ /** Anmeldung bei GitHub: `gh`, `pat` oder `app` (optional). */
34
+ auth_art?: string;
35
+ hardware: Readonly<Record<string, unknown>>;
36
+ klassen: Readonly<Record<string, RunnerKlasseStatus>>;
37
+ image_vorhanden: boolean;
38
+ netz_vorhanden: boolean | null;
39
+ netzsperre_aktiv: boolean | null;
40
+ unbekannte_runner: readonly string[] | null;
41
+ github_rest_kontingent: number | null;
42
+ /** Runner-Version im Image und Frist, bis zu der sie aktualisiert sein muss (optional). */
43
+ runner_version?: string | null;
44
+ runner_frist?: string | null;
45
+ nur_lesen?: boolean;
46
+ }
47
+ /** Profil als JSON (Schema `auditcore-runner/profil/…`); unbekannte Felder bleiben erhalten. */
48
+ export type RunnerProfil = Readonly<Record<string, unknown>>;
49
+ export interface RunnerProblem {
50
+ feld: string;
51
+ meldung: string;
52
+ }
53
+ /** `GET /api/profil`. */
54
+ export interface RunnerProfilStand {
55
+ profil: RunnerProfil;
56
+ profil_hash: string;
57
+ hardware: Readonly<Record<string, unknown>>;
58
+ probleme: readonly RunnerProblem[];
59
+ netzsperre_befehl: string | null;
60
+ nur_lesen?: boolean;
61
+ }
62
+ export interface RunnerDateiAenderung {
63
+ datei: string;
64
+ diff: string;
65
+ }
66
+ /** Ergebnis von `POST /api/profil/pruefen` bzw. `…/anwenden`. */
67
+ export interface RunnerPruefung {
68
+ gueltig: boolean;
69
+ probleme: readonly RunnerProblem[];
70
+ aktive_version: number | null;
71
+ aenderungen: readonly RunnerDateiAenderung[];
72
+ schritte: readonly string[];
73
+ netzsperre_befehl: string | null;
74
+ angewendet?: boolean;
75
+ konflikt?: boolean;
76
+ meldung?: string;
77
+ version?: number;
78
+ }
79
+ export interface RunnerWerkzeug {
80
+ name: string;
81
+ bereich: string;
82
+ installation: string;
83
+ autofix: boolean;
84
+ kosten_minuten: number;
85
+ /** Installierte Version im Runner-Image, leer: nicht installiert. */
86
+ im_image: string;
87
+ }
88
+ export interface RunnerWerkzeugEinstellung {
89
+ aktiv: boolean;
90
+ zeitlimit_s: number;
91
+ prioritaet: number;
92
+ }
93
+ /** Prüfprofil → Werkzeug → Einstellung. */
94
+ export type RunnerWerkzeugProfile = Readonly<Record<string, Readonly<Record<string, RunnerWerkzeugEinstellung>>>>;
95
+ /** `GET /api/werkzeuge`. */
96
+ export interface RunnerWerkzeuge {
97
+ werkzeuge: readonly RunnerWerkzeug[];
98
+ profile: RunnerWerkzeugProfile;
99
+ }
100
+ /** Fachlogik hinter der Oberfläche; Vue und React rufen nur diesen Port auf. */
101
+ export interface RunnerPort {
102
+ status: () => Promise<RunnerStatus>;
103
+ profil: () => Promise<RunnerProfilStand>;
104
+ pruefen: (profil: RunnerProfil) => Promise<RunnerPruefung>;
105
+ /** Konflikt (HTTP 409) liefert `konflikt: true` statt eines Fehlers. */
106
+ anwenden: (profil: RunnerProfil, erwarteteVersion: number | null) => Promise<RunnerPruefung>;
107
+ werkzeuge: () => Promise<RunnerWerkzeuge>;
108
+ werkzeugeSpeichern: (profile: RunnerWerkzeugProfile) => Promise<void>;
109
+ }
@@ -0,0 +1,32 @@
1
+ import { Translate } from '../i18n';
2
+ import { RunnerData } from './controller';
3
+ import { RunnerMessageKey } from './messages';
4
+ import { RunnerPrioritaet } from './profil';
5
+ type T = Translate<RunnerMessageKey>;
6
+ export interface RunnerWerkzeugZeile {
7
+ id: string;
8
+ werkzeug: string;
9
+ bereich: string;
10
+ imImage: string;
11
+ aktiv: boolean;
12
+ zeitlimit: string;
13
+ prioritaet: string;
14
+ }
15
+ export interface RunnerWerkzeugGruppe {
16
+ profil: string;
17
+ titel: string;
18
+ zeilen: RunnerWerkzeugZeile[];
19
+ }
20
+ export declare function runnerWerkzeugGruppen(state: RunnerData, t: T): RunnerWerkzeugGruppe[];
21
+ export declare function runnerWerkzeugeGeaendert(state: RunnerData): boolean;
22
+ export interface RunnerPrioritaetZeile extends RunnerPrioritaet {
23
+ index: number;
24
+ rangText: string;
25
+ hoch: string;
26
+ runter: string;
27
+ ersteZeile: boolean;
28
+ letzteZeile: boolean;
29
+ }
30
+ export declare function runnerPrioritaetZeilen(state: RunnerData, t: T): RunnerPrioritaetZeile[];
31
+ export declare function runnerWeichtZuerstText(state: RunnerData, t: T): string;
32
+ export {};
@@ -0,0 +1,95 @@
1
+ import { Translate } from '../i18n';
2
+ import { RunnerData } from './controller';
3
+ import { RunnerMessageKey } from './messages';
4
+ import { RunnerFeldArt } from './eingabe';
5
+ import { RunnerPfad } from './profil';
6
+ import { RunnerAnsicht, RunnerDateiAenderung, RunnerProblem, RunnerStatus } from './types';
7
+ type T = Translate<RunnerMessageKey>;
8
+ export interface RunnerTab {
9
+ id: RunnerAnsicht;
10
+ label: string;
11
+ selected: boolean;
12
+ }
13
+ export declare function runnerTabs(state: RunnerData, t: T): RunnerTab[];
14
+ /** Nächster Reiter für Pfeiltasten (zyklisch). */
15
+ export declare function runnerNachbarTab(aktuell: RunnerAnsicht, richtung: -1 | 1): RunnerAnsicht;
16
+ export declare function runnerNurLesen(state: RunnerData): boolean;
17
+ export declare function runnerIstGeaendert(state: RunnerData): boolean;
18
+ export declare function runnerMeta(state: RunnerData, t: T): string;
19
+ export interface RunnerHinweis {
20
+ ton: 'danger' | 'warning' | 'info';
21
+ text: string;
22
+ }
23
+ export declare function runnerHinweise(state: RunnerData, t: T): RunnerHinweis[];
24
+ export interface RunnerEintrag {
25
+ label: string;
26
+ wert: string;
27
+ }
28
+ export declare function runnerUeberblick(status: RunnerStatus | null, t: T): RunnerEintrag[];
29
+ export interface RunnerKlassenZeile {
30
+ name: string;
31
+ aktiv: boolean;
32
+ soll: string;
33
+ max: string;
34
+ instanzen: string;
35
+ registriert: string;
36
+ belegt: string;
37
+ warteschlange: string;
38
+ gruende: string;
39
+ }
40
+ export declare function runnerKlassenZeilen(status: RunnerStatus | null): RunnerKlassenZeile[];
41
+ export declare function runnerHatWarteschlange(status: RunnerStatus | null): boolean;
42
+ /** Hardware-Angaben des Rechners als Liste (Schlüssel wie vom Backend geliefert). */
43
+ export declare function runnerHardware(hardware: Readonly<Record<string, unknown>> | null | undefined): RunnerEintrag[];
44
+ export interface RunnerOption {
45
+ wert: string;
46
+ label: string;
47
+ }
48
+ export interface RunnerFeld {
49
+ /** Pfad in Punktschreibweise; zugleich Zuordnung der Fehlermeldungen des Backends. */
50
+ id: string;
51
+ pfad: RunnerPfad;
52
+ label: string;
53
+ art: RunnerFeldArt;
54
+ /** Anzeigewert für Eingabe- und Auswahlfelder. */
55
+ wert: string;
56
+ /** Zustand eines Schalters. */
57
+ an: boolean;
58
+ optionen: readonly RunnerOption[];
59
+ schritt: string;
60
+ fehler: string;
61
+ }
62
+ /** Umbenennen einer Klasse (nur Abschnitte vom Typ Klasse). */
63
+ export interface RunnerKlassenName {
64
+ alt: string;
65
+ wert: string;
66
+ fehler: string;
67
+ geaendert: boolean;
68
+ }
69
+ export interface RunnerAbschnitt {
70
+ id: string;
71
+ titel: string;
72
+ felder: RunnerFeld[];
73
+ klasse?: RunnerKlassenName;
74
+ }
75
+ /** Feldpfad des Backends (`gpus[0].erlaubt`) in die Feld-ID der Ansicht (`gpus.0.erlaubt`). */
76
+ export declare function runnerFeldId(feld: string): string;
77
+ /** Meldungen des Backends: aus der letzten Prüfung, sonst aus dem geladenen Stand. */
78
+ export declare function runnerProbleme(state: RunnerData): readonly RunnerProblem[];
79
+ /** Formularabschnitte aus dem Entwurf; nur Felder, die das Profil tatsächlich enthält. */
80
+ export declare function runnerAbschnitte(state: RunnerData, t: T): RunnerAbschnitt[];
81
+ export interface RunnerNeueKlasse {
82
+ wert: string;
83
+ fehler: string;
84
+ moeglich: boolean;
85
+ }
86
+ /** Eingabe „Neue Klasse“ mit Prüfung wie im Backend (Fehler erst nach einer Eingabe). */
87
+ export declare function runnerNeueKlasse(state: RunnerData, t: T): RunnerNeueKlasse;
88
+ export interface RunnerVorschau {
89
+ gueltig: boolean;
90
+ aenderungen: readonly RunnerDateiAenderung[];
91
+ schritte: readonly string[];
92
+ rootBefehl: string;
93
+ }
94
+ export declare function runnerVorschau(state: RunnerData): RunnerVorschau | null;
95
+ export {};
@@ -0,0 +1,33 @@
1
+ import { RequestState, Store } from '../store';
2
+ import { SampleSizeForm, SampleSizeIssues, StratumDraft } from './model';
3
+ import { SampleSizeCatalogue, SampleSizePlan, SampleSizeRequest, SamplesizePort } from './types';
4
+ export type SamplesizeBusy = 'load' | 'plan';
5
+ export interface SamplesizeCallbacks {
6
+ planned?: (plan: SampleSizePlan) => void;
7
+ failed?: (message: string) => void;
8
+ }
9
+ /** Stand; `error` ist die Meldung der letzten abgelehnten Anfrage. */
10
+ export interface SamplesizeData extends RequestState<string> {
11
+ catalogue: SampleSizeCatalogue | null;
12
+ form: SampleSizeForm;
13
+ issues: SampleSizeIssues;
14
+ plan: SampleSizePlan | null;
15
+ }
16
+ export interface SamplesizeSource {
17
+ port: () => SamplesizePort | null | undefined;
18
+ request?: () => SampleSizeRequest | null | undefined;
19
+ callbacks?: () => SamplesizeCallbacks;
20
+ }
21
+ export interface SamplesizeController {
22
+ store: Store<SamplesizeData>;
23
+ load: () => Promise<void>;
24
+ selectMethod: (id: string) => void;
25
+ setValue: (field: string, text: string) => void;
26
+ setFiniteCorrection: (on: boolean) => void;
27
+ setStratum: (index: number, change: Partial<StratumDraft>) => void;
28
+ addStratum: () => void;
29
+ removeStratum: (index: number) => void;
30
+ calculate: () => Promise<void>;
31
+ }
32
+ export declare const INITIAL_SAMPLESIZE: SamplesizeData;
33
+ export declare function createSamplesizeController(source: SamplesizeSource): SamplesizeController;
@@ -0,0 +1,7 @@
1
+ export { samplesizeMessages, type SamplesizeMessageKey } from './messages';
2
+ export type * from './types';
3
+ export { createSamplesizeMemoryPort, createSamplesizeRestPort } from './port';
4
+ export { buildRequest, EMPTY_FORM, EMPTY_STRATUM, formFor, formFromRequest, hasFiniteCorrection, hasStrata, methodById, scalarFields } from './model';
5
+ export type { SampleSizeForm, SampleSizeIssues, StratumColumn, StratumDraft } from './model';
6
+ export * from './controller';
7
+ export * from './view';
@@ -0,0 +1,3 @@
1
+ /** Texte von SampleSizePlanner (Vue) und FlowauditSampleSizePlanner (React); sichtbare Texte nur hier. */
2
+ export declare const samplesizeMessages: import('..').Catalogs<"loading" | "source" | "title" | "invalid" | "method" | "yes" | "no" | "required" | "result" | "failed" | "choose" | "optional" | "calculate" | "interval" | "derivation" | "stepFormula" | "stepValue" | "sampleSize" | "allocation" | "stratumPopulation" | "confidence_level" | "population_size" | "strata" | "stratumName" | "addStratum" | "warnings" | "book_value" | "factor_profile" | "materiality_rate" | "calculating" | "anticipated_error_rate" | "error_sd" | "error_rate_sd" | "finite_population_correction" | "rule" | "assurance_level" | "stratumBookValue" | "stratumSd" | "stratumExhaustive" | "stratumRow" | "removeStratum" | "rawSize" | "allocationSize" | "allocationShare" | "allocationCutOff" | "stepLabel" | "stepSource">;
3
+ export type SamplesizeMessageKey = keyof typeof samplesizeMessages.de;
@@ -0,0 +1,40 @@
1
+ import { SampleSizeCatalogue, SampleSizeMethod, SampleSizeRequest } from './types';
2
+ export interface StratumDraft {
3
+ name: string;
4
+ populationSize: string;
5
+ bookValue: string;
6
+ sd: string;
7
+ exhaustive: boolean;
8
+ }
9
+ export interface SampleSizeForm {
10
+ methodId: string;
11
+ values: Readonly<Record<string, string>>;
12
+ finiteCorrection: boolean;
13
+ strata: readonly StratumDraft[];
14
+ }
15
+ /** Feldschlüssel → Fehlerart (`required` oder `invalid`). */
16
+ export type SampleSizeIssues = Readonly<Record<string, 'required' | 'invalid'>>;
17
+ export type StratumColumn = 'name' | 'populationSize' | 'bookValue' | 'sd' | 'exhaustive';
18
+ export declare const EMPTY_FORM: SampleSizeForm;
19
+ export declare const EMPTY_STRATUM: StratumDraft;
20
+ /** Felder mit Auswahlliste; alle übrigen skalaren Felder sind Zahlen. */
21
+ export declare const CHOICE_FIELDS: readonly string[];
22
+ /** In Prozent erfasste Anteile. */
23
+ export declare const PERCENT_FIELDS: readonly string[];
24
+ export declare function methodById(catalogue: SampleSizeCatalogue | null, id: string): SampleSizeMethod | null;
25
+ /** Einzelne Eingabefelder der Methode in der Reihenfolge des Katalogs. */
26
+ export declare function scalarFields(method: SampleSizeMethod | null): string[];
27
+ export declare function hasStrata(method: SampleSizeMethod | null): boolean;
28
+ export declare function hasFiniteCorrection(method: SampleSizeMethod | null): boolean;
29
+ /** Spalten der Schichttabelle: MUS nach Buchwert, sonst nach Anzahl mit Vollerhebung. */
30
+ export declare function strataColumns(method: SampleSizeMethod | null): StratumColumn[];
31
+ /** Anfangswerte bei Methodenwechsel: sichtbar vorbelegt ist nur die Wesentlichkeit von 2 %. */
32
+ export declare function formFor(method: SampleSizeMethod | null, catalogue: SampleSizeCatalogue | null): SampleSizeForm;
33
+ /** Anfrage aus dem Formular oder die Felder mit fehlenden bzw. ungültigen Angaben. */
34
+ export declare function buildRequest(form: SampleSizeForm, method: SampleSizeMethod): {
35
+ request: SampleSizeRequest;
36
+ } | {
37
+ issues: SampleSizeIssues;
38
+ };
39
+ /** Formular aus einer Anfrage (Vorbelegung über die Eigenschaft `request`). */
40
+ export declare function formFromRequest(request: SampleSizeRequest, catalogue: SampleSizeCatalogue | null): SampleSizeForm;
@@ -0,0 +1,9 @@
1
+ import { RestOptions } from '@auditcore/common';
2
+ import { SampleSizeCatalogue, SampleSizePlan, SamplesizePort } from './types';
3
+ /** Port auf den REST-Vertrag `auditcore_sampling.guidance/1` (Starlette oder FastAPI). */
4
+ export declare function createSamplesizeRestPort(options: RestOptions): SamplesizePort;
5
+ /**
6
+ * Port im Arbeitsspeicher (Demo, Tests): feste Antworten je Methode; ohne
7
+ * Antwort wird die Anfrage wie vom Backend abgelehnt.
8
+ */
9
+ export declare function createSamplesizeMemoryPort(catalogue: SampleSizeCatalogue, plans?: Readonly<Record<string, SampleSizePlan>>): SamplesizePort;