@fayz-ai/plugin-inventory 0.14.1 → 0.15.1

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 (57) hide show
  1. package/dist/data/registries.d.ts.map +1 -1
  2. package/dist/data/supabase.d.ts.map +1 -1
  3. package/dist/data/tables.d.ts +3 -1
  4. package/dist/data/tables.d.ts.map +1 -1
  5. package/dist/data/types.d.ts +41 -1
  6. package/dist/data/types.d.ts.map +1 -1
  7. package/dist/index.js +3346 -901
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/recipe-cost.d.ts +8 -2
  10. package/dist/lib/recipe-cost.d.ts.map +1 -1
  11. package/dist/lib/recipe-units.d.ts +26 -0
  12. package/dist/lib/recipe-units.d.ts.map +1 -0
  13. package/dist/lib/setup-guides.d.ts.map +1 -1
  14. package/dist/locales/en.d.ts.map +1 -1
  15. package/dist/locales/pt-BR.d.ts.map +1 -1
  16. package/dist/migrations/index.d.ts +2 -0
  17. package/dist/migrations/index.d.ts.map +1 -1
  18. package/dist/types.d.ts +156 -0
  19. package/dist/types.d.ts.map +1 -1
  20. package/dist/views/GapScreens.d.ts +0 -10
  21. package/dist/views/GapScreens.d.ts.map +1 -1
  22. package/dist/views/InventoryPage.d.ts.map +1 -1
  23. package/dist/views/ProductComplementsTab.d.ts +7 -0
  24. package/dist/views/ProductComplementsTab.d.ts.map +1 -0
  25. package/dist/views/ProductDetailView.d.ts.map +1 -1
  26. package/dist/views/ProductRecipeTab.d.ts +7 -3
  27. package/dist/views/ProductRecipeTab.d.ts.map +1 -1
  28. package/dist/views/RecipesView.d.ts +3 -5
  29. package/dist/views/RecipesView.d.ts.map +1 -1
  30. package/dist/views/productEntity.d.ts.map +1 -1
  31. package/dist/views/recipe/GenerateImageDialog.d.ts +9 -0
  32. package/dist/views/recipe/GenerateImageDialog.d.ts.map +1 -0
  33. package/dist/views/recipe/IngredientCostDialog.d.ts +10 -0
  34. package/dist/views/recipe/IngredientCostDialog.d.ts.map +1 -0
  35. package/dist/views/recipe/QuickIngredientDialog.d.ts +14 -0
  36. package/dist/views/recipe/QuickIngredientDialog.d.ts.map +1 -0
  37. package/dist/views/recipe/RecipeAiDialog.d.ts +10 -0
  38. package/dist/views/recipe/RecipeAiDialog.d.ts.map +1 -0
  39. package/dist/views/recipe/RecipeEditor.d.ts +8 -0
  40. package/dist/views/recipe/RecipeEditor.d.ts.map +1 -0
  41. package/dist/views/recipe/SelectProductDialog.d.ts +12 -0
  42. package/dist/views/recipe/SelectProductDialog.d.ts.map +1 -0
  43. package/dist/views/recipe/TransformIntermediateDialog.d.ts +15 -0
  44. package/dist/views/recipe/TransformIntermediateDialog.d.ts.map +1 -0
  45. package/dist/views/recipe/exportRecipesXlsx.d.ts +3 -0
  46. package/dist/views/recipe/exportRecipesXlsx.d.ts.map +1 -0
  47. package/dist/views/recipe/printRecipe.d.ts +8 -0
  48. package/dist/views/recipe/printRecipe.d.ts.map +1 -0
  49. package/dist/views/recipe/shared.d.ts +12 -0
  50. package/dist/views/recipe/shared.d.ts.map +1 -0
  51. package/package.json +4 -4
  52. package/dist/components/RecipeGapsPanel.d.ts +0 -14
  53. package/dist/components/RecipeGapsPanel.d.ts.map +0 -1
  54. package/dist/views/RecipeDetailView.d.ts +0 -6
  55. package/dist/views/RecipeDetailView.d.ts.map +0 -1
  56. package/dist/views/RecipeFormView.d.ts +0 -7
  57. package/dist/views/RecipeFormView.d.ts.map +0 -1
@@ -1,6 +1,8 @@
1
1
  import type { IngredientCostBasis } from '../types';
2
- /** Above this the dish eats the margin — the line the legacy app drew. */
3
- export declare const CMV_ALERT_THRESHOLD = 35;
2
+ /** Above this the dish eats the margin (the legacy app drew it at 35; the owner set 65). */
3
+ export declare const CMV_ALERT_THRESHOLD = 65;
4
+ /** Below this the dish is healthy — food-service practice puts a good CMV at 25–33%. */
5
+ export declare const CMV_GOOD_THRESHOLD = 33;
4
6
  export interface CostableLine {
5
7
  quantity: number;
6
8
  costBasis?: IngredientCostBasis | null;
@@ -19,4 +21,8 @@ export declare function recipeCost(lines: CostableLine[]): number;
19
21
  /** Cost as a percentage of the sale price. Null when there is no price to divide by. */
20
22
  export declare function cmvPercent(cost: number, salePrice?: number | null): number | null;
21
23
  export declare function isCmvHigh(cmv: number | null | undefined): boolean;
24
+ export type CmvBand = 'good' | 'attention' | 'high';
25
+ export declare function cmvBand(cmv: number | null | undefined): CmvBand | null;
26
+ /** Text colour for a CMV figure; the middle band stays neutral. */
27
+ export declare const CMV_TONE: Record<CmvBand, string>;
22
28
  //# sourceMappingURL=recipe-cost.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipe-cost.d.ts","sourceRoot":"","sources":["../../src/lib/recipe-cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAwBnD,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAA;IACP,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;IAChB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,MAAM,CAM7E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAK7E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAExD;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIjF;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEjE"}
1
+ {"version":3,"file":"recipe-cost.d.ts","sourceRoot":"","sources":["../../src/lib/recipe-cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAwBnD,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,wFAAwF;AACxF,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAEpC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAA;IACP,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;IAChB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,MAAM,CAM7E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAK7E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAExD;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIjF;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEjE;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;AAEnD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAGtE;AAED,mEAAmE;AACnE,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAqE,CAAA"}
@@ -0,0 +1,26 @@
1
+ export interface UnitLike {
2
+ id: string;
3
+ name: string;
4
+ abbreviation: string;
5
+ }
6
+ export type YieldMode = 'portion' | 'batch';
7
+ type Family = 'mass' | 'volume';
8
+ /** Stabilises conversion floats (0.07 × 1000 = 70.00000000000001). */
9
+ export declare const roundSmart: (v: number) => number;
10
+ export declare function unitFamily(abbr?: string | null): {
11
+ family: Family;
12
+ toBase: number;
13
+ };
14
+ export declare function sameFamilyUnits<U extends UnitLike>(all: U[], baseAbbr?: string | null): U[];
15
+ export declare function convertUnit(value: number, fromAbbr?: string | null, toAbbr?: string | null): number | null;
16
+ /**
17
+ * Reading unit for a base value: the largest family unit where the number is
18
+ * ≥ 1 (0,08 kg → g). Null when the base already reads well.
19
+ */
20
+ export declare function bestDisplayUnit<U extends UnitLike>(valueInBase: number, baseAbbr: string | null | undefined, candidates: U[]): U | null;
21
+ /** Yield in the product's base unit (2.400 g of a product counted in kg = 2,4). */
22
+ export declare function yieldInBase(yieldQty: number, yieldAbbr?: string | null, productAbbr?: string | null): number;
23
+ /** Cost of ONE unit of the product: portion = the sum; batch = sum ÷ yield. */
24
+ export declare function costPerUnit(totalCost: number, mode: YieldMode | null | undefined, yieldBase: number): number;
25
+ export {};
26
+ //# sourceMappingURL=recipe-units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-units.d.ts","sourceRoot":"","sources":["../../src/lib/recipe-units.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAE3C,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;AAa/B,sEAAsE;AACtE,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,KAAG,MAAkC,CAAA;AAEzE,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;YAbA,MAAM;YAAU,MAAM;EAepE;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,CAI3F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAK1G;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAWvI;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAK5G;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG5G"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup-guides.d.ts","sourceRoot":"","sources":["../../src/lib/setup-guides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AA2OlD,eAAO,MAAM,oBAAoB,EAAE,aAAa,EAO/C,CAAA"}
1
+ {"version":3,"file":"setup-guides.d.ts","sourceRoot":"","sources":["../../src/lib/setup-guides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AA8PlD,eAAO,MAAM,oBAAoB,EAAE,aAAa,EAO/C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyoBrC,CAAA"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAs0BrC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../src/locales/pt-BR.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyoBvC,CAAA"}
1
+ {"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../src/locales/pt-BR.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAs0BvC,CAAA"}
@@ -22,6 +22,8 @@ export declare const MIGRATION_020_O_PRODUTO_E_VARIAS_COISAS_AO_MESMO_TEMPO = "-
22
22
  export declare const MIGRATION_021_O_RAZAO_DIZ_DE_ONDE_VEIO = "-- ---------------------------------------------------------------------------\n-- O raz\u00E3o de estoque diz de onde veio, e a tela consegue abrir a nota.\n-- ---------------------------------------------------------------------------\n-- Comparando uma entrada migrada do V1 com uma que a V2 acabou de gravar:\n--\n-- V1 reason = \u00ABEntrada via DANFE NF-e 5411455\u00BB document_number = NULL\n-- V2 reason = NULL document_number = \u00ABNF-e 4693\u00BB\n--\n-- A tela de Movimenta\u00E7\u00F5es mostra o MOTIVO como legenda debaixo do produto, e \u00E9 a\n-- resposta para a pergunta n\u00BA 1 do FLOW.md do V1 \u2014 \u00ABde onde vieram essas entradas\n-- que eu n\u00E3o lancei?\u00BB. Nas linhas novas ela estava escrevendo \u00ABSem motivo\n-- registrado\u00BB sobre uma entrada que tinha motivo: a nota fiscal.\n--\n-- Duas causas, as duas aqui:\n--\n-- \u2460 `inventory_receive` NUNCA GRAVOU `reason`. A coluna n\u00E3o estava na lista do\n-- INSERT. O chamador at\u00E9 mandava a frase no cabe\u00E7alho (`notes`), mas o\n-- `coalesce(v_ln.notes, v_doc->>'notes')` d\u00E1 a vez \u00E0 anota\u00E7\u00E3o DA LINHA, que\n-- toda entrada de nota preenche com a descri\u00E7\u00E3o do item. A frase nunca\n-- chegava. Agora existe uma chave pr\u00F3pria: `reason` no cabe\u00E7alho, e nada muda\n-- para quem n\u00E3o a manda \u2014 continua NULL, como hoje.\n--\n-- \u2461 A VIEW ESCONDIA O CAMINHO DE VOLTA. `v_stock_movements` n\u00E3o expunha\n-- `document_type` nem `operation_id`, que s\u00E3o o que diz \u00ABisto \u00E9 uma NF-e\u00BB e\n-- \u00ABfoi esta opera\u00E7\u00E3o\u00BB. Sem eles a tela tem o n\u00FAmero da nota escrito e nenhum\n-- jeito de abri-la: `plg_fiscalbr_inbox_documents.inventory_operation_id`\n-- aponta para a mesma opera\u00E7\u00E3o, e \u00E9 por ali que o link se faz.\n--\n-- De quebra, tr\u00EAs colunas que o V1 mostra e a V2 n\u00E3o tinha como mostrar: a\n-- UNIDADE junto da quantidade (o V1 escreve \u00AB12 SR\u00BB, \u00AB100 UN\u00BB, e a V2 escrevia s\u00F3\n-- \u00AB12\u00BB), e o NOME do fornecedor em vez do uuid.\n--\n-- `security_invoker=true` fica: sem ele a view l\u00EA com os direitos de quem a\n-- criou, e uma view de movimento sem invoker \u00E9 vazamento entre contas.\n-- ---------------------------------------------------------------------------\n\nCREATE OR REPLACE VIEW public.v_stock_movements\nWITH (security_invoker = true) AS\n SELECT sm.id,\n sm.tenant_id,\n sm.product_id,\n sm.quantity,\n sm.kind AS movement_type,\n sm.unit_cost,\n sm.total_cost,\n sm.source_location_id AS stock_location_id,\n sm.destination_location_id,\n sm.supplier_id,\n sm.document_number,\n sm.reason,\n sm.notes,\n sm.movement_date,\n sm.user_id,\n sm.batch_number,\n sm.expiration_date,\n sm.metadata,\n sm.created_at,\n p.name AS product_name,\n p.sku AS product_sku,\n sl.name AS stock_location_name,\n dl.name AS destination_location_name,\n -- NO FIM, e n\u00E3o no meio: `CREATE OR REPLACE VIEW` s\u00F3 sabe ACRESCENTAR coluna.\n -- Inserir uma antes de `product_name` faz o Postgres entender que a coluna\n -- est\u00E1 sendo RENOMEADA, e ele recusa \u2014 \u00ABcannot change name of view column\u00BB.\n sm.document_type,\n sm.operation_id,\n sm.measurement_unit_id,\n mu.abbreviation AS measurement_unit_abbreviation,\n sup.name AS supplier_name\n FROM plg_inventory_stock_movements sm\n LEFT JOIN products p ON p.id = sm.product_id\n LEFT JOIN plg_inventory_stock_locations sl ON sl.id = sm.source_location_id\n LEFT JOIN plg_inventory_stock_locations dl ON dl.id = sm.destination_location_id\n LEFT JOIN plg_inventory_measurement_units mu ON mu.id = sm.measurement_unit_id\n LEFT JOIN people sup ON sup.id = sm.supplier_id;\n\nCOMMENT ON VIEW public.v_stock_movements IS\n 'O raz\u00E3o de estoque para a tela: movimento + nome do produto, do local, da unidade e do fornecedor, mais document_type/operation_id para a linha conseguir abrir o documento que a originou.';\n\n-- \u2500\u2500 `inventory_receive` passa a gravar o motivo \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n-- Corpo igual ao que est\u00E1 no cluster, com `reason` a mais. Reescrever de mem\u00F3ria\n-- \u00E9 como se perde uma regra; isto \u00E9 o texto real com duas linhas trocadas.\n\nCREATE OR REPLACE FUNCTION public.inventory_receive(p_location uuid, p_lines jsonb, p_document jsonb DEFAULT '{}'::jsonb, p_idempotency_key text DEFAULT NULL::text)\n RETURNS jsonb\n LANGUAGE plpgsql\n SECURITY DEFINER\n SET search_path TO ''\nAS $function$\nDECLARE\n v_tenant uuid := app.inventory_require_tenant();\n v_key text := coalesce(nullif(btrim(p_idempotency_key), ''), 'receive:' || gen_random_uuid()::text);\n v_op record; v_unit uuid; v_line jsonb; v_ln record; v_no integer := 0; v_id uuid;\n v_movements jsonb := '[]'::jsonb; v_positions jsonb := '[]'::jsonb;\n v_doc jsonb := coalesce(p_document, '{}'::jsonb); v_supplier uuid; v_date date;\nBEGIN\n PERFORM app.inventory_check_lines(p_lines);\n v_unit := app.inventory_authorize_location(v_tenant, p_location, 'inventory.create');\n BEGIN\n v_supplier := (v_doc->>'supplier_id')::uuid;\n v_date := (v_doc->>'date')::date;\n EXCEPTION WHEN OTHERS THEN\n RAISE EXCEPTION 'inventory: invalid document: %', SQLERRM USING ERRCODE = '22023';\n END;\n IF v_supplier IS NOT NULL AND NOT EXISTS (SELECT 1 FROM public.people s WHERE s.id = v_supplier AND s.tenant_id = v_tenant) THEN\n RAISE EXCEPTION 'inventory: supplier % not found in this tenant', v_supplier USING ERRCODE = '22023';\n END IF;\n\n SELECT * INTO v_op FROM app.inventory_begin_operation(v_tenant, 'receive', v_key,\n jsonb_build_object('location', p_location, 'lines', p_lines, 'document', v_doc));\n IF v_op.existing IS NOT NULL THEN RETURN v_op.existing; END IF;\n\n FOR v_line IN SELECT * FROM jsonb_array_elements(p_lines) LOOP\n v_no := v_no + 1;\n SELECT * INTO v_ln FROM app.inventory_parse_line(v_tenant, v_line, 'positive');\n INSERT INTO public.plg_inventory_stock_movements\n (tenant_id, product_id, variant_id, kind, quantity, unit_cost, source_location_id, batch_number, expiration_date, measurement_unit_id,\n supplier_id, document_type, document_number, notes, reason, movement_date, idempotency_key, line_no, operation_id, metadata)\n VALUES\n (v_tenant, v_ln.product_id, v_ln.variant_id, 'in', v_ln.quantity, coalesce(v_ln.unit_cost, 0), p_location, v_ln.batch_number, v_ln.expiration_date, v_ln.measurement_unit_id,\n v_supplier, coalesce(v_doc->>'type', 'manual'), v_doc->>'ref', coalesce(v_ln.notes, v_doc->>'notes'),\n -- O MOTIVO, que \u00E9 do chamador e n\u00E3o do raz\u00E3o. Ver a migration.\n nullif(v_doc->>'reason', ''), coalesce(v_date, current_date),\n v_key, v_no, v_op.op_id, v_ln.declared)\n RETURNING id INTO v_id;\n v_movements := v_movements || app.inventory_movement_json(v_id);\n v_positions := v_positions || app.inventory_position_json(v_tenant, v_ln.product_id, p_location, v_ln.batch_number, v_ln.expiration_date);\n END LOOP;\n\n RETURN app.inventory_finish_operation(v_tenant, v_op.op_id, 'receive', v_key,\n jsonb_build_object('operation_id', v_op.op_id, 'kind', 'receive', 'idempotency_key', v_key,\n 'location_id', p_location, 'unit_id', v_unit, 'movements', v_movements, 'positions', v_positions),\n jsonb_build_object('location_id', p_location, 'unit_id', v_unit, 'lines', v_no, 'document_type', coalesce(v_doc->>'type', 'manual')));\nEND $function$;\n";
23
23
  export declare const MIGRATION_022_RECEBER_ESTOQUE_VOLTA_A_FUNCIONAR = "-- ---------------------------------------------------------------------------\n-- 022 \u2014 receber estoque volta a funcionar.\n--\n-- A 021 passou a gravar o `reason` em `inventory_receive` \u2014 e, na mesma linha,\n-- acrescentou `variant_id`. Esse campo n\u00E3o existe de dois jeitos:\n--\n-- \u00B7 `plg_inventory_stock_movements` N\u00C3O tem a coluna `variant_id` na cadeia\n-- deste plugin (s\u00F3 `reason`, desde a baseline). Num banco do zero o INSERT\n-- nomeia coluna inexistente.\n-- \u00B7 `app.inventory_parse_line` N\u00C3O devolve `variant_id` \u2014 os OUT dela s\u00E3o\n-- product_id, quantity, unit_cost, batch_number, expiration_date,\n-- measurement_unit_id, declared e notes. Ent\u00E3o `v_ln.variant_id` tamb\u00E9m\n-- n\u00E3o resolve nos clusters onde algu\u00E9m criou a coluna por fora.\n--\n-- Nenhum dos dois erros aparece ao CRIAR a fun\u00E7\u00E3o: o corpo de uma plpgsql s\u00F3 \u00E9\n-- analisado na primeira chamada. O resultado \u00E9 que RECEBER ESTOQUE estava\n-- quebrado \u2014 em produ\u00E7\u00E3o, onde a 021 j\u00E1 foi aplicada, e no banco de testes.\n-- Quem pegou foi a su\u00EDte pgTAP do invent\u00E1rio, com 14 asser\u00E7\u00F5es vermelhas; e\n-- ningu\u00E9m tinha visto porque a cadeia morria l\u00E1 na db/162, antes de chegar nos\n-- testes.\n--\n-- Esta migration rep\u00F5e a fun\u00E7\u00E3o SEM `variant_id`. O `reason`, que \u00E9 o motivo\n-- de existir da 021, fica. Variante de produto \u00E9 outra feature, e quando\n-- chegar vai precisar de coluna na cadeia e de sa\u00EDda na `parse_line` \u2014 as duas\n-- coisas, n\u00E3o meia.\n--\n-- N\u00E3o reescreve a 021: ela j\u00E1 est\u00E1 no ledger dos clusters, e arquivo aplicado\n-- n\u00E3o se edita. Idempotente.\n-- ---------------------------------------------------------------------------\n\nCREATE OR REPLACE FUNCTION public.inventory_receive(p_location uuid, p_lines jsonb, p_document jsonb DEFAULT '{}'::jsonb, p_idempotency_key text DEFAULT NULL::text)\n RETURNS jsonb\n LANGUAGE plpgsql\n SECURITY DEFINER\n SET search_path TO ''\nAS $function$\nDECLARE\n v_tenant uuid := app.inventory_require_tenant();\n v_key text := coalesce(nullif(btrim(p_idempotency_key), ''), 'receive:' || gen_random_uuid()::text);\n v_op record; v_unit uuid; v_line jsonb; v_ln record; v_no integer := 0; v_id uuid;\n v_movements jsonb := '[]'::jsonb; v_positions jsonb := '[]'::jsonb;\n v_doc jsonb := coalesce(p_document, '{}'::jsonb); v_supplier uuid; v_date date;\nBEGIN\n PERFORM app.inventory_check_lines(p_lines);\n v_unit := app.inventory_authorize_location(v_tenant, p_location, 'inventory.create');\n BEGIN\n v_supplier := (v_doc->>'supplier_id')::uuid;\n v_date := (v_doc->>'date')::date;\n EXCEPTION WHEN OTHERS THEN\n RAISE EXCEPTION 'inventory: invalid document: %', SQLERRM USING ERRCODE = '22023';\n END;\n IF v_supplier IS NOT NULL AND NOT EXISTS (SELECT 1 FROM public.people s WHERE s.id = v_supplier AND s.tenant_id = v_tenant) THEN\n RAISE EXCEPTION 'inventory: supplier % not found in this tenant', v_supplier USING ERRCODE = '22023';\n END IF;\n\n SELECT * INTO v_op FROM app.inventory_begin_operation(v_tenant, 'receive', v_key,\n jsonb_build_object('location', p_location, 'lines', p_lines, 'document', v_doc));\n IF v_op.existing IS NOT NULL THEN RETURN v_op.existing; END IF;\n\n FOR v_line IN SELECT * FROM jsonb_array_elements(p_lines) LOOP\n v_no := v_no + 1;\n SELECT * INTO v_ln FROM app.inventory_parse_line(v_tenant, v_line, 'positive');\n INSERT INTO public.plg_inventory_stock_movements\n (tenant_id, product_id, kind, quantity, unit_cost, source_location_id, batch_number, expiration_date, measurement_unit_id,\n supplier_id, document_type, document_number, notes, reason, movement_date, idempotency_key, line_no, operation_id, metadata)\n VALUES\n (v_tenant, v_ln.product_id, 'in', v_ln.quantity, coalesce(v_ln.unit_cost, 0), p_location, v_ln.batch_number, v_ln.expiration_date, v_ln.measurement_unit_id,\n v_supplier, coalesce(v_doc->>'type', 'manual'), v_doc->>'ref', coalesce(v_ln.notes, v_doc->>'notes'),\n -- O MOTIVO, que \u00E9 do chamador e n\u00E3o do raz\u00E3o. Ver a migration.\n nullif(v_doc->>'reason', ''), coalesce(v_date, current_date),\n v_key, v_no, v_op.op_id, v_ln.declared)\n RETURNING id INTO v_id;\n v_movements := v_movements || app.inventory_movement_json(v_id);\n v_positions := v_positions || app.inventory_position_json(v_tenant, v_ln.product_id, p_location, v_ln.batch_number, v_ln.expiration_date);\n END LOOP;\n\n RETURN app.inventory_finish_operation(v_tenant, v_op.op_id, 'receive', v_key,\n jsonb_build_object('operation_id', v_op.op_id, 'kind', 'receive', 'idempotency_key', v_key,\n 'location_id', p_location, 'unit_id', v_unit, 'movements', v_movements, 'positions', v_positions),\n jsonb_build_object('location_id', p_location, 'unit_id', v_unit, 'lines', v_no, 'document_type', coalesce(v_doc->>'type', 'manual')));\nEND $function$;\n";
24
24
  export declare const MIGRATION_023_A_RECEITA_SE_ESCREVE_COM_PERMISSAO = "-- ---------------------------------------------------------------------------\n-- 023 \u2014 a receita se escreve com permiss\u00E3o.\n--\n-- The baseline kept the pre-authz insert/update/delete policies on recipes and\n-- product categories next to the *_authz_* ones. Permissive policies are ORed,\n-- so `tenant_id IN user_tenant_ids()` let any member (viewer, staff, kitchen)\n-- write what inventory.create/edit/delete is supposed to gate.\n--\n-- The old SELECT policies stay on purpose: agenda's service kit\n-- (getServiceKit) reads recipes as reception/professional, who hold no\n-- inventory.read. Narrowing reads is a separate decision.\n-- ---------------------------------------------------------------------------\n\nDROP POLICY IF EXISTS plg_inventory_recipes_insert ON public.plg_inventory_recipes;\nDROP POLICY IF EXISTS plg_inventory_recipes_update ON public.plg_inventory_recipes;\nDROP POLICY IF EXISTS plg_inventory_recipes_delete ON public.plg_inventory_recipes;\n\nDROP POLICY IF EXISTS plg_inventory_product_categories_insert ON public.plg_inventory_product_categories;\nDROP POLICY IF EXISTS plg_inventory_product_categories_update ON public.plg_inventory_product_categories;\nDROP POLICY IF EXISTS plg_inventory_product_categories_delete ON public.plg_inventory_product_categories;\n";
25
+ export declare const MIGRATION_024_A_CATEGORIA_DO_PRODUTO_E_DO_CATALOGO = "-- ---------------------------------------------------------------------------\n-- 024 \u2014 a categoria do produto \u00E9 do cat\u00E1logo.\n--\n-- A product category is the `categories` archetype with kind 'good' (the\n-- catalog contract, and what products.category_id already points to). This\n-- plugin kept a private copy, plg_inventory_product_categories, so the stock\n-- screens read a table nobody else writes: imported and catalog-created\n-- categories never showed up there, and a product could carry two different\n-- categories at once.\n--\n-- The product's category is products.category_id. details.category_id was a\n-- second answer to the same question; it is copied into products where\n-- products had none, and the plugin stops reading or writing it.\n--\n-- Additive and idempotent: rows of the private table are folded into\n-- categories under the same id, then the two FKs move. The private table is\n-- left in place, unreferenced, so this step destroys nothing; dropping it is a\n-- later, reported step.\n-- ---------------------------------------------------------------------------\n\nDO $$\nBEGIN\n IF to_regclass('public.plg_inventory_product_categories') IS NULL THEN\n RETURN;\n END IF;\n\n -- Parents first is not needed: parent_id is written in a second pass.\n INSERT INTO public.categories (id, tenant_id, kind, name, is_active, unit_id, owner_id, created_at, updated_at)\n SELECT c.id, c.tenant_id, 'good', c.name, c.is_active, c.unit_id, c.owner_id, c.created_at, c.updated_at\n FROM public.plg_inventory_product_categories c\n ON CONFLICT (id) DO NOTHING;\n\n UPDATE public.categories k\n SET parent_id = c.parent_id\n FROM public.plg_inventory_product_categories c\n WHERE k.id = c.id AND k.parent_id IS NULL AND c.parent_id IS NOT NULL;\nEND $$;\n\nUPDATE public.products p\n SET category_id = d.category_id\n FROM public.plg_inventory_product_details d\n WHERE d.product_id = p.id AND p.category_id IS NULL AND d.category_id IS NOT NULL\n AND EXISTS (SELECT 1 FROM public.categories c WHERE c.id = d.category_id AND c.tenant_id = p.tenant_id);\n\nALTER TABLE public.plg_inventory_product_details\n DROP CONSTRAINT IF EXISTS plg_inventory_product_details_category_id_fkey;\nALTER TABLE public.plg_inventory_product_details\n ADD CONSTRAINT plg_inventory_product_details_category_id_fkey\n FOREIGN KEY (category_id) REFERENCES public.categories(id) ON DELETE SET NULL;\n\nALTER TABLE public.plg_inventory_count_sessions\n DROP CONSTRAINT IF EXISTS plg_inventory_count_sessions_category_id_fkey;\nALTER TABLE public.plg_inventory_count_sessions\n ADD CONSTRAINT plg_inventory_count_sessions_category_id_fkey\n FOREIGN KEY (category_id) REFERENCES public.categories(id) ON DELETE SET NULL;\n";
26
+ export declare const MIGRATION_025_A_FICHA_TECNICA_POR_ESTACAO = "-- ---------------------------------------------------------------------------\n-- 025 \u2014 the technical sheet, by station.\n--\n-- What the V1 sheet has and the V2 tables did not:\n-- * yield_mode: portion (the sheet IS one unit sold) vs batch (the sheet\n-- produces yield_quantity). Same units, opposite cost math \u2014 not inferable.\n-- * the station of each component (recipe_groups.station_id).\n-- * the reading unit of an ingredient line (70 mL of an oil counted in L).\n-- * production outputs with cost split (fil\u00E9 + aparas + pele).\n-- And one write path: inventory_save_recipe() replaces groups, lines and\n-- outputs in ONE transaction. V1 deleted and re-inserted without one, and a\n-- failed insert left the sheet empty (V1-082).\n--\n-- Idempotent.\n-- ---------------------------------------------------------------------------\n\n-- 1. Portion \u00D7 batch -------------------------------------------------------\nALTER TABLE public.plg_inventory_recipes\n ADD COLUMN IF NOT EXISTS yield_mode text;\n\n-- Same backfill rule as V1 (20261015130000): batch when the product is an\n-- intermediate or is itself an ingredient of another sheet.\nUPDATE public.plg_inventory_recipes r\n SET yield_mode = CASE\n WHEN EXISTS (SELECT 1 FROM public.plg_inventory_product_details d\n WHERE d.product_id = r.product_id AND d.is_intermediate) THEN 'batch'\n WHEN EXISTS (SELECT 1 FROM public.plg_inventory_recipe_ingredients i\n WHERE i.product_id = r.product_id AND i.tenant_id = r.tenant_id) THEN 'batch'\n ELSE 'portion' END\n WHERE r.yield_mode IS NULL;\n\nALTER TABLE public.plg_inventory_recipes ALTER COLUMN yield_mode SET DEFAULT 'portion';\nALTER TABLE public.plg_inventory_recipes ALTER COLUMN yield_mode SET NOT NULL;\n\nDO $$ BEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipes_yield_mode_check') THEN\n ALTER TABLE public.plg_inventory_recipes ADD CONSTRAINT plg_inventory_recipes_yield_mode_check\n CHECK (yield_mode IN ('portion', 'batch'));\n END IF;\nEND $$;\n\nCOMMENT ON COLUMN public.plg_inventory_recipes.yield_mode IS\n 'portion = the sheet is 1 unit of the product (yield only describes); batch = the sheet produces yield_quantity (cost divides). V1: recipes.yield_mode.';\n\n-- 2. Station of a component -----------------------------------------------\nALTER TABLE public.plg_inventory_recipe_groups\n ADD COLUMN IF NOT EXISTS station_id uuid;\n\nDO $$ BEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_groups_station_fkey') THEN\n ALTER TABLE public.plg_inventory_recipe_groups ADD CONSTRAINT plg_inventory_recipe_groups_station_fkey\n FOREIGN KEY (station_id) REFERENCES public.plg_inventory_production_stations(id) ON DELETE SET NULL;\n END IF;\nEND $$;\n\nCOMMENT ON COLUMN public.plg_inventory_recipe_groups.station_id IS\n 'Esta\u00E7\u00E3o de Produ\u00E7\u00E3o do componente. V1: recipe_groups.production_station_id.';\n\n-- 3. Reading unit of an ingredient line -----------------------------------\n-- quantity stays in the ingredient''s BASE unit (unit_id); this is only how\n-- the line is read and typed.\nALTER TABLE public.plg_inventory_recipe_ingredients\n ADD COLUMN IF NOT EXISTS display_unit_id uuid;\n\nDO $$ BEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_ingredients_display_unit_fkey') THEN\n ALTER TABLE public.plg_inventory_recipe_ingredients ADD CONSTRAINT plg_inventory_recipe_ingredients_display_unit_fkey\n FOREIGN KEY (display_unit_id) REFERENCES public.plg_inventory_measurement_units(id) ON DELETE SET NULL;\n END IF;\nEND $$;\n\n-- 4. Production outputs ---------------------------------------------------\nCREATE TABLE IF NOT EXISTS public.plg_inventory_recipe_outputs (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n unit_id uuid,\n recipe_id uuid NOT NULL,\n product_id uuid NOT NULL,\n output_type text DEFAULT 'main' NOT NULL,\n expected_quantity numeric(14,4) NOT NULL,\n measurement_unit_id uuid,\n cost_share numeric(9,4),\n display_order integer DEFAULT 0 NOT NULL,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL\n);\n\nCOMMENT ON TABLE public.plg_inventory_recipe_outputs IS\n 'Sa\u00EDdas da produ\u00E7\u00E3o de uma ficha (fil\u00E9 + aparas + pele). cost_share em branco em todas = rateio pelo valor de mercado; descarte n\u00E3o leva custo. V1: recipe_outputs.';\n\nDO $$ BEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_pkey') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_pkey PRIMARY KEY (id);\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_tenant_fkey') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_tenant_fkey\n FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_unit_fkey') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_unit_fkey\n FOREIGN KEY (tenant_id, unit_id) REFERENCES app.units(tenant_id, id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_recipe_fkey') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_recipe_fkey\n FOREIGN KEY (recipe_id) REFERENCES public.plg_inventory_recipes(id) ON DELETE CASCADE;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_product_fkey') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_product_fkey\n FOREIGN KEY (product_id) REFERENCES public.products(id);\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_uom_fkey') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_uom_fkey\n FOREIGN KEY (measurement_unit_id) REFERENCES public.plg_inventory_measurement_units(id) ON DELETE SET NULL;\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_type_check') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_type_check\n CHECK (output_type IN ('main', 'coproduct', 'byproduct', 'waste'));\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_qty_check') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_qty_check\n CHECK (expected_quantity > 0);\n END IF;\n IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'plg_inventory_recipe_outputs_share_check') THEN\n ALTER TABLE ONLY public.plg_inventory_recipe_outputs ADD CONSTRAINT plg_inventory_recipe_outputs_share_check\n CHECK (cost_share IS NULL OR (cost_share >= 0 AND cost_share <= 100));\n END IF;\nEND $$;\n\nCREATE INDEX IF NOT EXISTS plg_inventory_recipe_outputs_recipe_idx\n ON public.plg_inventory_recipe_outputs USING btree (tenant_id, recipe_id, display_order);\n\nALTER TABLE public.plg_inventory_recipe_outputs ENABLE ROW LEVEL SECURITY;\nALTER TABLE public.plg_inventory_recipe_outputs FORCE ROW LEVEL SECURITY;\n\nGRANT SELECT, INSERT, UPDATE, DELETE ON TABLE public.plg_inventory_recipe_outputs TO authenticated;\nGRANT ALL ON TABLE public.plg_inventory_recipe_outputs TO service_role;\n\nDROP TRIGGER IF EXISTS plg_inventory_recipe_outputs_updated_at ON public.plg_inventory_recipe_outputs;\nCREATE TRIGGER plg_inventory_recipe_outputs_updated_at BEFORE UPDATE ON public.plg_inventory_recipe_outputs\n FOR EACH ROW EXECUTE FUNCTION public.handle_updated_at();\n\nDROP POLICY IF EXISTS plg_inventory_recipe_outputs_authz_select ON public.plg_inventory_recipe_outputs;\nCREATE POLICY plg_inventory_recipe_outputs_authz_select ON public.plg_inventory_recipe_outputs\n FOR SELECT TO authenticated USING (\n tenant_id = (SELECT app.current_tenant_id())\n AND (unit_id IS NULL OR (SELECT app.has_unit(plg_inventory_recipe_outputs.unit_id)))\n AND (SELECT app.has_permission('inventory.read', plg_inventory_recipe_outputs.unit_id)));\n\nDROP POLICY IF EXISTS plg_inventory_recipe_outputs_authz_write ON public.plg_inventory_recipe_outputs;\nCREATE POLICY plg_inventory_recipe_outputs_authz_write ON public.plg_inventory_recipe_outputs\n FOR ALL TO authenticated USING (\n tenant_id = (SELECT app.current_tenant_id())\n AND (SELECT app.has_permission('inventory.edit', plg_inventory_recipe_outputs.unit_id)))\n WITH CHECK (\n tenant_id = (SELECT app.current_tenant_id())\n AND (SELECT app.has_permission('inventory.edit', plg_inventory_recipe_outputs.unit_id)));\n\n-- 5. Having a sheet = being produced ----------------------------------------\n-- V1 flips is_produced when the sheet is saved; sheets that crossed over\n-- before the flag existed never got it, so the list and the product tab\n-- did not see them.\nUPDATE public.plg_inventory_product_details d\n SET is_produced = true\n WHERE NOT d.is_produced\n AND EXISTS (SELECT 1 FROM public.plg_inventory_recipes r\n WHERE r.product_id = d.product_id AND r.is_active);\n\n-- 6. The one write path -----------------------------------------------------\n-- SECURITY INVOKER on purpose: every row goes through the same RLS the screen\n-- has (inventory.create / inventory.edit on the recipe''s unit).\nCREATE OR REPLACE FUNCTION public.inventory_save_recipe(p_recipe jsonb)\nRETURNS uuid\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ''\nAS $$\nDECLARE\n v_tenant uuid := app.current_tenant_id();\n v_id uuid := nullif(p_recipe->>'id', '')::uuid;\n v_product uuid := nullif(p_recipe->>'productId', '')::uuid;\n v_unit uuid;\n v_group jsonb;\n v_group_id uuid;\n v_line jsonb;\n v_out jsonb;\n v_gi int := 0;\n v_li int;\n v_oi int := 0;\n v_cost numeric := nullif(p_recipe->>'unitCost', '')::numeric;\nBEGIN\n IF v_tenant IS NULL THEN\n RAISE EXCEPTION 'no active tenant' USING ERRCODE = '42501';\n END IF;\n IF v_product IS NULL THEN\n RAISE EXCEPTION 'productId is required' USING ERRCODE = '22023';\n END IF;\n IF coalesce(trim(p_recipe->>'name'), '') = '' THEN\n RAISE EXCEPTION 'name is required' USING ERRCODE = '22023';\n END IF;\n\n IF v_id IS NULL THEN\n -- One active sheet per product: reuse the one already there.\n SELECT r.id INTO v_id FROM public.plg_inventory_recipes r\n WHERE r.tenant_id = v_tenant AND r.product_id = v_product AND r.is_active\n ORDER BY r.updated_at DESC LIMIT 1;\n END IF;\n\n IF v_id IS NULL THEN\n INSERT INTO public.plg_inventory_recipes\n (tenant_id, product_id, name, description, yield_quantity, yield_unit_id, yield_mode,\n preparation_time_minutes, instructions, is_active, unit_id, owner_id)\n VALUES\n (v_tenant, v_product, trim(p_recipe->>'name'), nullif(p_recipe->>'description', ''),\n coalesce(nullif(p_recipe->>'yieldQuantity', '')::numeric, 1),\n nullif(p_recipe->>'yieldUnitId', '')::uuid,\n coalesce(nullif(p_recipe->>'yieldMode', ''), 'portion'),\n nullif(p_recipe->>'preparationTimeMinutes', '')::int,\n nullif(p_recipe->>'instructions', ''), true,\n nullif(p_recipe->>'unitId', '')::uuid, auth.uid())\n RETURNING id, unit_id INTO v_id, v_unit;\n ELSE\n UPDATE public.plg_inventory_recipes SET\n name = trim(p_recipe->>'name'),\n description = nullif(p_recipe->>'description', ''),\n product_id = v_product,\n yield_quantity = coalesce(nullif(p_recipe->>'yieldQuantity', '')::numeric, 1),\n yield_unit_id = nullif(p_recipe->>'yieldUnitId', '')::uuid,\n yield_mode = coalesce(nullif(p_recipe->>'yieldMode', ''), 'portion'),\n preparation_time_minutes = nullif(p_recipe->>'preparationTimeMinutes', '')::int,\n instructions = nullif(p_recipe->>'instructions', ''),\n is_active = true,\n updated_at = now()\n WHERE id = v_id AND tenant_id = v_tenant\n RETURNING unit_id INTO v_unit;\n IF NOT FOUND THEN\n RAISE EXCEPTION 'recipe not found or not writable' USING ERRCODE = '42501';\n END IF;\n END IF;\n\n DELETE FROM public.plg_inventory_recipe_ingredients WHERE recipe_id = v_id AND tenant_id = v_tenant;\n DELETE FROM public.plg_inventory_recipe_groups WHERE recipe_id = v_id AND tenant_id = v_tenant;\n DELETE FROM public.plg_inventory_recipe_outputs WHERE recipe_id = v_id AND tenant_id = v_tenant;\n\n FOR v_group IN SELECT * FROM jsonb_array_elements(coalesce(p_recipe->'groups', '[]'::jsonb)) LOOP\n INSERT INTO public.plg_inventory_recipe_groups\n (tenant_id, unit_id, recipe_id, name, station_id, preparation_notes, estimated_minutes, display_order)\n VALUES\n (v_tenant, v_unit, v_id,\n coalesce(nullif(trim(v_group->>'name'), ''), 'Componente ' || (v_gi + 1)),\n nullif(v_group->>'stationId', '')::uuid,\n nullif(v_group->>'preparationNotes', ''),\n nullif(v_group->>'estimatedMinutes', '')::int,\n v_gi)\n RETURNING id INTO v_group_id;\n\n v_li := 0;\n FOR v_line IN SELECT * FROM jsonb_array_elements(coalesce(v_group->'ingredients', '[]'::jsonb)) LOOP\n -- unit_id on a line is the MEASUREMENT unit (base of the ingredient),\n -- not the house: the house of a line is its recipe's.\n INSERT INTO public.plg_inventory_recipe_ingredients\n (tenant_id, recipe_id, group_id, product_id, quantity, unit_id, display_unit_id, notes, display_order)\n VALUES\n (v_tenant, v_id, v_group_id, (v_line->>'productId')::uuid,\n (v_line->>'quantity')::numeric,\n nullif(v_line->>'unitId', '')::uuid,\n nullif(v_line->>'displayUnitId', '')::uuid,\n nullif(v_line->>'notes', ''), v_li);\n v_li := v_li + 1;\n END LOOP;\n v_gi := v_gi + 1;\n END LOOP;\n\n FOR v_out IN SELECT * FROM jsonb_array_elements(coalesce(p_recipe->'outputs', '[]'::jsonb)) LOOP\n INSERT INTO public.plg_inventory_recipe_outputs\n (tenant_id, unit_id, recipe_id, product_id, output_type, expected_quantity,\n measurement_unit_id, cost_share, display_order)\n VALUES\n (v_tenant, v_unit, v_id, (v_out->>'productId')::uuid,\n coalesce(nullif(v_out->>'outputType', ''), 'main'),\n (v_out->>'expectedQuantity')::numeric,\n nullif(v_out->>'measurementUnitId', '')::uuid,\n CASE WHEN v_out->>'outputType' = 'waste' THEN NULL\n ELSE nullif(v_out->>'costShare', '')::numeric END,\n v_oi);\n v_oi := v_oi + 1;\n END LOOP;\n\n -- Having a sheet = being produced; and the sheet's cost per unit becomes the\n -- product's cost \u2014 it is what another sheet reads when this one is its input.\n INSERT INTO public.plg_inventory_product_details (product_id, tenant_id, is_produced)\n VALUES (v_product, v_tenant, true)\n ON CONFLICT (product_id) DO UPDATE SET is_produced = true;\n\n IF v_cost IS NOT NULL AND v_cost > 0 THEN\n UPDATE public.products SET cost = round(v_cost, 4), updated_at = now()\n WHERE id = v_product AND tenant_id = v_tenant;\n END IF;\n\n RETURN v_id;\nEND;\n$$;\n\nREVOKE ALL ON FUNCTION public.inventory_save_recipe(jsonb) FROM PUBLIC, anon;\nGRANT EXECUTE ON FUNCTION public.inventory_save_recipe(jsonb) TO authenticated;\n";
25
27
  export declare const MIGRATIONS: Array<{
26
28
  id: string;
27
29
  sql: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,yn7NAy+GlC,CAAA;AAED,eAAO,MAAM,sDAAsD,g0bA+QlE,CAAA;AAED,eAAO,MAAM,uCAAuC,ymbAsRnD,CAAA;AAED,eAAO,MAAM,+CAA+C,+zNAmK3D,CAAA;AAED,eAAO,MAAM,4CAA4C,szYAsLxD,CAAA;AAED,eAAO,MAAM,mDAAmD,g5JA0E/D,CAAA;AAED,eAAO,MAAM,4CAA4C,60nBAuUxD,CAAA;AAED,eAAO,MAAM,kCAAkC,oxSA+L9C,CAAA;AAED,eAAO,MAAM,qDAAqD,6yCA0BjE,CAAA;AAED,eAAO,MAAM,uDAAuD,s+XA4KnE,CAAA;AAED,eAAO,MAAM,0CAA0C,gm4BA4atD,CAAA;AAED,eAAO,MAAM,wCAAwC,y43BAsgBpD,CAAA;AAED,eAAO,MAAM,sEAAsE,o1ZAmRlF,CAAA;AAED,eAAO,MAAM,gDAAgD,2uXAmQ5D,CAAA;AAED,eAAO,MAAM,yCAAyC,umXA6PrD,CAAA;AAED,eAAO,MAAM,6CAA6C,w9WA2PzD,CAAA;AAED,eAAO,MAAM,4CAA4C,k8XAoQxD,CAAA;AAED,eAAO,MAAM,8CAA8C,okPA4K1D,CAAA;AAED,eAAO,MAAM,qCAAqC,umWAqPjD,CAAA;AAED,eAAO,MAAM,oCAAoC,skQA0LhD,CAAA;AAED,eAAO,MAAM,sDAAsD,6ufAwTlE,CAAA;AAED,eAAO,MAAM,sCAAsC,onPAsIlD,CAAA;AAED,eAAO,MAAM,+CAA+C,o9JAiF3D,CAAA;AAED,eAAO,MAAM,gDAAgD,myCAoB5D,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAyBzD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,yn7NAy+GlC,CAAA;AAED,eAAO,MAAM,sDAAsD,g0bA+QlE,CAAA;AAED,eAAO,MAAM,uCAAuC,ymbAsRnD,CAAA;AAED,eAAO,MAAM,+CAA+C,+zNAmK3D,CAAA;AAED,eAAO,MAAM,4CAA4C,szYAsLxD,CAAA;AAED,eAAO,MAAM,mDAAmD,g5JA0E/D,CAAA;AAED,eAAO,MAAM,4CAA4C,60nBAuUxD,CAAA;AAED,eAAO,MAAM,kCAAkC,oxSA+L9C,CAAA;AAED,eAAO,MAAM,qDAAqD,6yCA0BjE,CAAA;AAED,eAAO,MAAM,uDAAuD,s+XA4KnE,CAAA;AAED,eAAO,MAAM,0CAA0C,gm4BA4atD,CAAA;AAED,eAAO,MAAM,wCAAwC,y43BAsgBpD,CAAA;AAED,eAAO,MAAM,sEAAsE,o1ZAmRlF,CAAA;AAED,eAAO,MAAM,gDAAgD,2uXAmQ5D,CAAA;AAED,eAAO,MAAM,yCAAyC,umXA6PrD,CAAA;AAED,eAAO,MAAM,6CAA6C,w9WA2PzD,CAAA;AAED,eAAO,MAAM,4CAA4C,k8XAoQxD,CAAA;AAED,eAAO,MAAM,8CAA8C,okPA4K1D,CAAA;AAED,eAAO,MAAM,qCAAqC,umWAqPjD,CAAA;AAED,eAAO,MAAM,oCAAoC,skQA0LhD,CAAA;AAED,eAAO,MAAM,sDAAsD,6ufAwTlE,CAAA;AAED,eAAO,MAAM,sCAAsC,onPAsIlD,CAAA;AAED,eAAO,MAAM,+CAA+C,o9JAiF3D,CAAA;AAED,eAAO,MAAM,gDAAgD,myCAoB5D,CAAA;AAED,eAAO,MAAM,kDAAkD,otFAuD9D,CAAA;AAED,eAAO,MAAM,yCAAyC,25eAgTrD,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CA2BzD,CAAA"}
package/dist/types.d.ts CHANGED
@@ -317,6 +317,8 @@ export interface Recipe {
317
317
  yieldQuantity: number;
318
318
  yieldUnitId?: string;
319
319
  yieldUnitName?: string;
320
+ /** portion = the sheet is one unit sold; batch = the sheet produces the yield. */
321
+ yieldMode?: 'portion' | 'batch';
320
322
  preparationTimeMinutes?: number;
321
323
  instructions?: string;
322
324
  isActive: boolean;
@@ -356,6 +358,8 @@ export interface RecipeIngredient {
356
358
  unitName?: string;
357
359
  displayOrder: number;
358
360
  notes?: string;
361
+ /** Reading unit of the line; quantity itself stays in the base unit. */
362
+ displayUnitId?: string;
359
363
  /** Optional stage of the recipe this ingredient belongs to. */
360
364
  groupId?: string;
361
365
  groupName?: string;
@@ -370,6 +374,7 @@ export interface RecipeGroup {
370
374
  preparationNotes?: string;
371
375
  displayOrder: number;
372
376
  estimatedMinutes?: number;
377
+ stationId?: string;
373
378
  tenantId: string;
374
379
  createdAt: string;
375
380
  updatedAt: string;
@@ -457,6 +462,157 @@ export interface CloseStockCountResult {
457
462
  /** True when the session was already closed — nothing was emitted again. */
458
463
  alreadyClosed: boolean;
459
464
  }
465
+ export type RecipeOutputType = 'main' | 'coproduct' | 'byproduct' | 'waste';
466
+ /** A product a sheet yields besides (or instead of) its own product. */
467
+ export interface RecipeOutput {
468
+ id?: string;
469
+ productId: string;
470
+ productName?: string;
471
+ outputType: RecipeOutputType;
472
+ expectedQuantity: number;
473
+ measurementUnitId?: string;
474
+ /** % of the order cost; null on every line = split by market value. */
475
+ costShare?: number | null;
476
+ }
477
+ export interface MeasurementUnit {
478
+ id: string;
479
+ name: string;
480
+ abbreviation: string;
481
+ }
482
+ export interface ProductionStation {
483
+ id: string;
484
+ name: string;
485
+ unitId?: string;
486
+ }
487
+ /** What an ingredient brings to a sheet line: its cost and its base unit. */
488
+ export interface IngredientInfo {
489
+ productId: string;
490
+ name: string;
491
+ /** Cost of one base unit — `products.cost`. */
492
+ cost: number;
493
+ /** The unit the stored quantity is in. Falls back to the unit the product
494
+ * already has on other sheet lines when the catalogue row carries none. */
495
+ baseUnitId?: string;
496
+ }
497
+ /** The whole sheet as the editor reads and writes it. */
498
+ export interface RecipeSheet {
499
+ id?: string;
500
+ productId: string;
501
+ name: string;
502
+ description?: string;
503
+ yieldQuantity: number;
504
+ yieldUnitId?: string;
505
+ yieldMode: 'portion' | 'batch';
506
+ preparationTimeMinutes?: number;
507
+ instructions?: string;
508
+ groups: RecipeSheetGroup[];
509
+ outputs: RecipeOutput[];
510
+ }
511
+ export interface RecipeSheetGroup {
512
+ name: string;
513
+ stationId?: string;
514
+ preparationNotes?: string;
515
+ estimatedMinutes?: number;
516
+ ingredients: RecipeSheetLine[];
517
+ }
518
+ export interface RecipeSheetLine {
519
+ productId: string;
520
+ /** In the ingredient's base unit. */
521
+ quantity: number;
522
+ unitId?: string;
523
+ displayUnitId?: string;
524
+ notes?: string;
525
+ }
526
+ /** One row of the Fichas Técnicas list: every produced product, sheet or not. */
527
+ export interface RecipeListRow {
528
+ productId: string;
529
+ productName: string;
530
+ imageUrl?: string;
531
+ categoryName?: string;
532
+ isForSale: boolean;
533
+ isIntermediate: boolean;
534
+ recipeId?: string;
535
+ description?: string;
536
+ ingredientCount: number;
537
+ yieldQuantity?: number;
538
+ yieldUnitAbbr?: string;
539
+ preparationTimeMinutes?: number;
540
+ /** Cost of the whole sheet (sum of lines). */
541
+ cost: number;
542
+ salePrice: number;
543
+ }
544
+ /** A whole sheet as the spreadsheet export lays it out. */
545
+ export interface RecipeExportSheet {
546
+ productId: string;
547
+ productName: string;
548
+ categoryName?: string;
549
+ salePrice: number;
550
+ /** False for a produced product still waiting for its sheet. */
551
+ hasSheet: boolean;
552
+ yieldQuantity?: number;
553
+ yieldUnitAbbr?: string;
554
+ preparationTimeMinutes?: number;
555
+ groups: Array<{
556
+ name: string;
557
+ lines: Array<{
558
+ ingredientId: string;
559
+ ingredientName: string;
560
+ ingredientSku?: string;
561
+ unitAbbr?: string;
562
+ quantity: number;
563
+ unitCost: number;
564
+ }>;
565
+ }>;
566
+ }
567
+ /** A product a sheet can be made for — sold, intermediate or already produced. */
568
+ export interface RecipeCandidate {
569
+ productId: string;
570
+ name: string;
571
+ imageUrl?: string;
572
+ categoryName?: string;
573
+ salePrice: number;
574
+ kind: 'sale' | 'intermediate' | 'produced';
575
+ hasRecipe: boolean;
576
+ }
577
+ export interface RecipeAiSuggestion {
578
+ yieldQuantity?: number;
579
+ yieldUnitId?: string;
580
+ preparationTimeMinutes?: number;
581
+ generalDescription?: string;
582
+ groups: Array<{
583
+ name: string;
584
+ stationId?: string;
585
+ preparationNotes?: string;
586
+ ingredients: Array<{
587
+ productId?: string;
588
+ productNameHint?: string;
589
+ quantity: number;
590
+ unitId?: string;
591
+ notes?: string;
592
+ }>;
593
+ }>;
594
+ }
595
+ export interface IngredientCostSuggestion {
596
+ suggestedPrice: number;
597
+ unitAbbreviation?: string;
598
+ reasoning?: string;
599
+ }
600
+ /** A choice group of a product sold (Complementos): «Ponto da carne». */
601
+ export interface ProductOptionGroup {
602
+ id?: string;
603
+ name: string;
604
+ isActive: boolean;
605
+ isRequired: boolean;
606
+ minSelections: number;
607
+ maxSelections: number;
608
+ items: ProductOptionItem[];
609
+ }
610
+ export interface ProductOptionItem {
611
+ id?: string;
612
+ name: string;
613
+ priceAdjustment: number;
614
+ isActive: boolean;
615
+ }
460
616
  export interface CreateRecipeInput {
461
617
  name: string;
462
618
  description?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AASA,iEAAiE;AACjE,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAA;AAE1E,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAA;AAEhF,oCAAoC;AACpC,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;AAEtE,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAA;AAe7E,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,YAAY,EAAE,OAAO,CAAA;IACrB,+BAA+B;IAC/B,SAAS,EAAE,OAAO,CAAA;IAClB,qDAAqD;IACrD,cAAc,EAAE,OAAO,CAAA;IACvB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAA;IAChB,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAA;IACnB,4CAA4C;IAC5C,QAAQ,EAAE,OAAO,CAAA;IACjB,8DAA8D;IAC9D,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,mEAAmE;IACnE,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;IAC1C,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uEAAuE;IACvE,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IAC9D,qBAAqB;IACrB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAAA;AAElE,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gDAAgD;IAChD,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kFAAkF;IAClF,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,oBAAoB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClF,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,4DAA4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,6EAA6E;AAC7E,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC/C,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACnC,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;IAC1C,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,4EAA4E;IAC5E,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAA;AAE3E,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ;gFAC4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,SAAS,GAAG,OAAO,CAAA;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,eAAe,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,KAAK,CAAC;YACX,YAAY,EAAE,MAAM,CAAA;YACpB,cAAc,EAAE,MAAM,CAAA;YACtB,aAAa,CAAC,EAAE,MAAM,CAAA;YACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;YACjB,QAAQ,EAAE,MAAM,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAA;SACjB,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,UAAU,CAAA;IAC1C,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,WAAW,EAAE,KAAK,CAAC;YACjB,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,eAAe,CAAC,EAAE,MAAM,CAAA;YACxB,QAAQ,EAAE,MAAM,CAAA;YAChB,MAAM,CAAC,EAAE,MAAM,CAAA;YACf,KAAK,CAAC,EAAE,MAAM,CAAA;SACf,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,iBAAiB,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,2BAA2B,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAMD,gFAAgF;AAChF,MAAM,WAAW,2BAA2B;IAC1C,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAA;IAClB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,0BAA0B,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAA;AAC7E,MAAM,MAAM,8BAA8B,GAAG,kBAAkB,GAAG,oBAAoB,CAAA;AAEtF,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,0BAA0B,CAAA;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,8BAA8B,CAAA;CAC5C;AAMD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAA;IACnB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;8BAC8B;AAC9B,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;oEACoE;AACpE,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACxE;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IAC7C;;;;;;;;OAQG;IACH,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,cAAc,GAAG,eAAe,CAAA;CACzC;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd"}
@@ -9,16 +9,6 @@ export declare function StockLocationsView(): React.JSX.Element;
9
9
  export declare function TemperatureView(): React.JSX.Element;
10
10
  /** Indicadores de estoque. */
11
11
  export declare function StockIndicatorsView(): React.JSX.Element;
12
- /**
13
- * Ficha técnica — a receita com CUSTO, rendimento e porção.
14
- *
15
- * Receitas (que já existe) responde «do que é feito». A ficha técnica responde
16
- * «quanto custa um prato e quanto rende a panela», e é ela que o restaurante
17
- * imprime e pendura na cozinha. São a mesma massa de dados e duas perguntas
18
- * diferentes — por isso ela entra como tela, e não como mais um campo no
19
- * formulário da receita.
20
- */
21
- export declare function TechnicalSheetView(): React.JSX.Element;
22
12
  /** Alteração em massa de produtos — sub-item de Produtos no V1. */
23
13
  export declare function BulkProductEditView(): React.JSX.Element;
24
14
  //# sourceMappingURL=GapScreens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GapScreens.d.ts","sourceRoot":"","sources":["../../src/views/GapScreens.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,6CAA6C;AAC7C,wBAAgB,aAAa,sBAc5B;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,sBAc/B;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,sBAcjC;AAED,kDAAkD;AAClD,wBAAgB,eAAe,sBAc9B;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,sBAclC;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,sBAejC;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,sBAclC"}
1
+ {"version":3,"file":"GapScreens.d.ts","sourceRoot":"","sources":["../../src/views/GapScreens.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,6CAA6C;AAC7C,wBAAgB,aAAa,sBAc5B;AAED,uDAAuD;AACvD,wBAAgB,gBAAgB,sBAc/B;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,sBAcjC;AAED,kDAAkD;AAClD,wBAAgB,eAAe,sBAc9B;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,sBAclC;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,sBAclC"}
@@ -1 +1 @@
1
- {"version":3,"file":"InventoryPage.d.ts","sourceRoot":"","sources":["../../src/views/InventoryPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAA4B,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAA;AAkKzE,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAChF,MAAM,EAAE,uBAAuB,CAAA;IAC/B,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;CACjC,qBAuMA"}
1
+ {"version":3,"file":"InventoryPage.d.ts","sourceRoot":"","sources":["../../src/views/InventoryPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAA4B,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAA;AAwJzE,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAChF,MAAM,EAAE,uBAAuB,CAAA;IAC/B,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;CACjC,qBAwMA"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { Product, ProductOptionGroup } from '../types';
3
+ export declare function validateOptionGroups(groups: ProductOptionGroup[]): string | null;
4
+ export declare function ProductComplementsTab({ item }: {
5
+ item: Product;
6
+ }): React.JSX.Element;
7
+ //# sourceMappingURL=ProductComplementsTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductComplementsTab.d.ts","sourceRoot":"","sources":["../../src/views/ProductComplementsTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAQ/D,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,UAAU,CAAA;AAsB9E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,GAAG,IAAI,CAsBhF;AAED,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,qBA0IhE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProductDetailView.d.ts","sourceRoot":"","sources":["../../src/views/ProductDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAA;AA4BxE,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,qBA2GA"}
1
+ {"version":3,"file":"ProductDetailView.d.ts","sourceRoot":"","sources":["../../src/views/ProductDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAA;AA8BxE,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,qBAwHA"}
@@ -1,8 +1,12 @@
1
1
  import React from 'react';
2
2
  import type { Product } from '../types';
3
- export declare function ProductRecipeTab({ item, onOpenRecipes }: {
3
+ /**
4
+ * Ficha Técnica tab of the product — the same sheet the Fichas Técnicas list
5
+ * opens. `onChanged` reloads the product: saving rewrites its cost and marks
6
+ * it as produced.
7
+ */
8
+ export declare function ProductRecipeTab({ item, onChanged }: {
4
9
  item: Product;
5
- /** Leva para a lista de Receitas — é lá que uma ficha nasce. */
6
- onOpenRecipes?: () => void;
10
+ onChanged?: () => void;
7
11
  }): React.JSX.Element;
8
12
  //# sourceMappingURL=ProductRecipeTab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProductRecipeTab.d.ts","sourceRoot":"","sources":["../../src/views/ProductRecipeTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAKlD,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,UAAU,CAAA;AAa/C,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;IACxD,IAAI,EAAE,OAAO,CAAA;IACb,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;CAC3B,qBA8CA"}
1
+ {"version":3,"file":"ProductRecipeTab.d.ts","sourceRoot":"","sources":["../../src/views/ProductRecipeTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGvC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,qBAE9F"}
@@ -1,8 +1,6 @@
1
1
  import React from 'react';
2
- export declare function RecipesView({ onNew, onView, onNewForProduct }: {
3
- onNew?: () => void;
4
- onView?: (id: string) => void;
5
- /** Starts a ficha for a menu item that has none. */
6
- onNewForProduct?: (productId: string) => void;
2
+ export declare function RecipesView({ onOpenProduct }: {
3
+ /** Opens the product on its Ficha Técnica tab. */
4
+ onOpenProduct: (productId: string) => void;
7
5
  }): React.JSX.Element;
8
6
  //# sourceMappingURL=RecipesView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecipesView.d.ts","sourceRoot":"","sources":["../../src/views/RecipesView.tsx"],"names":[],"mappings":"AACA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAsGhF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE;IAC9D,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,oDAAoD;IACpD,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C,qBAyMA"}
1
+ {"version":3,"file":"RecipesView.d.ts","sourceRoot":"","sources":["../../src/views/RecipesView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAwHxD,wBAAgB,WAAW,CAAC,EAAE,aAAa,EAAE,EAAE;IAC7C,kDAAkD;IAClD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C,qBAwJA"}
@@ -1 +1 @@
1
- {"version":3,"file":"productEntity.d.ts","sourceRoot":"","sources":["../../src/views/productEntity.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAA+B,MAAM,eAAe,CAAA;AAI3E,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,gBAAgB,CAAA;AAsBlC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAA;AAiB1E,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,CAAC,EACJ,YAAY,EAAE,iBAAiB,EAAE,EACjC,QAAQ,EAAE,iBAAiB;AAC3B,+EAA+E;AAC/E,cAAc,CAAC,EAAE,MAAM,IAAI;AAC3B,oEAAoE;AACpE,QAAQ,CAAC,EAAE,qBAAqB;AAChC;;;;;;;;GAQG;AACH,SAAS,UAAO,GACf,SAAS,CAqUX"}
1
+ {"version":3,"file":"productEntity.d.ts","sourceRoot":"","sources":["../../src/views/productEntity.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAA+B,MAAM,eAAe,CAAA;AAI3E,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAyB,CAAC,EAAE,MAAM,gBAAgB,CAAA;AAsBzD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAA;AAiB1E,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,CAAC,EACJ,YAAY,EAAE,iBAAiB,EAAE,EACjC,QAAQ,EAAE,iBAAiB;AAC3B,+EAA+E;AAC/E,cAAc,CAAC,EAAE,MAAM,IAAI;AAC3B,oEAAoE;AACpE,QAAQ,CAAC,EAAE,qBAAqB;AAChC;;;;;;;;GAQG;AACH,SAAS,UAAO,GACf,SAAS,CAqUX"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { Product } from '../../types';
3
+ /** "Gerar foto com IA": generate, look, then apply — applying is the only write. */
4
+ export declare function GenerateImageDialog({ product, onClose, onApplied }: {
5
+ product: Product;
6
+ onClose: () => void;
7
+ onApplied: () => void;
8
+ }): React.JSX.Element;
9
+ //# sourceMappingURL=GenerateImageDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenerateImageDialog.d.ts","sourceRoot":"","sources":["../../../src/views/recipe/GenerateImageDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAA;AAO/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IACnE,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,qBAoHA"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { IngredientInfo } from '../../types';
3
+ /** ✎ on a sheet line: the ingredient's cost, for every sheet that uses it. */
4
+ export declare function IngredientCostDialog({ ingredient, unitAbbr, onClose, onSaved }: {
5
+ ingredient: IngredientInfo;
6
+ unitAbbr?: string;
7
+ onClose: () => void;
8
+ onSaved: (cost: number) => void;
9
+ }): React.JSX.Element;
10
+ //# sourceMappingURL=IngredientCostDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngredientCostDialog.d.ts","sourceRoot":"","sources":["../../../src/views/recipe/IngredientCostDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAOvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAGjD,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC/E,UAAU,EAAE,cAAc,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC,qBA+EA"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { IngredientInfo, MeasurementUnit } from '../../types';
3
+ /**
4
+ * "Criar insumo" from a sheet line. The unit is asked for because the line's
5
+ * quantity is stored in it — an ingredient without one can't be costed or
6
+ * converted (g ↔ kg), which is the hole the migrated catalogue already has.
7
+ */
8
+ export declare function QuickIngredientDialog({ defaultName, units, onClose, onCreated }: {
9
+ defaultName: string;
10
+ units: MeasurementUnit[];
11
+ onClose: () => void;
12
+ onCreated: (row: IngredientInfo) => void;
13
+ }): React.JSX.Element;
14
+ //# sourceMappingURL=QuickIngredientDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuickIngredientDialog.d.ts","sourceRoot":"","sources":["../../../src/views/recipe/QuickIngredientDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAQvC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAChF,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAA;CACzC,qBAqEA"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { Product, ProductionStation, RecipeAiSuggestion } from '../../types';
3
+ /** "Sugerir Ficha Técnica com IA": fills the sheet on screen; saves nothing. */
4
+ export declare function RecipeAiDialog({ product, stations, onClose, onSuggestion }: {
5
+ product: Product;
6
+ stations: ProductionStation[];
7
+ onClose: () => void;
8
+ onSuggestion: (s: RecipeAiSuggestion) => void;
9
+ }): React.JSX.Element;
10
+ //# sourceMappingURL=RecipeAiDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecipeAiDialog.d.ts","sourceRoot":"","sources":["../../../src/views/recipe/RecipeAiDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAA;AAO/C,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGjF,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE;IAC3E,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,YAAY,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAC9C,qBAmGA"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { Product } from '../../types';
3
+ export declare function RecipeEditor({ product, onSaved }: {
4
+ product: Product;
5
+ /** After a save: the product's cost and flags changed. */
6
+ onSaved?: () => void;
7
+ }): React.JSX.Element;
8
+ //# sourceMappingURL=RecipeEditor.d.ts.map