@flowselections/floriday-voorraad 1.0.141 → 1.0.145

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 (37) hide show
  1. package/dist-lib/components/voorraad/ArtikelWizard.js +1 -1
  2. package/dist-lib/components/voorraad/FustAdministratie.d.ts +12 -0
  3. package/dist-lib/components/voorraad/FustAdministratie.d.ts.map +1 -0
  4. package/dist-lib/components/voorraad/FustAdministratie.js +69 -0
  5. package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
  6. package/dist-lib/components/voorraad/FustenPage.js +9 -14
  7. package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts +6 -0
  8. package/dist-lib/components/voorraad/KoppelingStatusPanel.d.ts.map +1 -0
  9. package/dist-lib/components/voorraad/KoppelingStatusPanel.js +47 -0
  10. package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
  11. package/dist-lib/components/voorraad/NieuwArtikelPage.js +24 -5
  12. package/dist-lib/components/voorraad/TelmomentButton.d.ts +8 -0
  13. package/dist-lib/components/voorraad/TelmomentButton.d.ts.map +1 -0
  14. package/dist-lib/components/voorraad/TelmomentButton.js +65 -0
  15. package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
  16. package/dist-lib/components/voorraad/ValidationPage.js +2 -1
  17. package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
  18. package/dist-lib/components/voorraad/VoorraadPage.js +4 -1
  19. package/dist-lib/hooks/useEnsureVoorraadDefaults.d.ts +7 -0
  20. package/dist-lib/hooks/useEnsureVoorraadDefaults.d.ts.map +1 -0
  21. package/dist-lib/hooks/useEnsureVoorraadDefaults.js +25 -0
  22. package/dist-lib/integrations/supabase/types.d.ts +890 -0
  23. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  24. package/dist-lib/lib/engine-carrier.d.ts +15 -0
  25. package/dist-lib/lib/engine-carrier.d.ts.map +1 -0
  26. package/dist-lib/lib/engine-carrier.js +27 -0
  27. package/dist-lib/lib/fust-administratie.d.ts +29 -0
  28. package/dist-lib/lib/fust-administratie.d.ts.map +1 -0
  29. package/dist-lib/lib/fust-administratie.js +63 -0
  30. package/dist-lib/lib/fusten.d.ts +4 -0
  31. package/dist-lib/lib/fusten.d.ts.map +1 -1
  32. package/dist-lib/lib/simple-packing.d.ts +2 -4
  33. package/dist-lib/lib/simple-packing.d.ts.map +1 -1
  34. package/dist-lib/lib/simple-packing.js +5 -12
  35. package/package.json +2 -2
  36. package/sql/AGENTS.md +6 -1
  37. package/sql/floriday-voorraad-schema.sql +1038 -51
@@ -0,0 +1,15 @@
1
+ export type EngineCarrier = {
2
+ code: string | null;
3
+ melding: string | null;
4
+ };
5
+ export declare const ENGINE_ONTBREEKT = "De Logistiek Engine is niet ge\u00EFnstalleerd, daardoor kan de ladingdrager niet worden vertaald. Neem contact op met de beheerder.";
6
+ /** Zet het antwoord (of de fout) van de Engine om; puur, zodat het te testen is. */
7
+ export declare function interpretEngineCarrier(invoer: string, data: {
8
+ code?: string | null;
9
+ fout?: string | null;
10
+ } | null | undefined, error: {
11
+ code?: string;
12
+ message?: string;
13
+ } | null | undefined): EngineCarrier;
14
+ export declare function resolveEngineCarrier(client: any, code: string): Promise<EngineCarrier>;
15
+ //# sourceMappingURL=engine-carrier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-carrier.d.ts","sourceRoot":"","sources":["../../src/lib/engine-carrier.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE5E,eAAO,MAAM,gBAAgB,yIACsG,CAAC;AAEpI,oFAAoF;AACpF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EACvE,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC5D,aAAa,CAUf;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAI5F"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Ladingdrager → Engine-code. De enige bron is de Logistiek Engine
3
+ * (logistics_ladingdrager_resolve over logistics_floriday_carrier_map).
4
+ * Geen eigen terugvallijst: ontbreekt de Engine of de vertaling, dan een melding.
5
+ */
6
+ import { isMissingFunctionError } from "./buyer-organizations.js";
7
+ export const ENGINE_ONTBREEKT = "De Logistiek Engine is niet geïnstalleerd, daardoor kan de ladingdrager niet worden vertaald. Neem contact op met de beheerder.";
8
+ /** Zet het antwoord (of de fout) van de Engine om; puur, zodat het te testen is. */
9
+ export function interpretEngineCarrier(invoer, data, error) {
10
+ if (error) {
11
+ if (isMissingFunctionError(error))
12
+ return { code: null, melding: ENGINE_ONTBREEKT };
13
+ return { code: null, melding: "De ladingdrager kon niet bij de Logistiek Engine worden gecontroleerd. Probeer het opnieuw." };
14
+ }
15
+ if (data?.code)
16
+ return { code: data.code, melding: null };
17
+ return {
18
+ code: null,
19
+ melding: `De Logistiek Engine kan ladingdrager "${invoer}" niet vertalen${data?.fout ? ` (${data.fout})` : ""}. Kies een andere ladingdrager of vraag de beheerder de vertaling toe te voegen.`,
20
+ };
21
+ }
22
+ export async function resolveEngineCarrier(client, code) {
23
+ if (!code.trim())
24
+ return { code: null, melding: null };
25
+ const { data, error } = await client.rpc("logistics_ladingdrager_resolve", { p_code: code });
26
+ return interpretEngineCarrier(code, data, error);
27
+ }
@@ -0,0 +1,29 @@
1
+ /** Fustcodes waarvan het saldo standaard niet wordt bijgehouden (wegwerp/eenmalig). */
2
+ export declare const STANDAARD_NIET_BIJHOUDEN: readonly [999, 800];
3
+ export interface FustAdminVelden {
4
+ name: string;
5
+ vbn_code: number | null;
6
+ stock: number;
7
+ saldo_bijhouden?: boolean | null;
8
+ eigen_naam?: string | null;
9
+ }
10
+ /** De naam die overal getoond wordt: eigen naam van de kweker, anders de Floricode-/Floriday-naam. */
11
+ export declare function fustNaam(f: Pick<FustAdminVelden, "name" | "eigen_naam">): string;
12
+ export declare function saldoBijhouden(f: Pick<FustAdminVelden, "vbn_code" | "saldo_bijhouden">): boolean;
13
+ /** Alleen bijgehouden fusten met een negatief saldo tellen als tekort. */
14
+ export declare function fustTekorten<T extends FustAdminVelden>(items: T[]): T[];
15
+ export interface FustStartmoment {
16
+ fust_type_id: string | null;
17
+ moment: string;
18
+ beginstand: number;
19
+ automatisch: boolean;
20
+ }
21
+ export declare function fetchFustStartmomenten(): Promise<FustStartmoment[]>;
22
+ /** fustTypeId null = startmoment voor alle fusten. */
23
+ export declare function saveFustStartmoment(fustTypeId: string | null, moment: Date, beginstand: number, notitie?: string): Promise<any>;
24
+ export declare function saveFustInstellingen(fustTypeId: string, saldoBijhouden: boolean | null, eigenNaam: string | null): Promise<void>;
25
+ /** Telmoment: welke orderregels vallen buiten de telling. */
26
+ export type TelmomentCategorie = "voor_teldag" | "vertrokken" | "teldag_open";
27
+ export declare const TELMOMENT_LABEL: Record<TelmomentCategorie, string>;
28
+ export declare function telmomentCategorie(leverdatum: string, teldag: string, vertrokkenVoorTelmoment: boolean): TelmomentCategorie | null;
29
+ //# sourceMappingURL=fust-administratie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fust-administratie.d.ts","sourceRoot":"","sources":["../../src/lib/fust-administratie.ts"],"names":[],"mappings":"AAMA,uFAAuF;AACvF,eAAO,MAAM,wBAAwB,qBAAsB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,sGAAsG;AACtG,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY,CAAC,GAAG,MAAM,CAGhF;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,iBAAiB,CAAC,GAAG,OAAO,CAGhG;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEvE;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAMzE;AAED,sDAAsD;AACtD,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,gBAUtH;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,iBAOtH;AAED,6DAA6D;AAC7D,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAE9E,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAI9D,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAIlI"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Fustenadministratie (1.0.144): startmoment, saldo bijhouden en eigen fustnaam.
3
+ * Zelfde regels als de database (`voorraad_fust_bijhouden`): niet ingesteld = 999 en 800 uit, de rest aan.
4
+ */
5
+ import { supabase } from "../integrations/supabase/client.js";
6
+ /** Fustcodes waarvan het saldo standaard niet wordt bijgehouden (wegwerp/eenmalig). */
7
+ export const STANDAARD_NIET_BIJHOUDEN = [999, 800];
8
+ /** De naam die overal getoond wordt: eigen naam van de kweker, anders de Floricode-/Floriday-naam. */
9
+ export function fustNaam(f) {
10
+ const eigen = f.eigen_naam?.trim();
11
+ return eigen ? eigen : f.name.trim();
12
+ }
13
+ export function saldoBijhouden(f) {
14
+ if (f.saldo_bijhouden === true || f.saldo_bijhouden === false)
15
+ return f.saldo_bijhouden;
16
+ return !(f.vbn_code != null && STANDAARD_NIET_BIJHOUDEN.includes(f.vbn_code));
17
+ }
18
+ /** Alleen bijgehouden fusten met een negatief saldo tellen als tekort. */
19
+ export function fustTekorten(items) {
20
+ return items.filter((f) => saldoBijhouden(f) && f.stock < 0).sort((a, b) => a.stock - b.stock);
21
+ }
22
+ export async function fetchFustStartmomenten() {
23
+ const { data, error } = await supabase
24
+ .from("fust_startmoment")
25
+ .select("fust_type_id, moment, beginstand, automatisch");
26
+ if (error)
27
+ throw new Error(error.message);
28
+ return (data ?? []);
29
+ }
30
+ /** fustTypeId null = startmoment voor alle fusten. */
31
+ export async function saveFustStartmoment(fustTypeId, moment, beginstand, notitie) {
32
+ const { data, error } = await supabase.rpc("voorraad_fust_startmoment_opslaan", {
33
+ p_fust_type_id: fustTypeId,
34
+ p_moment: moment.toISOString(),
35
+ p_beginstand: Math.trunc(beginstand),
36
+ p_beginstanden: null,
37
+ p_notitie: notitie ?? null,
38
+ });
39
+ if (error)
40
+ throw new Error(error.message);
41
+ return data;
42
+ }
43
+ export async function saveFustInstellingen(fustTypeId, saldoBijhouden, eigenNaam) {
44
+ const { error } = await supabase.rpc("voorraad_fust_instellingen_opslaan", {
45
+ p_fust_type_id: fustTypeId,
46
+ p_saldo_bijhouden: saldoBijhouden,
47
+ p_eigen_naam: eigenNaam && eigenNaam.trim() ? eigenNaam.trim() : null,
48
+ });
49
+ if (error)
50
+ throw new Error(error.message);
51
+ }
52
+ export const TELMOMENT_LABEL = {
53
+ voor_teldag: "Leverdatum vóór de teldag — telt niet mee",
54
+ vertrokken: "Vertrokken vóór het telmoment — telt niet mee",
55
+ teldag_open: "Teldag, nog niet vertrokken — vink aan als het al weg is",
56
+ };
57
+ export function telmomentCategorie(leverdatum, teldag, vertrokkenVoorTelmoment) {
58
+ if (leverdatum > teldag)
59
+ return null;
60
+ if (leverdatum < teldag)
61
+ return "voor_teldag";
62
+ return vertrokkenVoorTelmoment ? "vertrokken" : "teldag_open";
63
+ }
@@ -16,6 +16,10 @@ export interface FustType {
16
16
  height_mm: number | null;
17
17
  notes: string | null;
18
18
  updated_at: string;
19
+ /** null = standaard (999/800 uit, rest aan). */
20
+ saldo_bijhouden?: boolean | null;
21
+ /** Eigen naam van de kweker; wordt overal getoond in plaats van `name`. */
22
+ eigen_naam?: string | null;
19
23
  }
20
24
  export interface FustMutation {
21
25
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fusten.d.ts","sourceRoot":"","sources":["../../src/lib/fusten.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fusten.d.ts","sourceRoot":"","sources":["../../src/lib/fusten.ts"],"names":[],"mappings":"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"}
@@ -14,16 +14,14 @@ export interface SimplePacking {
14
14
  loadCarrier: string;
15
15
  }
16
16
  export declare const EMPTY_SIMPLE_PACKING: SimplePacking;
17
- /** Floriday-ladingdrager → code van de Engine (load_carrier_types.code). */
18
- export declare const ENGINE_CARRIER_CODE: Record<string, string>;
19
17
  /** Namen van de velden die nog ontbreken of ongeldig zijn (leeg = compleet). */
20
18
  export declare function missingPackingFields(p: SimplePacking): string[];
21
19
  /** Hoofdverpakking voor product_packings; gooit als iets ontbreekt. */
22
20
  export declare function simplePackingToRow(p: SimplePacking): ProductPackingRow;
23
21
  /** Regel voor logistics_product_oordeel_belading (Engine). */
24
- export declare function engineOordeelRegel(productId: string, p: SimplePacking): {
22
+ export declare function engineOordeelRegel(productId: string, p: SimplePacking, engineCarrierCode: string | null): {
25
23
  product_id: string;
26
- carrier_code: string;
24
+ carrier_code: string | null;
27
25
  plants_per_crate: number | null;
28
26
  crates_per_layer: number | null;
29
27
  layers_per_cart: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"simple-packing.d.ts","sourceRoot":"","sources":["../../src/lib/simple-packing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,oBAAoB,EAAE,aAMlC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOtD,CAAC;AAOF,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAQ/D;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,GAAG,iBAAiB,CActE;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa;;;;;;EAQrE"}
1
+ {"version":3,"file":"simple-packing.d.ts","sourceRoot":"","sources":["../../src/lib/simple-packing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,oBAAoB,EAAE,aAMlC,CAAC;AAUF,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAQ/D;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,GAAG,iBAAiB,CActE;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;;;;;;EAQvG"}
@@ -5,15 +5,8 @@ export const EMPTY_SIMPLE_PACKING = {
5
5
  layersPerLoadCarrier: "",
6
6
  loadCarrier: "",
7
7
  };
8
- /** Floriday-ladingdrager → code van de Engine (load_carrier_types.code). */
9
- export const ENGINE_CARRIER_CODE = {
10
- AUCTION_TROLLEY: "trolley",
11
- DANISH_TROLLEY: "danish_container",
12
- EURO_TROLLEY: "euro_rolcontainer",
13
- PALLET: "pallet",
14
- EURO_PALLET: "euro_pallet",
15
- NONE: "loose",
16
- };
8
+ // De vertaling Floriday-ladingdrager → Engine-code komt alleen van de Engine
9
+ // (zie ../lib/engine-carrier.ts); hier staat bewust geen eigen lijst.
17
10
  function posInt(v) {
18
11
  const n = Number(String(v).trim());
19
12
  return Number.isInteger(n) && n > 0 ? n : null;
@@ -29,7 +22,7 @@ export function missingPackingFields(p) {
29
22
  out.push("fusten per laag");
30
23
  if (posInt(p.layersPerLoadCarrier) === null)
31
24
  out.push("lagen per kar");
32
- if (!ENGINE_CARRIER_CODE[p.loadCarrier])
25
+ if (!p.loadCarrier.trim())
33
26
  out.push("ladingdrager");
34
27
  return out;
35
28
  }
@@ -51,10 +44,10 @@ export function simplePackingToRow(p) {
51
44
  };
52
45
  }
53
46
  /** Regel voor logistics_product_oordeel_belading (Engine). */
54
- export function engineOordeelRegel(productId, p) {
47
+ export function engineOordeelRegel(productId, p, engineCarrierCode) {
55
48
  return {
56
49
  product_id: productId,
57
- carrier_code: ENGINE_CARRIER_CODE[p.loadCarrier] ?? null,
50
+ carrier_code: engineCarrierCode,
58
51
  plants_per_crate: posInt(p.piecesPerPackage),
59
52
  crates_per_layer: posInt(p.packagesPerLayer),
60
53
  layers_per_cart: posInt(p.layersPerLoadCarrier),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/floriday-voorraad",
3
- "version": "1.0.141",
3
+ "version": "1.0.145",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "main": "./dist-lib/index.js",
@@ -51,7 +51,7 @@
51
51
  "devDependencies": {
52
52
  "@cloudflare/vite-plugin": "^1.25.5",
53
53
  "@eslint/js": "^9.32.0",
54
- "@flowselections/core": "1.0.34",
54
+ "@flowselections/core": "1.0.35",
55
55
  "@lovable.dev/vite-tanstack-config": "2.26.5",
56
56
  "@rsbuild/core": "^1.0.0",
57
57
  "@tailwindcss/vite": "^4.2.1",
package/sql/AGENTS.md CHANGED
@@ -6,4 +6,9 @@
6
6
  - The correct fust count per order line comes only from `voorraad_fust_juist(order_item_id)` (same rule as `sync_order_item_fusten`; removed, quarantined, externally fulfilled or cancelled = 0); fust corrections compare against it, because every hand-built copy of the rule drifted.
7
7
  - Local stock saves never depend on the Floriday write gate: every Voorraad queue insert first checks `voorraad_floriday_klaarzetten_toegestaan()` and runs in its own exception block, because the Engine gate trigger raises and rolled back the local save.
8
8
  - A note per stock change travels via tx setting `stock.change_note` (read by the deferred log trigger at commit, so never clear it inside the call); `trade_item_stock.notes` is the fixed article note and changes only when the caller asks (`stock.keep_notes`), because appending each save stacked notes.
9
- - `sql/floriday-voorraad-schema.sql` must carry the package version and required objects; `scripts/check-schema-version.mjs` (prepublishOnly + test) blocks publishing otherwise, because 1.0.139 shipped with a 1.0.136 schema.
9
+ - `sql/floriday-voorraad-schema.sql` must name the newest `supabase/migrations` file in its "Laatste migratie" header and contain the required objects; `scripts/check-schema-version.mjs` (prepublishOnly + test) blocks publishing otherwise; the header version is informational and never higher than package.json, because 1.0.139 shipped a stale schema and the dashboard bumps versions without schema changes.
10
+ - Default data only via `voorraad_ensure_defaults()` (system data upserted by code keeping `naam_aangepast`, retired codes set inactive; customer settings only inserted when missing, with column defaults equal to reader fallbacks); bump `voorraad_defaults_versie()` on every list change, because new shells get the schema without data and the fast exit compares that version.
11
+ - Load carrier → Engine code only via the Engine's `logistics_ladingdrager_resolve`; no own mapping list or fallback, because two lists drift.
12
+ - Floriday trade items become own articles only via `voorraad_floriday_artikelen_aanmaken` (match GTIN → article code → name; ambiguity goes to `voorraad_koppel_twijfel`, never guessed; reuses the existing stock row keyed by the Floriday id); the cache trigger only enqueues and wakes a self-unscheduling drain, with an hourly safety net from `voorraad_ensure_defaults`, because inline creation slowed Floriday-auth syncs.
13
+ - Floriday order lines resolve their article only from source metadata (`voorraad_orderregel_trade_item`, sales order id → trade item), overriding name matches; existing empty lines only via `voorraad_correctie_1144` (unambiguous, not shipped/cancelled/processed, batched), because name matches linked the wrong article.
14
+ - Fust balance counts only bookings from the start moment (`fust_startmoment`, global or per fust) plus the opening count; earlier bookings stay visible but outside the balance, and an automatic start moment is set only when none exists and `fust_stock_mutations` is empty, because existing shells must choose their own start.