@flowselections/layout-maker 1.63.5 → 1.65.2

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 (51) hide show
  1. package/README.md +10 -4
  2. package/dist-lib/components/BedrijfsgegevensKaart.d.ts +3 -0
  3. package/dist-lib/components/BedrijfsgegevensKaart.d.ts.map +1 -0
  4. package/dist-lib/components/BedrijfsgegevensKaart.js +58 -0
  5. package/dist-lib/components/KlaarOmTePrintenBlok.d.ts +3 -0
  6. package/dist-lib/components/KlaarOmTePrintenBlok.d.ts.map +1 -0
  7. package/dist-lib/components/KlaarOmTePrintenBlok.js +69 -0
  8. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  9. package/dist-lib/components/LayoutsPage.js +23 -3
  10. package/dist-lib/components/PrintenPage.d.ts.map +1 -1
  11. package/dist-lib/components/PrintenPage.js +8 -2
  12. package/dist-lib/components/StandaardLayoutActies.d.ts +19 -0
  13. package/dist-lib/components/StandaardLayoutActies.d.ts.map +1 -0
  14. package/dist-lib/components/StandaardLayoutActies.js +105 -0
  15. package/dist-lib/index.d.ts +7 -0
  16. package/dist-lib/index.d.ts.map +1 -1
  17. package/dist-lib/index.js +9 -2
  18. package/dist-lib/integrations/supabase/types.d.ts +1078 -0
  19. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  20. package/dist-lib/lib/bedrijfsgegevens.d.ts +41 -0
  21. package/dist-lib/lib/bedrijfsgegevens.d.ts.map +1 -0
  22. package/dist-lib/lib/bedrijfsgegevens.functions.d.ts +41 -0
  23. package/dist-lib/lib/bedrijfsgegevens.functions.d.ts.map +1 -0
  24. package/dist-lib/lib/bedrijfsgegevens.functions.js +75 -0
  25. package/dist-lib/lib/bedrijfsgegevens.js +126 -0
  26. package/dist-lib/lib/documentTypes.d.ts +10 -0
  27. package/dist-lib/lib/documentTypes.d.ts.map +1 -1
  28. package/dist-lib/lib/documentTypes.js +8 -0
  29. package/dist-lib/lib/klaarOmTePrinten.d.ts +39 -0
  30. package/dist-lib/lib/klaarOmTePrinten.d.ts.map +1 -0
  31. package/dist-lib/lib/klaarOmTePrinten.js +65 -0
  32. package/dist-lib/lib/layoutStandaarden.d.ts +19 -0
  33. package/dist-lib/lib/layoutStandaarden.d.ts.map +1 -0
  34. package/dist-lib/lib/layoutStandaarden.js +23 -0
  35. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  36. package/dist-lib/lib/printQueue.server.js +33 -2
  37. package/dist-lib/lib/printService.functions.d.ts +1 -1
  38. package/dist-lib/lib/printnodeWebhookBeheer.server.d.ts +1 -1
  39. package/dist-lib/lib/shellPoort.d.ts +2 -2
  40. package/dist-lib/lib/shellPoort.d.ts.map +1 -1
  41. package/dist-lib/lib/shellPoort.js +3 -2
  42. package/dist-lib/lib/standaardLayouts.server.d.ts +7 -1
  43. package/dist-lib/lib/standaardLayouts.server.d.ts.map +1 -1
  44. package/dist-lib/lib/standaardLayouts.server.js +52 -54
  45. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  46. package/dist-lib/lib/useDocumentData.js +9 -5
  47. package/dist-lib/lib/versie.generated.d.ts +2 -0
  48. package/dist-lib/lib/versie.generated.d.ts.map +1 -0
  49. package/dist-lib/lib/versie.generated.js +2 -0
  50. package/package.json +9 -4
  51. package/sql/print-schema.sql +3205 -0
@@ -0,0 +1,41 @@
1
+ export declare const BEDRIJFSGEGEVENS_SLEUTEL = "layout_bedrijfsgegevens";
2
+ export interface Bedrijfsgegevens {
3
+ naam: string;
4
+ adres: string;
5
+ plaats: string;
6
+ telefoon: string;
7
+ email: string;
8
+ kvk: string;
9
+ btw: string;
10
+ gln: string;
11
+ logoId: string | null;
12
+ }
13
+ export declare const LEGE_BEDRIJFSGEGEVENS: Bedrijfsgegevens;
14
+ export declare function leesBedrijfsgegevens(ruw: unknown): Bedrijfsgegevens;
15
+ export declare function heeftBedrijfsgegevens(b: Partial<Record<string, unknown>> | null | undefined): boolean;
16
+ /** payload.bedrijf wint; alleen als dat helemaal leeg is, vult de instelling. */
17
+ export declare function bedrijfMetTerugval<T extends Record<string, unknown>>(uitOpdracht: T | null | undefined, instelling: Bedrijfsgegevens | null): T | Record<string, string>;
18
+ /** Eenmalig overnemen uit invoice_branding_settings (als die rij bestaat). */
19
+ export declare function uitFactuurgegevens(rij: Record<string, unknown> | null | undefined): Partial<Bedrijfsgegevens> | null;
20
+ /**
21
+ * Eigen organisatie uit Floriday-auth (floriday_eigen_organisatie(): naam, adres,
22
+ * postcode, plaats, land, gln, organisatie_id, opgehaald_op). Telt alleen als
23
+ * opgehaald_op gevuld is en er minstens één veld is; er wordt niets verzonnen.
24
+ */
25
+ export declare function uitFloridayOrganisatie(rij: unknown): Partial<Bedrijfsgegevens> | null;
26
+ /** Velden die de bron niet leverde (alleen de velden die die bron kent). */
27
+ export declare function ontbrekendeVelden(bron: "floriday" | "factuurgegevens", g: Partial<Bedrijfsgegevens>): string[];
28
+ export declare const VELD_LABELS: Record<string, string>;
29
+ /** Melding voor de kaart, of null. */
30
+ export declare function voorinvulMelding(ruw: unknown): string | null;
31
+ export type VoorinvulBesluit = "overslaan" | null | (Bedrijfsgegevens & {
32
+ bron: string;
33
+ voorgevuld_op: string;
34
+ ontbrekend: string[];
35
+ });
36
+ /**
37
+ * Eenmalig voorinvullen. "overslaan": er staat al iets of er is al eens voorgevuld.
38
+ * null: geen bron met gegevens. Anders: de waarde om op te slaan (Floriday gaat voor).
39
+ */
40
+ export declare function voorinvulBesluit(bestaand: unknown, floriday: unknown, factuur: unknown, nu?: Date): VoorinvulBesluit;
41
+ //# sourceMappingURL=bedrijfsgegevens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrijfsgegevens.d.ts","sourceRoot":"","sources":["../../src/lib/bedrijfsgegevens.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,EAAE,gBAEnC,CAAC;AAMF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAanE;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGrG;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,UAAU,EAAE,gBAAgB,GAAG,IAAI,GAClC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK5B;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAWpH;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAarF;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,EAAE,CAK9G;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG9C,CAAC;AAEF,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAW5D;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,IAAI,GAAG,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC;AAEvI;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAa,GAAG,gBAAgB,CAe1H"}
@@ -0,0 +1,41 @@
1
+ export declare const haalBedrijfsgegevens: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
2
+ supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
3
+ userId: string;
4
+ claims: import("@supabase/auth-js").JwtPayload;
5
+ }, undefined, undefined, undefined>], undefined, Promise<{
6
+ ok: false;
7
+ fout: any;
8
+ gegevens?: undefined;
9
+ melding?: undefined;
10
+ } | {
11
+ ok: true;
12
+ gegevens: import("./bedrijfsgegevens.js").Bedrijfsgegevens;
13
+ melding: string | null;
14
+ fout?: undefined;
15
+ }>>;
16
+ export declare const bewaarBedrijfsgegevens: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
17
+ supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
18
+ userId: string;
19
+ claims: import("@supabase/auth-js").JwtPayload;
20
+ }, undefined, undefined, undefined>], (input: unknown) => import("./bedrijfsgegevens.js").Bedrijfsgegevens, Promise<{
21
+ ok: false;
22
+ fout: any;
23
+ } | {
24
+ ok: true;
25
+ fout?: undefined;
26
+ }>>;
27
+ /** Alleen lezen: geeft voorstelwaarden terug, slaat niets op. */
28
+ export declare const factuurgegevensVoorstel: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
29
+ supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
30
+ userId: string;
31
+ claims: import("@supabase/auth-js").JwtPayload;
32
+ }, undefined, undefined, undefined>], undefined, Promise<{
33
+ ok: true;
34
+ gegevens: Partial<import("./bedrijfsgegevens.js").Bedrijfsgegevens>;
35
+ fout?: undefined;
36
+ } | {
37
+ ok: false;
38
+ fout: string;
39
+ gegevens?: undefined;
40
+ }>>;
41
+ //# sourceMappingURL=bedrijfsgegevens.functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrijfsgegevens.functions.d.ts","sourceRoot":"","sources":["../../src/lib/bedrijfsgegevens.functions.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;GAY7B,CAAC;AAEL,eAAO,MAAM,sBAAsB;;;;8CAET,OAAO;;;;;;GAwB7B,CAAC;AAEL,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;GAehC,CAAC"}
@@ -0,0 +1,75 @@
1
+ // Server functions voor de bedrijfsgegevens van deze module.
2
+ import { createServerFn } from "@tanstack/react-start";
3
+ import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
4
+ import { BEDRIJFSGEGEVENS_SLEUTEL, leesBedrijfsgegevens, uitFactuurgegevens, voorinvulMelding } from "./bedrijfsgegevens.js";
5
+ async function isBeheerder(ctx) {
6
+ const r = await Promise.all(["admin", "superadmin", "developer"].map((rol) => ctx.supabase.rpc("has_role", { _user_id: ctx.userId, _role: rol }).then((x) => x.data === true)));
7
+ return r.some(Boolean);
8
+ }
9
+ export const haalBedrijfsgegevens = createServerFn({ method: "POST" })
10
+ .middleware([requireSupabaseAuth])
11
+ .handler(async () => {
12
+ try {
13
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
14
+ const { data, error } = await supabaseAdmin
15
+ .from("app_settings").select("value").eq("key", BEDRIJFSGEGEVENS_SLEUTEL).maybeSingle();
16
+ if (error)
17
+ return { ok: false, fout: error.message };
18
+ return { ok: true, gegevens: leesBedrijfsgegevens(data?.value ?? null), melding: voorinvulMelding(data?.value ?? null) };
19
+ }
20
+ catch (e) {
21
+ return { ok: false, fout: e instanceof Error ? e.message : "Ophalen mislukt" };
22
+ }
23
+ });
24
+ export const bewaarBedrijfsgegevens = createServerFn({ method: "POST" })
25
+ .middleware([requireSupabaseAuth])
26
+ .inputValidator((input) => leesBedrijfsgegevens(input))
27
+ .handler(async ({ data, context }) => {
28
+ const ctx = context;
29
+ if (!(await isBeheerder(ctx)))
30
+ return { ok: false, fout: "Alleen een beheerder kan de bedrijfsgegevens wijzigen." };
31
+ try {
32
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
33
+ // Behoud het kenmerk "al eens voorgevuld", zodat voorinvullen nooit terugkomt.
34
+ const { data: oud } = await supabaseAdmin
35
+ .from("app_settings").select("value").eq("key", BEDRIJFSGEGEVENS_SLEUTEL).maybeSingle();
36
+ let meta = {};
37
+ try {
38
+ const o = typeof oud?.value === "string" ? JSON.parse(oud.value) : (oud?.value ?? {});
39
+ meta = { voorgevuld_op: o?.voorgevuld_op ?? new Date().toISOString(), bron: o?.bron ?? "handmatig" };
40
+ }
41
+ catch {
42
+ meta = { voorgevuld_op: new Date().toISOString(), bron: "handmatig" };
43
+ }
44
+ const { error } = await supabaseAdmin
45
+ .from("app_settings")
46
+ .upsert({ key: BEDRIJFSGEGEVENS_SLEUTEL, value: JSON.stringify({ ...data, ...meta }) }, { onConflict: "key" });
47
+ if (error)
48
+ return { ok: false, fout: error.message };
49
+ return { ok: true };
50
+ }
51
+ catch (e) {
52
+ return { ok: false, fout: e instanceof Error ? e.message : "Opslaan mislukt" };
53
+ }
54
+ });
55
+ /** Alleen lezen: geeft voorstelwaarden terug, slaat niets op. */
56
+ export const factuurgegevensVoorstel = createServerFn({ method: "POST" })
57
+ .middleware([requireSupabaseAuth])
58
+ .handler(async ({ context }) => {
59
+ const ctx = context;
60
+ if (!(await isBeheerder(ctx)))
61
+ return { ok: false, fout: "Alleen een beheerder kan dit doen." };
62
+ try {
63
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
64
+ const { data, error } = await supabaseAdmin.from("invoice_branding_settings").select("*").limit(1).maybeSingle();
65
+ if (error)
66
+ return { ok: false, fout: "Er zijn in deze omgeving geen factuurgegevens gevonden." };
67
+ const v = uitFactuurgegevens(data);
68
+ if (!v)
69
+ return { ok: false, fout: "Er zijn nog geen factuurgegevens ingevuld." };
70
+ return { ok: true, gegevens: v };
71
+ }
72
+ catch (e) {
73
+ return { ok: false, fout: e instanceof Error ? e.message : "Ophalen mislukt" };
74
+ }
75
+ });
@@ -0,0 +1,126 @@
1
+ // ============================================================================
2
+ // src/lib/bedrijfsgegevens.ts — eigen bedrijfsgegevens van deze module
3
+ // (app_settings 'layout_bedrijfsgegevens'). Vullen het pakbonblok alleen als
4
+ // payload.bedrijf leeg is; wat de opdracht meestuurt gaat altijd voor.
5
+ // ============================================================================
6
+ export const BEDRIJFSGEGEVENS_SLEUTEL = "layout_bedrijfsgegevens";
7
+ export const LEGE_BEDRIJFSGEGEVENS = {
8
+ naam: "", adres: "", plaats: "", telefoon: "", email: "", kvk: "", btw: "", gln: "", logoId: null,
9
+ };
10
+ const VELDEN = ["naam", "adres", "plaats", "telefoon", "email", "kvk", "btw", "gln"];
11
+ const t = (v, max = 200) => (v == null ? "" : String(v).trim().slice(0, max));
12
+ export function leesBedrijfsgegevens(ruw) {
13
+ let o = {};
14
+ try {
15
+ o = typeof ruw === "string" ? JSON.parse(ruw) : (ruw ?? {});
16
+ }
17
+ catch {
18
+ o = {};
19
+ }
20
+ if (!o || typeof o !== "object")
21
+ o = {};
22
+ const uit = { ...LEGE_BEDRIJFSGEGEVENS };
23
+ for (const k of VELDEN)
24
+ uit[k] = t(o[k]);
25
+ const logo = t(o["logoId"], 64);
26
+ uit.logoId = logo || null;
27
+ return uit;
28
+ }
29
+ export function heeftBedrijfsgegevens(b) {
30
+ if (!b || typeof b !== "object")
31
+ return false;
32
+ return VELDEN.some((k) => t(b[k]) !== "");
33
+ }
34
+ /** payload.bedrijf wint; alleen als dat helemaal leeg is, vult de instelling. */
35
+ export function bedrijfMetTerugval(uitOpdracht, instelling) {
36
+ if (heeftBedrijfsgegevens(uitOpdracht))
37
+ return uitOpdracht;
38
+ if (!instelling || !heeftBedrijfsgegevens(instelling))
39
+ return (uitOpdracht ?? {});
40
+ const { logoId: _l, ...velden } = instelling;
41
+ return velden;
42
+ }
43
+ /** Eenmalig overnemen uit invoice_branding_settings (als die rij bestaat). */
44
+ export function uitFactuurgegevens(rij) {
45
+ if (!rij)
46
+ return null;
47
+ return {
48
+ naam: t(rij["company_name"]),
49
+ adres: t(rij["address"]),
50
+ plaats: [t(rij["postal_code"]), t(rij["city"])].filter(Boolean).join(" "),
51
+ telefoon: t(rij["phone"]),
52
+ email: t(rij["email"]),
53
+ kvk: t(rij["chamber_of_commerce_number"]),
54
+ btw: t(rij["vat_identification_number"]),
55
+ };
56
+ }
57
+ /**
58
+ * Eigen organisatie uit Floriday-auth (floriday_eigen_organisatie(): naam, adres,
59
+ * postcode, plaats, land, gln, organisatie_id, opgehaald_op). Telt alleen als
60
+ * opgehaald_op gevuld is en er minstens één veld is; er wordt niets verzonnen.
61
+ */
62
+ export function uitFloridayOrganisatie(rij) {
63
+ if (!rij || typeof rij !== "object")
64
+ return null;
65
+ const r = rij;
66
+ if (!r["opgehaald_op"])
67
+ return null;
68
+ const land = t(r["land"]).toUpperCase();
69
+ const plaats = [t(r["postcode"]), t(r["plaats"])].filter(Boolean).join(" ");
70
+ const uit = {
71
+ naam: t(r["naam"]),
72
+ adres: t(r["adres"]),
73
+ plaats: land && land !== "NL" && plaats ? `${plaats} (${land})` : plaats,
74
+ gln: t(r["gln"]),
75
+ };
76
+ return heeftBedrijfsgegevens(uit) ? uit : null;
77
+ }
78
+ /** Velden die de bron niet leverde (alleen de velden die die bron kent). */
79
+ export function ontbrekendeVelden(bron, g) {
80
+ const kent = bron === "floriday"
81
+ ? ["naam", "adres", "plaats", "gln"]
82
+ : ["naam", "adres", "plaats", "telefoon", "email", "kvk", "btw"];
83
+ return kent.filter((k) => !t(g[k]));
84
+ }
85
+ export const VELD_LABELS = {
86
+ naam: "bedrijfsnaam", adres: "adres", plaats: "postcode en plaats", telefoon: "telefoon",
87
+ email: "e-mail", kvk: "KvK-nummer", btw: "btw-nummer", gln: "GLN",
88
+ };
89
+ /** Melding voor de kaart, of null. */
90
+ export function voorinvulMelding(ruw) {
91
+ let o = {};
92
+ try {
93
+ o = typeof ruw === "string" ? JSON.parse(ruw) : (ruw ?? {});
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ const lijst = Array.isArray(o?.["ontbrekend"]) ? o["ontbrekend"].map(String) : [];
99
+ if (!lijst.length || (o["bron"] !== "floriday" && o["bron"] !== "factuurgegevens"))
100
+ return null;
101
+ const bron = o["bron"] === "floriday" ? "Floriday" : "de factuurgegevens";
102
+ return `Voorgevuld uit ${bron}. Deze gegevens levert ${bron} (nog) niet: ${lijst.map((k) => VELD_LABELS[k] ?? k).join(", ")}. Vul ze zelf in.`;
103
+ }
104
+ /**
105
+ * Eenmalig voorinvullen. "overslaan": er staat al iets of er is al eens voorgevuld.
106
+ * null: geen bron met gegevens. Anders: de waarde om op te slaan (Floriday gaat voor).
107
+ */
108
+ export function voorinvulBesluit(bestaand, floriday, factuur, nu = new Date()) {
109
+ let o = null;
110
+ try {
111
+ o = typeof bestaand === "string" ? JSON.parse(bestaand) : (bestaand ?? null);
112
+ }
113
+ catch {
114
+ o = null;
115
+ }
116
+ if (o && typeof o === "object" && (o["voorgevuld_op"] || heeftBedrijfsgegevens(o)))
117
+ return "overslaan";
118
+ const fl = uitFloridayOrganisatie(floriday);
119
+ const fa = fl ? null : uitFactuurgegevens(factuur);
120
+ const bronData = fl ?? (fa && heeftBedrijfsgegevens(fa) ? fa : null);
121
+ if (!bronData)
122
+ return null;
123
+ const basis = leesBedrijfsgegevens(o ?? {});
124
+ const bron = fl ? "floriday" : "factuurgegevens";
125
+ return { ...basis, ...bronData, bron, voorgevuld_op: nu.toISOString(), ontbrekend: ontbrekendeVelden(bron, bronData) };
126
+ }
@@ -110,6 +110,10 @@ export interface LayoutModel {
110
110
  bron?: string;
111
111
  /** vaste layout die niet mag worden aangepast of verwijderd */
112
112
  systeem?: boolean;
113
+ /** vaste sleutel van de Flow Selections-standaard waarvan deze layout afstamt */
114
+ standaard_sleutel?: string | null;
115
+ /** versie van die standaard op het moment van aanmaken/overnemen */
116
+ standaard_versie?: number | null;
113
117
  updated_at: string;
114
118
  }
115
119
  /** Is dit een vaste layout voor een document dat uit Floriday komt? */
@@ -138,6 +142,12 @@ export declare const FLORIDAY_SYSTEEM_LAYOUTS: readonly [{
138
142
  readonly papierformaat: "LABEL_100x62";
139
143
  readonly breedte_mm: 100;
140
144
  readonly hoogte_mm: 62;
145
+ }, {
146
+ readonly naam: "Traysticker (Floriday)";
147
+ readonly documenttype: "traysticker";
148
+ readonly papierformaat: "LABEL_100x62";
149
+ readonly breedte_mm: 100;
150
+ readonly hoogte_mm: 62;
141
151
  }];
142
152
  /** Toelichting bij een standaardlayout (geen Floriday-document). */
143
153
  export declare const STANDAARD_LAYOUT_TOELICHTING = "Standaarddocument voor eigen orders. Volledig aanpasbaar \u2014 aanpassen kan per klant.";
@@ -1 +1 @@
1
- {"version":3,"file":"documentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/documentTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/documentTypes.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,14 @@ export const FLORIDAY_SYSTEEM_LAYOUTS = [
67
67
  breedte_mm: 100,
68
68
  hoogte_mm: 62,
69
69
  },
70
+ {
71
+ // Omschrijving; de echte maat komt uit Floriday of de PDF (nooit schalen).
72
+ naam: "Traysticker (Floriday)",
73
+ documenttype: "traysticker",
74
+ papierformaat: "LABEL_100x62",
75
+ breedte_mm: 100,
76
+ hoogte_mm: 62,
77
+ },
70
78
  ];
71
79
  /** Toelichting bij een standaardlayout (geen Floriday-document). */
72
80
  export const STANDAARD_LAYOUT_TOELICHTING = "Standaarddocument voor eigen orders. Volledig aanpasbaar — aanpassen kan per klant.";
@@ -0,0 +1,39 @@
1
+ export declare const KLAAR_SOORTEN: readonly ["pakbon", "afleverbrief", "sticker", "traysticker", "veilingbrief", "factuur", "productiebon"];
2
+ /** Soorten waarvoor de Engine een Floriday-systeemlayout opvraagt. */
3
+ export declare const FLORIDAY_VERWIJZING_SOORTEN: string[];
4
+ export interface LayoutRij {
5
+ id: string;
6
+ naam?: string | null;
7
+ documenttype: string;
8
+ bron?: string | null;
9
+ actief?: boolean | null;
10
+ is_standaard?: boolean | null;
11
+ }
12
+ export type LayoutStatus = {
13
+ ok: true;
14
+ layoutId: string;
15
+ naam: string;
16
+ } | {
17
+ ok: false;
18
+ reden: "geen" | "meerdere" | "enige_eigen_geen_standaard";
19
+ kandidaatId?: string;
20
+ kandidaatNaam?: string;
21
+ };
22
+ export declare function layoutStatus(soort: string, layouts: LayoutRij[]): LayoutStatus;
23
+ /**
24
+ * Melding op Layouts: geen actieve standaard, maar wel precies één eigen
25
+ * actieve layout. Er wordt nooit zelf gekozen; de gebruiker klikt.
26
+ */
27
+ export declare function ontbrekendeStandaarden(layouts: LayoutRij[]): {
28
+ soort: string;
29
+ layoutId: string;
30
+ naam: string;
31
+ }[];
32
+ /** Twee of meer actieve layouts (per soort en bron) zonder standaard: er wordt niets gekozen. */
33
+ export declare function soortenZonderKeuze(layouts: LayoutRij[]): {
34
+ soort: string;
35
+ bron: string;
36
+ aantal: number;
37
+ }[];
38
+ export declare function isEtiketSoort(soort: string): boolean;
39
+ //# sourceMappingURL=klaarOmTePrinten.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"klaarOmTePrinten.d.ts","sourceRoot":"","sources":["../../src/lib/klaarOmTePrinten.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,0GAEhB,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,2BAA2B,UAA6D,CAAC;AAEtG,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,4BAA4B,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAU3H,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,YAAY,CAM9E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAWhH;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAc1G;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,65 @@
1
+ // ============================================================================
2
+ // src/lib/klaarOmTePrinten.ts — alleen lezen: per documentsoort of er een
3
+ // layout (of Floriday-verwijzing) is, een printer en de juiste etiketmaat.
4
+ // Dezelfde layoutregel als logistics_floriday_layout_id / standaardlayout.
5
+ // ============================================================================
6
+ import { ETIKET_SOORTEN } from "./documentTypes.js";
7
+ export const KLAAR_SOORTEN = [
8
+ "pakbon", "afleverbrief", "sticker", "traysticker", "veilingbrief", "factuur", "productiebon",
9
+ ];
10
+ /** Soorten waarvoor de Engine een Floriday-systeemlayout opvraagt. */
11
+ export const FLORIDAY_VERWIJZING_SOORTEN = ["afleverbrief", "veilingbrief", "sticker", "traysticker"];
12
+ /** Winnende layout: precies één actief, of precies één actief standaard. */
13
+ function kies(rijen) {
14
+ if (rijen.length === 1)
15
+ return { ok: true, layoutId: rijen[0].id, naam: rijen[0].naam ?? "" };
16
+ const std = rijen.filter((r) => r.is_standaard === true);
17
+ if (rijen.length > 1 && std.length === 1)
18
+ return { ok: true, layoutId: std[0].id, naam: std[0].naam ?? "" };
19
+ return { ok: false, reden: rijen.length ? "meerdere" : "geen" };
20
+ }
21
+ export function layoutStatus(soort, layouts) {
22
+ const actief = (Array.isArray(layouts) ? layouts : []).filter((l) => l.actief === true && l.documenttype === soort);
23
+ if (FLORIDAY_VERWIJZING_SOORTEN.includes(soort)) {
24
+ return kies(actief.filter((l) => l.bron === "floriday"));
25
+ }
26
+ return kies(actief.filter((l) => l.bron !== "floriday"));
27
+ }
28
+ /**
29
+ * Melding op Layouts: geen actieve standaard, maar wel precies één eigen
30
+ * actieve layout. Er wordt nooit zelf gekozen; de gebruiker klikt.
31
+ */
32
+ export function ontbrekendeStandaarden(layouts) {
33
+ const uit = [];
34
+ const lijst = Array.isArray(layouts) ? layouts : [];
35
+ const soorten = [...new Set(lijst.map((l) => l.documenttype))];
36
+ for (const soort of soorten) {
37
+ const eigen = lijst.filter((l) => l.documenttype === soort && l.actief === true && l.bron !== "floriday");
38
+ if (eigen.length !== 1)
39
+ continue;
40
+ if (eigen.some((l) => l.is_standaard === true))
41
+ continue;
42
+ uit.push({ soort, layoutId: eigen[0].id, naam: eigen[0].naam ?? "" });
43
+ }
44
+ return uit;
45
+ }
46
+ /** Twee of meer actieve layouts (per soort en bron) zonder standaard: er wordt niets gekozen. */
47
+ export function soortenZonderKeuze(layouts) {
48
+ const lijst = (Array.isArray(layouts) ? layouts : []).filter((l) => l.actief === true);
49
+ const groepen = new Map();
50
+ for (const l of lijst) {
51
+ const k = `${l.documenttype}|${l.bron ?? "eigen"}`;
52
+ groepen.set(k, [...(groepen.get(k) ?? []), l]);
53
+ }
54
+ const uit = [];
55
+ for (const [k, rijen] of groepen) {
56
+ if (rijen.length < 2 || rijen.some((r) => r.is_standaard === true))
57
+ continue;
58
+ const [soort, bron] = k.split("|");
59
+ uit.push({ soort: soort, bron: bron, aantal: rijen.length });
60
+ }
61
+ return uit;
62
+ }
63
+ export function isEtiketSoort(soort) {
64
+ return ETIKET_SOORTEN.includes(soort);
65
+ }
@@ -0,0 +1,19 @@
1
+ export interface LayoutStandaard {
2
+ sleutel: string;
3
+ versie: number;
4
+ documenttype: string;
5
+ naam: string;
6
+ config: Record<string, unknown> | null;
7
+ page_settings?: Record<string, unknown> | null;
8
+ }
9
+ export interface LayoutMetHerkomst {
10
+ documenttype: string;
11
+ bron?: string | null;
12
+ standaard_sleutel?: string | null;
13
+ standaard_versie?: number | null;
14
+ }
15
+ /** De standaard die bij deze layout hoort: op sleutel, anders op documentsoort. */
16
+ export declare function standaardVoor(l: LayoutMetHerkomst, standaarden: LayoutStandaard[]): LayoutStandaard | null;
17
+ /** Alleen voor layouts die van een standaard afstammen, en alleen bij een hogere versie. */
18
+ export declare function nieuwereStandaard(l: LayoutMetHerkomst, standaarden: LayoutStandaard[]): LayoutStandaard | null;
19
+ //# sourceMappingURL=layoutStandaarden.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutStandaarden.d.ts","sourceRoot":"","sources":["../../src/lib/layoutStandaarden.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,IAAI,CAK1G;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,IAAI,CAK9G"}
@@ -0,0 +1,23 @@
1
+ // ============================================================================
2
+ // src/lib/layoutStandaarden.ts — Flow Selections-standaarden (tabel
3
+ // layout_standaarden). Een update overschrijft nooit een layout; hier wordt
4
+ // alleen bepaald of er een nieuwere standaard beschikbaar is.
5
+ // ============================================================================
6
+ /** De standaard die bij deze layout hoort: op sleutel, anders op documentsoort. */
7
+ export function standaardVoor(l, standaarden) {
8
+ if ((l.bron ?? "eigen") === "floriday")
9
+ return null;
10
+ const lijst = Array.isArray(standaarden) ? standaarden : [];
11
+ if (l.standaard_sleutel)
12
+ return lijst.find((s) => s.sleutel === l.standaard_sleutel) ?? null;
13
+ return lijst.filter((s) => s.documenttype === l.documenttype).sort((a, b) => a.sleutel.localeCompare(b.sleutel))[0] ?? null;
14
+ }
15
+ /** Alleen voor layouts die van een standaard afstammen, en alleen bij een hogere versie. */
16
+ export function nieuwereStandaard(l, standaarden) {
17
+ if (!l.standaard_sleutel)
18
+ return null;
19
+ const s = standaardVoor(l, standaarden);
20
+ if (!s)
21
+ return null;
22
+ return Number(s.versie) > Number(l.standaard_versie ?? 0) ? s : null;
23
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
@@ -761,6 +761,30 @@ function verzamelLogoIds(waarde, uit, diepte = 0) {
761
761
  }
762
762
  }
763
763
  /** Haalt de logo's op die in de layout gebruikt worden, met tijdelijke URL. */
764
+ /** Eigen bedrijfsgegevens (app_settings) als terugval voor een lege payload.bedrijf. */
765
+ async function bedrijfsInstelling(db) {
766
+ const { BEDRIJFSGEGEVENS_SLEUTEL, leesBedrijfsgegevens } = await import("./bedrijfsgegevens.js");
767
+ const { data } = await db.from("app_settings").select("value").eq("key", BEDRIJFSGEGEVENS_SLEUTEL).maybeSingle();
768
+ return leesBedrijfsgegevens(data?.["value"] ?? null);
769
+ }
770
+ /** Vult order.bedrijf en (zonder eigen documentlogo) het logo uit de instelling. */
771
+ async function metBedrijfsTerugval(db, order, layout) {
772
+ try {
773
+ const { bedrijfMetTerugval, heeftBedrijfsgegevens } = await import("./bedrijfsgegevens.js");
774
+ if (heeftBedrijfsgegevens(order.bedrijf))
775
+ return { order, layout };
776
+ const inst = await bedrijfsInstelling(db);
777
+ const nieuweOrder = { ...order, bedrijf: bedrijfMetTerugval(order.bedrijf, inst) };
778
+ const cfg = (layout?.config ?? {});
779
+ if (inst.logoId && !cfg?.logo?.logoId) {
780
+ return { order: nieuweOrder, layout: { ...layout, config: { ...cfg, logo: { ...(cfg.logo ?? {}), logoId: inst.logoId } } } };
781
+ }
782
+ return { order: nieuweOrder, layout };
783
+ }
784
+ catch {
785
+ return { order, layout };
786
+ }
787
+ }
764
788
  async function logosVoor(db, layout) {
765
789
  const config = layout?.config ?? null;
766
790
  const ids = new Set();
@@ -794,7 +818,7 @@ async function logosVoor(db, layout) {
794
818
  * het documenttype. Zo werkt een bijgewerkte layout meteen door.
795
819
  */
796
820
  export async function bouwHtml(db, job, keuze, uitkomst) {
797
- const layout = keuze.layout;
821
+ let layout = keuze.layout;
798
822
  const noteer = (bron) => {
799
823
  if (uitkomst)
800
824
  uitkomst.bron = bron;
@@ -861,7 +885,9 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
861
885
  const gekozen = (cartId ? karren.find((k) => String(k?.cart_id ?? "").trim() === cartId) : null) ??
862
886
  karren[0] ??
863
887
  null;
864
- const order = { ...volledig, karren: gekozen ? [gekozen] : [] };
888
+ const metTerugval = await metBedrijfsTerugval(db, { ...volledig, karren: gekozen ? [gekozen] : [] }, layout);
889
+ const order = metTerugval.order;
890
+ layout = metTerugval.layout;
865
891
  return renderPakbonDocument(leesAfleverbriefConfig(layout.config), order, {
866
892
  breedteMm,
867
893
  hoogteMm,
@@ -1047,6 +1073,11 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
1047
1073
  };
1048
1074
  }
1049
1075
  }
1076
+ {
1077
+ const t = await metBedrijfsTerugval(db, order, layout);
1078
+ order = t.order;
1079
+ layout = t.layout;
1080
+ }
1050
1081
  const html = renderPakbonDocument(layout.config, order, {
1051
1082
  breedteMm,
1052
1083
  hoogteMm,
@@ -143,7 +143,7 @@ export declare const webhookStatus: import("@tanstack/start-client-core").Option
143
143
  niet_gematcht: string[];
144
144
  }[];
145
145
  aan: boolean;
146
- weergave: "aan" | "uit" | "onbekend";
146
+ weergave: "uit" | "aan" | "onbekend";
147
147
  nietBereikbaar: boolean;
148
148
  pnUrl: string | null;
149
149
  pnGeslaagd: number | null;
@@ -63,7 +63,7 @@ export declare function weergaveStatus(k: Koppeling | null): "aan" | "uit" | "on
63
63
  /** Veilige status voor het scherm: nooit het geheim. */
64
64
  export declare function veiligeStatus(k: Koppeling | null): {
65
65
  aan: boolean;
66
- weergave: "aan" | "uit" | "onbekend";
66
+ weergave: "uit" | "aan" | "onbekend";
67
67
  nietBereikbaar: boolean;
68
68
  pnUrl: string | null;
69
69
  pnGeslaagd: number | null;
@@ -1,5 +1,5 @@
1
- /** Moduleversie van deze code. Gelijk houden aan package.json (test bewaakt dit). */
2
- export declare const MODULE_VERSIE = "1.63.4";
1
+ /** Moduleversie van deze code: uit package.json (gegenereerd bij build:lib; test bewaakt dit). */
2
+ export declare const MODULE_VERSIE: string;
3
3
  export declare function normaliseerAdres(u: unknown): string | null;
4
4
  /** -1 als a < b, 0 als gelijk, 1 als a > b (alleen cijfers, punt-gescheiden). */
5
5
  export declare function vergelijkVersie(a: string, b: string): number;
@@ -1 +1 @@
1
- {"version":3,"file":"shellPoort.d.ts","sourceRoot":"","sources":["../../src/lib/shellPoort.ts"],"names":[],"mappings":"AAMA,qFAAqF;AACrF,eAAO,MAAM,aAAa,WAAW,CAAC;AAEtC,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG1D;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,GACb;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,GAAG,eAAe,GAAG,sBAAsB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1H,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,aAAa,CAWhB;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C"}
1
+ {"version":3,"file":"shellPoort.d.ts","sourceRoot":"","sources":["../../src/lib/shellPoort.ts"],"names":[],"mappings":"AAQA,kGAAkG;AAClG,eAAO,MAAM,aAAa,EAAE,MAAsB,CAAC;AAEnD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG1D;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,GACb;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,GAAG,eAAe,GAAG,sBAAsB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1H,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,aAAa,CAWhB;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C"}