@fayz-ai/plugin-inventory 0.13.7 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context.d.ts +27 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/data/supabase.d.ts.map +1 -1
- package/dist/data/tables.d.ts +7 -0
- package/dist/data/tables.d.ts.map +1 -1
- package/dist/data/types.d.ts +5 -1
- package/dist/data/types.d.ts.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4428 -2403
- package/dist/index.js.map +1 -1
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/pt-BR.d.ts.map +1 -1
- package/dist/migrations/index.d.ts +3 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/types.d.ts +147 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/views/GapScreens.d.ts +10 -0
- package/dist/views/GapScreens.d.ts.map +1 -1
- package/dist/views/InventoryPage.d.ts.map +1 -1
- package/dist/views/MovementHistoryView.d.ts.map +1 -1
- package/dist/views/ProductBarcodesTab.d.ts +6 -0
- package/dist/views/ProductBarcodesTab.d.ts.map +1 -0
- package/dist/views/ProductCrudForm.d.ts.map +1 -1
- package/dist/views/ProductDetailView.d.ts.map +1 -1
- package/dist/views/ProductRecipeTab.d.ts +8 -0
- package/dist/views/ProductRecipeTab.d.ts.map +1 -0
- package/dist/views/UnitStockLocationsWidget.d.ts +10 -0
- package/dist/views/UnitStockLocationsWidget.d.ts.map +1 -0
- package/dist/views/productEntity.d.ts +11 -1
- package/dist/views/productEntity.d.ts.map +1 -1
- package/dist/views/productFichas.d.ts +101 -0
- package/dist/views/productFichas.d.ts.map +1 -0
- package/package.json +4 -4
package/dist/locales/en.d.ts.map
CHANGED
|
@@ -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,
|
|
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 +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,
|
|
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"}
|
|
@@ -18,6 +18,9 @@ export declare const MIGRATION_016_A_DATA_DO_CONSUMO_E_UMA_COLUNA = "-- A data d
|
|
|
18
18
|
export declare const MIGRATION_017_APROVAR_E_BAIXAR_SAO_DOIS_GESTOS = "-- Aprovar e baixar no estoque s\u00E3o DOIS gestos, e faltavam os dois.\n--\n-- A fila da Auditoria de Uso existe desde o come\u00E7o deste porte: o injetor\n-- lan\u00E7a o que usou, a linha chega aqui, e o estoquista confere. S\u00F3 que a tela\n-- s\u00F3 sabia CORRIGIR a quantidade \u2014 n\u00E3o havia como aceitar. O consumo entrava\n-- na fila e o saldo nunca ca\u00EDa. A pergunta que a jornada 4 do V1 responde\n-- (\"executei e o estoque n\u00E3o mudou\") continuava sem resposta, porque o bot\u00E3o\n-- que a responde n\u00E3o existia.\n--\n-- O V1 tem tr\u00EAs a\u00E7\u00F5es por linha, e elas s\u00E3o diferentes de prop\u00F3sito:\n--\n-- \uD83D\uDCCD Baixar no estoque aceita E desconta do saldo\n-- \u270F\uFE0F Corrigir conserta a quantidade digitada errada\n-- \u2705 Aprovar aceita o consumo, sem mexer no saldo\n--\n-- \"Aprovar\" sem baixar existe para o consumo que n\u00E3o sai do estoque da casa \u2014\n-- produto do pr\u00F3prio cliente, amostra do fornecedor, item j\u00E1 baixado por fora.\n--\n-- SOBRE SALDO NEGATIVO. Esta fun\u00E7\u00E3o N\u00C3O exige saldo. O movimento \u00E9 o registro\n-- do que foi usado numa pessoa, e isso aconteceu independentemente do que o\n-- sistema achava que havia na prateleira. Recusar a baixa por falta de saldo\n-- esconderia o consumo e deixaria a diferen\u00E7a invis\u00EDvel; deixar o saldo ficar\n-- negativo \u00E9 exatamente o sinal que o estoquista precisa ver.\n\nCREATE OR REPLACE FUNCTION public.inventory_approve_usage_batch(\n p_lines jsonb,\n p_post boolean DEFAULT false,\n p_reason text DEFAULT NULL\n)\nRETURNS jsonb\nLANGUAGE plpgsql\nSECURITY DEFINER\nSET search_path TO ''\nAS $fn$\nDECLARE\n v_tenant uuid := app.inventory_require_tenant();\n v_actor uuid := auth.uid();\n v_key text;\n v_op record;\n r record;\n v_cs record;\n v_location uuid;\n v_cost numeric;\n v_movement uuid;\n v_no integer := 0;\n v_aprovadas integer := 0;\n v_baixadas integer := 0;\n v_puladas integer := 0;\n v_movements jsonb := '[]'::jsonb;\nBEGIN\n PERFORM app.inventory_check_lines(p_lines);\n\n SELECT 'usage_audit_approve:' || CASE WHEN p_post THEN 'post:' ELSE 'ack:' END\n || md5(string_agg((l->>'item_id'), ',' ORDER BY (l->>'item_id')))\n INTO v_key\n FROM jsonb_array_elements(p_lines) AS l;\n\n SELECT * INTO v_op FROM app.inventory_begin_operation(\n -- `confirm` \u00E9 a opera\u00E7\u00E3o de quem TIRA do estoque por consumo \u2014 o mesmo\n -- verbo que o consumo de item de pedido usa. 'out' n\u00E3o existe no cat\u00E1logo\n -- de opera\u00E7\u00F5es (s\u00F3 de movimentos), e o CHECK recusava.\n v_tenant, CASE WHEN p_post THEN 'confirm' ELSE 'adjust' END, v_key,\n jsonb_build_object('source', 'usage_audit_approve', 'post', p_post, 'lines', p_lines));\n IF v_op.existing IS NOT NULL THEN\n RETURN v_op.existing;\n END IF;\n\n FOR r IN\n SELECT (l->>'item_id')::uuid AS item_id, ord\n FROM jsonb_array_elements(p_lines) WITH ORDINALITY AS t(l, ord)\n ORDER BY ord\n LOOP\n v_no := v_no + 1;\n\n SELECT cs.* INTO v_cs\n FROM public.plg_clinical_session_products cs\n WHERE cs.tenant_id = v_tenant AND cs.id = r.item_id\n FOR UPDATE;\n\n -- Linha que n\u00E3o \u00E9 consumo cl\u00EDnico j\u00E1 nasceu como movimento do raz\u00E3o: ela\n -- n\u00E3o tem o que aprovar, e some da fila por outro caminho.\n IF NOT FOUND THEN\n v_puladas := v_puladas + 1;\n CONTINUE;\n END IF;\n\n IF p_post AND coalesce(v_cs.used_quantity, 0) > 0 THEN\n -- ONDE A BAIXA ACONTECE. Prefer\u00EAncia: o local padr\u00E3o do produto na\n -- unidade, depois o da ficha, depois o primeiro local ativo dela.\n SELECT candidate.location_id INTO v_location\n FROM (\n SELECT s.default_location_id AS location_id,\n CASE WHEN v_cs.unit_id IS NOT NULL AND s.unit_id = v_cs.unit_id THEN 1 ELSE 2 END AS priority\n FROM public.plg_inventory_product_settings s\n WHERE s.tenant_id = v_tenant\n AND s.product_id = v_cs.product_id\n AND s.default_location_id IS NOT NULL\n AND (s.unit_id IS NULL OR s.unit_id = v_cs.unit_id)\n UNION ALL\n SELECT d.default_location_id, 3\n FROM public.plg_inventory_product_details d\n WHERE d.tenant_id = v_tenant\n AND d.product_id = v_cs.product_id\n AND d.default_location_id IS NOT NULL\n UNION ALL\n SELECT l.id, 4\n FROM public.plg_inventory_stock_locations l\n WHERE l.tenant_id = v_tenant AND l.is_active\n ) candidate\n JOIN public.plg_inventory_stock_locations l\n ON l.id = candidate.location_id AND l.tenant_id = v_tenant AND l.is_active\n WHERE v_cs.unit_id IS NULL OR l.unit_id = v_cs.unit_id OR l.unit_id IS NULL\n ORDER BY candidate.priority, l.created_at, l.id\n LIMIT 1;\n\n IF v_location IS NULL THEN\n RAISE EXCEPTION 'inventory: nenhum local de estoque ativo para a unidade deste consumo'\n USING ERRCODE = '22023';\n END IF;\n\n SELECT p.unit_cost INTO v_cost\n FROM public.plg_inventory_stock_positions p\n WHERE p.tenant_id = v_tenant AND p.product_id = v_cs.product_id\n AND p.stock_location_id = v_location\n ORDER BY p.expiration_date NULLS LAST, p.created_at\n LIMIT 1;\n\n INSERT INTO public.plg_inventory_stock_movements\n (tenant_id, unit_id, product_id, kind, quantity, unit_cost, source_location_id,\n measurement_unit_id, document_type, document_number,\n source_item_type, source_item_id, idempotency_key, line_no, operation_id,\n user_id, metadata)\n VALUES\n (v_tenant, v_cs.unit_id, v_cs.product_id, 'out', -v_cs.used_quantity,\n coalesce(v_cost, 0), v_location, v_cs.used_unit_id, 'consumption',\n coalesce(v_cs.session_id::text, v_cs.id::text),\n 'usage_audit', v_cs.id, v_key, v_no, v_op.op_id, v_actor,\n jsonb_strip_nulls(jsonb_build_object(\n 'source', 'usage_audit_approve',\n 'session_id', v_cs.session_id,\n 'order_item_id', v_cs.order_item_id,\n 'reason', nullif(btrim(p_reason), ''))))\n RETURNING id INTO v_movement;\n\n v_movements := v_movements || app.inventory_movement_json(v_movement);\n v_baixadas := v_baixadas + 1;\n END IF;\n\n -- CONFERIDO \u00E9 o mesmo carimbo nos dois gestos: o que sai da fila \u00E9 o que\n -- algu\u00E9m olhou, tenha ou n\u00E3o baixado.\n UPDATE public.plg_clinical_session_products cs\n SET is_audited = true,\n audited_at = now(),\n audited_by = coalesce(cs.audited_by, v_actor),\n audit_notes = coalesce(nullif(btrim(p_reason), ''), cs.audit_notes),\n updated_at = now()\n WHERE cs.id = v_cs.id;\n v_aprovadas := v_aprovadas + 1;\n END LOOP;\n\n RETURN app.inventory_finish_operation(\n v_tenant, v_op.op_id, CASE WHEN p_post THEN 'confirm' ELSE 'adjust' END, v_key,\n jsonb_build_object(\n 'operation_id', v_op.op_id, 'kind', 'usage_audit_approve',\n 'idempotency_key', v_key, 'status', CASE WHEN p_post THEN 'posted' ELSE 'approved' END,\n 'lines_approved', v_aprovadas, 'lines_posted', v_baixadas,\n 'lines_skipped', v_puladas, 'movements', v_movements),\n jsonb_build_object('source', 'usage_audit_approve', 'post', p_post,\n 'lines_approved', v_aprovadas, 'lines_posted', v_baixadas));\nEND $fn$;\n\nGRANT EXECUTE ON FUNCTION public.inventory_approve_usage_batch(jsonb, boolean, text) TO authenticated;\n";
|
|
19
19
|
export declare const MIGRATION_018_O_NOME_NAO_SAI_DA_VISTA = "-- O NOME N\u00C3O SAI DA VISTA. A vista devolve o id; quem pinta busca o nome.\n--\n-- `people` tem 120.379 linhas neste tenant e uma pol\u00EDtica de RLS que passa por\n-- `resource_grants`. Buscar o nome do profissional e o da cliente DENTRO da\n-- vista fazia essa pol\u00EDtica rodar linha a linha: a mesma consulta que custa\n-- 9 ms com chave de servi\u00E7o levava **30 segundos** com a sess\u00E3o de quem usa a\n-- tela, e o PostgREST desistia aos 8.\n--\n-- Nenhum \u00EDndice conserta isso, porque o problema n\u00E3o \u00E9 achar a pessoa \u2014 \u00E9 a\n-- pol\u00EDtica ser avaliada uma vez por candidato. A sa\u00EDda \u00E9 n\u00E3o perguntar ali: a\n-- vista entrega `performed_by_id` e `customer_id`, e a tela busca os ~50 nomes\n-- de uma vez, numa consulta s\u00F3, com a RLS rodando uma vez para todos.\n\nCREATE OR REPLACE VIEW public.v_inventory_consumption_audit WITH (security_invoker = true) AS\n WITH consumed AS (\n SELECT m.tenant_id,\n m.unit_id,\n m.source_item_id AS item_id,\n m.product_id,\n sum(- m.quantity) AS posted_quantity,\n sum(m.total_cost) AS total_cost,\n min(m.created_at) AS used_at,\n min(m.movement_date) AS movement_date,\n (array_agg(m.source_location_id ORDER BY m.created_at, m.id))[1] AS stock_location_id,\n count(DISTINCT m.source_location_id)::integer AS location_count,\n (array_agg(m.measurement_unit_id ORDER BY m.created_at, m.id))[1] AS measurement_unit_id,\n (array_agg(m.metadata ->> 'recipe_id'::text ORDER BY m.created_at, m.id))[1] AS recipe_id\n FROM plg_inventory_stock_movements m\n WHERE m.source_item_type = 'order_item'::text AND m.source_item_id IS NOT NULL AND m.kind = 'out'::text AND NOT (EXISTS ( SELECT 1\n FROM plg_inventory_stock_movements r\n WHERE r.reverses_movement_id = m.id))\n GROUP BY m.tenant_id, m.unit_id, m.source_item_id, m.product_id\n ), corrected AS (\n SELECT c.tenant_id,\n c.source_item_id AS item_id,\n c.product_id,\n sum(- c.quantity) AS correction_delta,\n sum((- sign(c.quantity)) * c.total_cost) AS correction_cost,\n max(c.created_at) AS corrected_at,\n (array_agg(c.reason ORDER BY c.created_at DESC, c.id DESC))[1] AS correction_reason\n FROM plg_inventory_stock_movements c\n WHERE c.source_item_type = 'usage_audit'::text AND c.source_item_id IS NOT NULL\n GROUP BY c.tenant_id, c.source_item_id, c.product_id\n ), ledger AS (\n SELECT c.tenant_id,\n c.unit_id,\n c.item_id,\n c.product_id,\n p.name AS product_name,\n p.sku AS product_sku,\n c.used_at,\n c.movement_date,\n c.posted_quantity,\n c.posted_quantity + COALESCE(k.correction_delta, 0::numeric) AS net_quantity,\n std.standard_quantity,\n CASE\n WHEN std.standard_quantity IS NULL THEN NULL::numeric\n ELSE c.posted_quantity + COALESCE(k.correction_delta, 0::numeric) - std.standard_quantity\n END AS variance,\n u.abbreviation AS unit_abbreviation,\n c.total_cost + COALESCE(k.correction_cost, 0::numeric) AS total_cost,\n c.stock_location_id,\n sl.name AS stock_location_name,\n c.location_count,\n r.id AS recipe_id,\n r.name AS recipe_name,\n i.order_id,\n i.name AS item_name,\n o.reference_number AS order_reference,\n i.assignee_id AS performed_by_id,\n NULL::text AS performed_by_name,\n o.party_id AS customer_id,\n NULL::text AS customer_name,\n k.corrected_at,\n k.correction_reason,\n k.item_id IS NOT NULL AS is_corrected,\n 'ledger'::text AS source,\n true AS stock_posted\n FROM consumed c\n LEFT JOIN corrected k ON k.tenant_id = c.tenant_id AND k.item_id = c.item_id AND k.product_id = c.product_id\n LEFT JOIN products p ON p.id = c.product_id\n LEFT JOIN plg_inventory_stock_locations sl ON sl.id = c.stock_location_id\n LEFT JOIN plg_inventory_measurement_units u ON u.id = c.measurement_unit_id\n LEFT JOIN items i ON i.id = c.item_id AND i.tenant_id = c.tenant_id\n LEFT JOIN orders o ON o.id = i.order_id\n LEFT JOIN people perf ON perf.id = i.assignee_id\n LEFT JOIN people cust ON cust.id = o.party_id\n LEFT JOIN plg_inventory_recipes r ON r.id = NULLIF(c.recipe_id, ''::text)::uuid AND r.tenant_id = c.tenant_id\n LEFT JOIN LATERAL ( SELECT\n CASE\n WHEN r.id IS NOT NULL AND COALESCE(r.yield_quantity, 0::numeric) > 0::numeric THEN ( SELECT round(sum(ri.quantity) * COALESCE(i.quantity, 1::numeric) / r.yield_quantity, 4) AS round\n FROM plg_inventory_recipe_ingredients ri\n WHERE ri.tenant_id = c.tenant_id AND ri.recipe_id = r.id AND ri.product_id = c.product_id)\n WHEN r.id IS NULL THEN i.quantity\n ELSE NULL::numeric\n END AS standard_quantity) std ON true\n ), clinical AS (\n SELECT cs.tenant_id,\n cs.unit_id,\n cs.id AS item_id,\n cs.product_id,\n p.name AS product_name,\n p.sku AS product_sku,\n cs.used_at,\n COALESCE(cs.executed_on, cs.created_at::date) AS movement_date,\n COALESCE(cs.used_quantity, 0::numeric) AS posted_quantity,\n COALESCE(cs.used_quantity, 0::numeric) AS net_quantity,\n NULLIF(cs.default_quantity, 0::numeric) AS standard_quantity,\n CASE\n WHEN NULLIF(cs.default_quantity, 0::numeric) IS NULL THEN NULL::numeric\n ELSE COALESCE(cs.used_quantity, 0::numeric) - cs.default_quantity\n END AS variance,\n u.abbreviation AS unit_abbreviation,\n 0::numeric AS total_cost,\n NULL::uuid AS stock_location_id,\n NULL::text AS stock_location_name,\n 1 AS location_count,\n NULL::uuid AS recipe_id,\n NULL::text AS recipe_name,\n i.order_id,\n sv.name AS item_name,\n o.reference_number AS order_reference,\n COALESCE(cs.assignee_id, s.performed_by_id, s.assignee_id) AS performed_by_id,\n NULL::text AS performed_by_name,\n s.party_id AS customer_id,\n NULL::text AS customer_name,\n cs.audited_at AS corrected_at,\n cs.audit_notes AS correction_reason,\n cs.is_audited AS is_corrected,\n 'clinical'::text AS source,\n false AS stock_posted\n FROM plg_clinical_session_products cs\n LEFT JOIN LATERAL ( SELECT ss.party_id, ss.performed_by_id, ss.assignee_id, ss.service_id\n FROM plg_clinical_sessions ss\n WHERE ss.tenant_id = cs.tenant_id AND ss.id = cs.session_id LIMIT 1) s ON true\n LEFT JOIN products p ON p.id = cs.product_id\n LEFT JOIN products sv ON sv.id = s.service_id\n LEFT JOIN plg_inventory_measurement_units u ON u.id = cs.used_unit_id\n LEFT JOIN LATERAL ( SELECT it.id, it.order_id, it.name, it.assignee_id\n FROM items it\n WHERE cs.order_item_id IS NOT NULL\n AND it.id = cs.order_item_id AND it.tenant_id = cs.tenant_id LIMIT 1) i ON true\n LEFT JOIN LATERAL ( SELECT ord.id, ord.reference_number, ord.party_id\n FROM orders ord\n WHERE i.order_id IS NOT NULL AND ord.id = i.order_id LIMIT 1) o ON true\n WHERE NOT (EXISTS ( SELECT 1\n FROM plg_inventory_stock_movements m\n WHERE m.tenant_id = cs.tenant_id AND m.source_item_type = 'order_item'::text AND m.source_item_id = cs.order_item_id AND m.product_id = cs.product_id AND m.kind = 'out'::text))\n )\n SELECT tenant_id,\n unit_id,\n item_id,\n product_id,\n product_name,\n product_sku,\n used_at,\n movement_date,\n posted_quantity::numeric(14,4) AS posted_quantity,\n net_quantity::numeric(14,4) AS net_quantity,\n standard_quantity::numeric(14,4) AS standard_quantity,\n variance,\n unit_abbreviation,\n total_cost::numeric(16,4) AS total_cost,\n stock_location_id,\n stock_location_name,\n location_count,\n recipe_id,\n recipe_name,\n order_id,\n item_name,\n order_reference,\n performed_by_id,\n performed_by_name,\n customer_id,\n customer_name,\n corrected_at,\n correction_reason,\n is_corrected,\n source,\n stock_posted\n FROM ( SELECT ledger.tenant_id,\n ledger.unit_id,\n ledger.item_id,\n ledger.product_id,\n ledger.product_name,\n ledger.product_sku,\n ledger.used_at,\n ledger.movement_date,\n ledger.posted_quantity,\n ledger.net_quantity,\n ledger.standard_quantity,\n ledger.variance,\n ledger.unit_abbreviation,\n ledger.total_cost,\n ledger.stock_location_id,\n ledger.stock_location_name,\n ledger.location_count,\n ledger.recipe_id,\n ledger.recipe_name,\n ledger.order_id,\n ledger.item_name,\n ledger.order_reference,\n ledger.performed_by_id,\n ledger.performed_by_name,\n ledger.customer_id,\n ledger.customer_name,\n ledger.corrected_at,\n ledger.correction_reason,\n ledger.is_corrected,\n ledger.source,\n ledger.stock_posted\n FROM ledger\n UNION ALL\n SELECT clinical.tenant_id,\n clinical.unit_id,\n clinical.item_id,\n clinical.product_id,\n clinical.product_name,\n clinical.product_sku,\n clinical.used_at,\n clinical.movement_date,\n clinical.posted_quantity,\n clinical.net_quantity,\n clinical.standard_quantity,\n clinical.variance,\n clinical.unit_abbreviation,\n clinical.total_cost,\n clinical.stock_location_id,\n clinical.stock_location_name,\n clinical.location_count,\n clinical.recipe_id,\n clinical.recipe_name,\n clinical.order_id,\n clinical.item_name,\n clinical.order_reference,\n clinical.performed_by_id,\n clinical.performed_by_name,\n clinical.customer_id,\n clinical.customer_name,\n clinical.corrected_at,\n clinical.correction_reason,\n clinical.is_corrected,\n clinical.source,\n clinical.stock_posted\n FROM clinical) a;;\n";
|
|
20
20
|
export declare const MIGRATION_019_SEM_SALDO_NAO_SE_BAIXA = "-- Sem saldo n\u00E3o se baixa \u2014 e a fila diz qual produto faltou.\n--\n-- A 017 assumiu que a baixa sempre cabe. N\u00E3o cabe: o gatilho de posi\u00E7\u00E3o da\n-- plataforma recusa sa\u00EDda sem lastro, e o estoque deste tenant est\u00E1 zerado em\n-- 223 dos 225 produtos. O clique voltava com o erro cru do Postgres\n-- (\"insufficient stock (no position for product \u2026)\") e a linha sumia do\n-- alcance de quem tentou.\n--\n-- Agora a linha sem saldo \u00E9 SEPARADA: n\u00E3o \u00E9 baixada, n\u00E3o \u00E9 carimbada como\n-- conferida \u2014 continua pendente, que \u00E9 o estado certo enquanto a entrada n\u00E3o\n-- for dada \u2014, e volta com nome de produto, quanto precisa e quanto h\u00E1.\n\nCREATE OR REPLACE FUNCTION public.inventory_approve_usage_batch(\n p_lines jsonb,\n p_post boolean DEFAULT false,\n p_reason text DEFAULT NULL\n)\nRETURNS jsonb\nLANGUAGE plpgsql\nSECURITY DEFINER\nSET search_path TO ''\nAS $fn$\nDECLARE\n v_tenant uuid := app.inventory_require_tenant();\n v_actor uuid := auth.uid();\n v_key text;\n v_op record;\n r record;\n v_cs record;\n v_location uuid;\n v_cost numeric;\n v_movement uuid;\n v_no integer := 0;\n v_aprovadas integer := 0;\n v_baixadas integer := 0;\n v_puladas integer := 0;\n v_sem_saldo integer := 0;\n v_faltando jsonb := '[]'::jsonb;\n v_disp numeric;\n v_movements jsonb := '[]'::jsonb;\nBEGIN\n PERFORM app.inventory_check_lines(p_lines);\n\n SELECT 'usage_audit_approve:' || CASE WHEN p_post THEN 'post:' ELSE 'ack:' END\n || md5(string_agg((l->>'item_id'), ',' ORDER BY (l->>'item_id')))\n INTO v_key\n FROM jsonb_array_elements(p_lines) AS l;\n\n SELECT * INTO v_op FROM app.inventory_begin_operation(\n -- `confirm` \u00E9 a opera\u00E7\u00E3o de quem TIRA do estoque por consumo \u2014 o mesmo\n -- verbo que o consumo de item de pedido usa. 'out' n\u00E3o existe no cat\u00E1logo\n -- de opera\u00E7\u00F5es (s\u00F3 de movimentos), e o CHECK recusava.\n v_tenant, CASE WHEN p_post THEN 'confirm' ELSE 'adjust' END, v_key,\n jsonb_build_object('source', 'usage_audit_approve', 'post', p_post, 'lines', p_lines));\n IF v_op.existing IS NOT NULL THEN\n RETURN v_op.existing;\n END IF;\n\n FOR r IN\n SELECT (l->>'item_id')::uuid AS item_id, ord\n FROM jsonb_array_elements(p_lines) WITH ORDINALITY AS t(l, ord)\n ORDER BY ord\n LOOP\n v_no := v_no + 1;\n\n SELECT cs.* INTO v_cs\n FROM public.plg_clinical_session_products cs\n WHERE cs.tenant_id = v_tenant AND cs.id = r.item_id\n FOR UPDATE;\n\n -- Linha que n\u00E3o \u00E9 consumo cl\u00EDnico j\u00E1 nasceu como movimento do raz\u00E3o: ela\n -- n\u00E3o tem o que aprovar, e some da fila por outro caminho.\n IF NOT FOUND THEN\n v_puladas := v_puladas + 1;\n CONTINUE;\n END IF;\n\n IF p_post AND coalesce(v_cs.used_quantity, 0) > 0 THEN\n -- ONDE A BAIXA ACONTECE. Prefer\u00EAncia: o local padr\u00E3o do produto na\n -- unidade, depois o da ficha, depois o primeiro local ativo dela.\n SELECT candidate.location_id INTO v_location\n FROM (\n SELECT s.default_location_id AS location_id,\n CASE WHEN v_cs.unit_id IS NOT NULL AND s.unit_id = v_cs.unit_id THEN 1 ELSE 2 END AS priority\n FROM public.plg_inventory_product_settings s\n WHERE s.tenant_id = v_tenant\n AND s.product_id = v_cs.product_id\n AND s.default_location_id IS NOT NULL\n AND (s.unit_id IS NULL OR s.unit_id = v_cs.unit_id)\n UNION ALL\n SELECT d.default_location_id, 3\n FROM public.plg_inventory_product_details d\n WHERE d.tenant_id = v_tenant\n AND d.product_id = v_cs.product_id\n AND d.default_location_id IS NOT NULL\n UNION ALL\n SELECT l.id, 4\n FROM public.plg_inventory_stock_locations l\n WHERE l.tenant_id = v_tenant AND l.is_active\n ) candidate\n JOIN public.plg_inventory_stock_locations l\n ON l.id = candidate.location_id AND l.tenant_id = v_tenant AND l.is_active\n WHERE v_cs.unit_id IS NULL OR l.unit_id = v_cs.unit_id OR l.unit_id IS NULL\n ORDER BY candidate.priority, l.created_at, l.id\n LIMIT 1;\n\n IF v_location IS NULL THEN\n RAISE EXCEPTION 'inventory: nenhum local de estoque ativo para a unidade deste consumo'\n USING ERRCODE = '22023';\n END IF;\n\n -- SEM SALDO N\u00C3O SE BAIXA, e quem clicou precisa saber por qu\u00EA.\n --\n -- A plataforma n\u00E3o deixa o saldo ficar negativo: o gatilho de posi\u00E7\u00E3o\n -- recusa a sa\u00EDda sem lastro. Em vez de devolver o erro cru do banco, a\n -- linha \u00E9 separada e volta nomeada \u2014 a fila mant\u00E9m o consumo pendente,\n -- que \u00E9 o estado certo enquanto a entrada n\u00E3o for dada.\n SELECT coalesce(sum(p.quantity), 0) INTO v_disp\n FROM public.plg_inventory_stock_positions p\n WHERE p.tenant_id = v_tenant AND p.product_id = v_cs.product_id\n AND p.stock_location_id = v_location;\n\n IF coalesce(v_disp, 0) < v_cs.used_quantity THEN\n v_sem_saldo := v_sem_saldo + 1;\n v_faltando := v_faltando || jsonb_build_array(jsonb_build_object(\n 'item_id', v_cs.id,\n 'product', (SELECT pr.name FROM public.products pr WHERE pr.id = v_cs.product_id),\n 'needed', v_cs.used_quantity,\n 'available', coalesce(v_disp, 0)));\n CONTINUE;\n END IF;\n\n SELECT p.unit_cost INTO v_cost\n FROM public.plg_inventory_stock_positions p\n WHERE p.tenant_id = v_tenant AND p.product_id = v_cs.product_id\n AND p.stock_location_id = v_location\n ORDER BY p.expiration_date NULLS LAST, p.created_at\n LIMIT 1;\n\n INSERT INTO public.plg_inventory_stock_movements\n (tenant_id, unit_id, product_id, kind, quantity, unit_cost, source_location_id,\n measurement_unit_id, document_type, document_number,\n source_item_type, source_item_id, idempotency_key, line_no, operation_id,\n user_id, metadata)\n VALUES\n (v_tenant, v_cs.unit_id, v_cs.product_id, 'out', -v_cs.used_quantity,\n coalesce(v_cost, 0), v_location, v_cs.used_unit_id, 'consumption',\n coalesce(v_cs.session_id::text, v_cs.id::text),\n 'usage_audit', v_cs.id, v_key, v_no, v_op.op_id, v_actor,\n jsonb_strip_nulls(jsonb_build_object(\n 'source', 'usage_audit_approve',\n 'session_id', v_cs.session_id,\n 'order_item_id', v_cs.order_item_id,\n 'reason', nullif(btrim(p_reason), ''))))\n RETURNING id INTO v_movement;\n\n v_movements := v_movements || app.inventory_movement_json(v_movement);\n v_baixadas := v_baixadas + 1;\n END IF;\n\n -- CONFERIDO \u00E9 o mesmo carimbo nos dois gestos: o que sai da fila \u00E9 o que\n -- algu\u00E9m olhou, tenha ou n\u00E3o baixado.\n UPDATE public.plg_clinical_session_products cs\n SET is_audited = true,\n audited_at = now(),\n audited_by = coalesce(cs.audited_by, v_actor),\n audit_notes = coalesce(nullif(btrim(p_reason), ''), cs.audit_notes),\n updated_at = now()\n WHERE cs.id = v_cs.id;\n v_aprovadas := v_aprovadas + 1;\n END LOOP;\n\n RETURN app.inventory_finish_operation(\n v_tenant, v_op.op_id, CASE WHEN p_post THEN 'confirm' ELSE 'adjust' END, v_key,\n jsonb_build_object(\n 'operation_id', v_op.op_id, 'kind', 'usage_audit_approve',\n 'idempotency_key', v_key, 'status', CASE WHEN p_post THEN 'posted' ELSE 'approved' END,\n 'lines_approved', v_aprovadas, 'lines_posted', v_baixadas,\n 'lines_skipped', v_puladas, 'lines_no_stock', v_sem_saldo,\n 'missing', v_faltando, 'movements', v_movements),\n jsonb_build_object('source', 'usage_audit_approve', 'post', p_post,\n 'lines_approved', v_aprovadas, 'lines_posted', v_baixadas,\n 'lines_no_stock', v_sem_saldo));\nEND $fn$;\n\nGRANT EXECUTE ON FUNCTION public.inventory_approve_usage_batch(jsonb, boolean, text) TO authenticated;\n";
|
|
21
|
+
export declare const MIGRATION_020_O_PRODUTO_E_VARIAS_COISAS_AO_MESMO_TEMPO = "-- Um produto \u00E9 V\u00C1RIAS coisas ao mesmo tempo, e cada uma tem a sua ficha.\n--\n-- O V2 guardava o tipo do produto como UM valor dentro de `products.metadata`\n-- (\u00ABingredient\u00BB | \u00ABsale\u00BB | \u00ABintermediate\u00BB | \u00ABasset\u00BB). O V1 n\u00E3o: ele tem SETE\n-- interruptores independentes, e cada um liga uma ficha pr\u00F3pria no cadastro.\n-- Um shampoo de sal\u00E3o \u00E9 o caso que quebra o valor \u00FAnico \u2014 a casa o usa no\n-- atendimento (insumo) E o revende ao cliente (venda), e com um valor s\u00F3\n-- algu\u00E9m tem de escolher qual das duas fichas o produto pode ter.\n--\n-- Ent\u00E3o as flags viram COLUNAS, e cada ficha vira uma tabela com a chave no\n-- produto. `metadata->>productType` continua escrito pelo provider porque \u00E9\n-- dele que a faceta da lista (\u00ABInsumos / Venda / Intermedi\u00E1rios / Patrim\u00F4nio\u00BB,\n-- igual \u00E0 do V1) se serve; ele passa a ser DERIVADO das flags, n\u00E3o a origem.\n--\n-- As fichas s\u00E3o tabelas separadas, e n\u00E3o trinta colunas em\n-- `plg_inventory_product_details`, porque nenhuma casa usa as quatro: um sal\u00E3o\n-- nunca abre a de patrim\u00F4nio, e um restaurante nunca abre a de revenda\n-- profissional. Linha que n\u00E3o existe n\u00E3o custa leitura, e a ficha inteira some\n-- junto com o produto (`ON DELETE CASCADE`).\n\n-- ---------------------------------------------------------------------------\n-- 1. As flags e o resto dos Dados Gerais\n-- ---------------------------------------------------------------------------\n\nALTER TABLE public.plg_inventory_product_details\n ADD COLUMN IF NOT EXISTS is_ingredient boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS is_for_sale boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS is_intermediate boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS is_asset boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS is_produced boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS is_resale boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS track_by_unit_label boolean NOT NULL DEFAULT false,\n -- Rastreabilidade na ENTRADA. No V1 vive na Classifica\u00E7\u00E3o e vale para\n -- qualquer produto: revenda tamb\u00E9m tem lote e validade.\n ADD COLUMN IF NOT EXISTS require_batch_for_stock boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS require_expiry_for_stock boolean NOT NULL DEFAULT false,\n ADD COLUMN IF NOT EXISTS commission_percent numeric(7,4) NOT NULL DEFAULT 0,\n ADD COLUMN IF NOT EXISTS professional_resale_price numeric(16,4),\n ADD COLUMN IF NOT EXISTS chart_account_id uuid,\n ADD COLUMN IF NOT EXISTS content_per_unit numeric(14,4),\n ADD COLUMN IF NOT EXISTS content_unit_id uuid,\n ADD COLUMN IF NOT EXISTS avg_purchase_price numeric(16,4),\n ADD COLUMN IF NOT EXISTS avg_purchase_price_updated_at timestamp with time zone;\n\nCOMMENT ON COLUMN public.plg_inventory_product_details.chart_account_id IS\n 'Conta de despesa em plg_financial_chart_of_accounts. Sem chave estrangeira de prop\u00F3sito: a conta de estoque existe em tenant que n\u00E3o instalou o financeiro.';\nCOMMENT ON COLUMN public.plg_inventory_product_details.content_per_unit IS\n 'Quanto de content_unit_id cabe em UMA measurement_unit_id (1 frasco cont\u00E9m 300 ml).';\nCOMMENT ON COLUMN public.plg_inventory_product_details.avg_purchase_price IS\n 'Custo m\u00E9dio, reescrito a cada entrada de estoque. avg_purchase_price_updated_at carimba a \u00FAltima.';\nCOMMENT ON COLUMN public.plg_inventory_product_details.track_by_unit_label IS\n 'Alto custo / etiquetado: cada unidade \u00E9 acompanhada individualmente.';\n\nDO $$\nBEGIN\n IF NOT EXISTS (\n SELECT 1 FROM pg_constraint\n WHERE conname = 'plg_inventory_product_details_content_unit_id_fkey'\n ) THEN\n ALTER TABLE public.plg_inventory_product_details\n ADD CONSTRAINT plg_inventory_product_details_content_unit_id_fkey\n FOREIGN KEY (content_unit_id)\n REFERENCES public.plg_inventory_measurement_units(id) ON DELETE SET NULL;\n END IF;\nEND $$;\n\n-- O cat\u00E1logo que j\u00E1 existe nasceu com UM tipo. Acender a flag correspondente\n-- mant\u00E9m a tela igual ao que a pessoa cadastrou \u2014 sem isto, 169 produtos\n-- abririam o formul\u00E1rio sem nenhuma ficha e pareceriam ter perdido o tipo.\nUPDATE public.plg_inventory_product_details d\n SET is_ingredient = (p.metadata ->> 'productType') = 'ingredient',\n is_for_sale = (p.metadata ->> 'productType') = 'sale',\n is_intermediate = (p.metadata ->> 'productType') = 'intermediate',\n is_asset = (p.metadata ->> 'productType') = 'asset'\n FROM public.products p\n WHERE p.id = d.product_id\n AND p.metadata ->> 'productType' IS NOT NULL\n AND NOT (d.is_ingredient OR d.is_for_sale OR d.is_intermediate OR d.is_asset);\n\n-- Produto que existe sem linha de detalhe nenhuma tamb\u00E9m precisa da flag, ou\n-- o formul\u00E1rio abre sem ficha e a lista perde a faceta.\nINSERT INTO public.plg_inventory_product_details\n (product_id, tenant_id, is_ingredient, is_for_sale, is_intermediate, is_asset)\nSELECT p.id, p.tenant_id,\n (p.metadata ->> 'productType') = 'ingredient',\n (p.metadata ->> 'productType') = 'sale',\n (p.metadata ->> 'productType') = 'intermediate',\n (p.metadata ->> 'productType') = 'asset'\n FROM public.products p\n WHERE p.metadata ->> 'productType' IS NOT NULL\n AND NOT EXISTS (\n SELECT 1 FROM public.plg_inventory_product_details d WHERE d.product_id = p.id\n )\nON CONFLICT (product_id) DO NOTHING;\n\n-- ---------------------------------------------------------------------------\n-- 2. C\u00F3digos de barras \u2014 v\u00E1rios por produto, um principal\n-- ---------------------------------------------------------------------------\n--\n-- O produto j\u00E1 tinha UM c\u00F3digo em `products.metadata->>barcode`. Um s\u00F3 n\u00E3o\n-- serve ao balc\u00E3o: a mesma mercadoria chega em embalagem de 500 ml e de 1 L,\n-- com c\u00F3digos diferentes, e quem bipa n\u00E3o escolhe qual.\n\nCREATE TABLE IF NOT EXISTS public.plg_inventory_product_barcodes (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n product_id uuid NOT NULL,\n barcode text NOT NULL,\n barcode_type text DEFAULT 'EAN-13' NOT NULL,\n description text,\n is_primary boolean DEFAULT false 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 CONSTRAINT plg_inventory_product_barcodes_pkey PRIMARY KEY (id),\n CONSTRAINT plg_inventory_product_barcodes_product_id_fkey\n FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE,\n CONSTRAINT plg_inventory_product_barcodes_tenant_id_fkey\n FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE\n);\n\nCREATE INDEX IF NOT EXISTS idx_plg_inventory_product_barcodes_product\n ON public.plg_inventory_product_barcodes (product_id);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_plg_inventory_product_barcodes_code\n ON public.plg_inventory_product_barcodes (tenant_id, barcode);\n-- Principal \u00E9 UM. Sem isto dois \u00ABprincipais\u00BB convivem e quem l\u00EA a etiqueta\n-- pega o que vier primeiro.\nCREATE UNIQUE INDEX IF NOT EXISTS idx_plg_inventory_product_barcodes_primary\n ON public.plg_inventory_product_barcodes (product_id) WHERE is_primary;\n\n-- ---------------------------------------------------------------------------\n-- 3. Ficha de insumo\n-- ---------------------------------------------------------------------------\n\nCREATE TABLE IF NOT EXISTS public.plg_inventory_product_ingredient_info (\n product_id uuid NOT NULL,\n tenant_id uuid NOT NULL,\n minimum_quantity numeric(16,4) DEFAULT 0 NOT NULL,\n maximum_quantity numeric(16,4),\n reorder_point numeric(16,4),\n lead_time_days integer,\n shelf_life_days integer,\n storage_temperature text,\n allowed_supplier_ids uuid[],\n notes text,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL,\n CONSTRAINT plg_inventory_product_ingredient_info_pkey PRIMARY KEY (product_id),\n CONSTRAINT plg_inventory_product_ingredient_info_product_id_fkey\n FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE,\n CONSTRAINT plg_inventory_product_ingredient_info_tenant_id_fkey\n FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE\n);\n\nCOMMENT ON COLUMN public.plg_inventory_product_ingredient_info.reorder_point IS\n 'Saldo em que a compra deve ser disparada. Fica ACIMA do m\u00EDnimo: o m\u00EDnimo \u00E9 o que n\u00E3o se pode furar, este \u00E9 o aviso que chega a tempo.';\n\n-- ---------------------------------------------------------------------------\n-- 4. Ficha de venda e os pre\u00E7os por canal\n-- ---------------------------------------------------------------------------\n\nCREATE TABLE IF NOT EXISTS public.plg_inventory_product_sale_info (\n product_id uuid NOT NULL,\n tenant_id uuid NOT NULL,\n menu_description text,\n allergens text,\n preparation_time_minutes integer,\n serves_quantity integer,\n calories integer,\n sold_by_weight boolean DEFAULT false NOT NULL,\n highlight_delivery boolean DEFAULT false NOT NULL,\n available_for_delivery boolean DEFAULT true NOT NULL,\n available_for_counter boolean DEFAULT true NOT NULL,\n notes text,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL,\n CONSTRAINT plg_inventory_product_sale_info_pkey PRIMARY KEY (product_id),\n CONSTRAINT plg_inventory_product_sale_info_product_id_fkey\n FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE,\n CONSTRAINT plg_inventory_product_sale_info_tenant_id_fkey\n FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE\n);\n\n-- O canal \u00E9 texto livre, e n\u00E3o um CHECK: a lista do V1 (balc\u00E3o, delivery\n-- pr\u00F3prio, iFood, 99Food, Keeta) \u00E9 o card\u00E1pio de HOJE, e cada pra\u00E7a tem o seu.\n-- Um CHECK aqui obrigaria uma migration para aceitar o pr\u00F3ximo aplicativo.\nCREATE TABLE IF NOT EXISTS public.plg_inventory_product_sale_channels (\n id uuid DEFAULT gen_random_uuid() NOT NULL,\n tenant_id uuid NOT NULL,\n product_id uuid NOT NULL,\n channel text NOT NULL,\n price numeric(16,4) DEFAULT 0 NOT NULL,\n active boolean DEFAULT true 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 CONSTRAINT plg_inventory_product_sale_channels_pkey PRIMARY KEY (id),\n CONSTRAINT plg_inventory_product_sale_channels_product_id_fkey\n FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE,\n CONSTRAINT plg_inventory_product_sale_channels_tenant_id_fkey\n FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_plg_inventory_product_sale_channels_one\n ON public.plg_inventory_product_sale_channels (product_id, channel);\n\n-- ---------------------------------------------------------------------------\n-- 5. Ficha de intermedi\u00E1rio\n-- ---------------------------------------------------------------------------\n\nCREATE TABLE IF NOT EXISTS public.plg_inventory_product_intermediate_info (\n product_id uuid NOT NULL,\n tenant_id uuid NOT NULL,\n yield_percentage numeric(7,2),\n preparation_time_minutes integer,\n shelf_life_hours integer,\n batch_size numeric(16,4),\n batch_unit_id uuid,\n storage_instructions text,\n notes text,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL,\n CONSTRAINT plg_inventory_product_intermediate_info_pkey PRIMARY KEY (product_id),\n CONSTRAINT plg_inventory_product_intermediate_info_product_id_fkey\n FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE,\n CONSTRAINT plg_inventory_product_intermediate_info_batch_unit_id_fkey\n FOREIGN KEY (batch_unit_id) REFERENCES public.plg_inventory_measurement_units(id) ON DELETE SET NULL,\n CONSTRAINT plg_inventory_product_intermediate_info_tenant_id_fkey\n FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE\n);\n\n-- ---------------------------------------------------------------------------\n-- 6. Ficha de patrim\u00F4nio\n-- ---------------------------------------------------------------------------\n--\n-- O respons\u00E1vel aponta para `people` e n\u00E3o para uma tabela de funcion\u00E1rios:\n-- no V2 quem trabalha na casa \u00E9 uma pessoa como as outras.\n\nCREATE TABLE IF NOT EXISTS public.plg_inventory_product_asset_info (\n product_id uuid NOT NULL,\n tenant_id uuid NOT NULL,\n asset_value numeric(16,4) DEFAULT 0 NOT NULL,\n residual_value numeric(16,4) DEFAULT 0 NOT NULL,\n useful_life_months integer,\n depreciation_rate numeric(7,4),\n serial_number text,\n acquisition_date date,\n warranty_expiry_date date,\n asset_status text DEFAULT 'active' NOT NULL,\n asset_location text,\n responsible_person_id uuid,\n insurance_policy text,\n last_maintenance_date date,\n next_maintenance_date date,\n notes text,\n created_at timestamp with time zone DEFAULT now() NOT NULL,\n updated_at timestamp with time zone DEFAULT now() NOT NULL,\n CONSTRAINT plg_inventory_product_asset_info_pkey PRIMARY KEY (product_id),\n CONSTRAINT plg_inventory_product_asset_info_product_id_fkey\n FOREIGN KEY (product_id) REFERENCES public.products(id) ON DELETE CASCADE,\n CONSTRAINT plg_inventory_product_asset_info_responsible_person_id_fkey\n FOREIGN KEY (responsible_person_id) REFERENCES public.people(id) ON DELETE SET NULL,\n CONSTRAINT plg_inventory_product_asset_info_tenant_id_fkey\n FOREIGN KEY (tenant_id) REFERENCES public.tenants(id) ON DELETE CASCADE\n);\n\n-- ---------------------------------------------------------------------------\n-- 7. A cerca de cada ficha\n-- ---------------------------------------------------------------------------\n--\n-- Mesma regra do resto do plugin: a linha \u00E9 da casa que a escreveu, e a\n-- pergunta \u00E9 uma s\u00F3 (`user_tenant_ids()`), feita uma vez por consulta.\n\nDO $$\nDECLARE\n t text;\nBEGIN\n FOREACH t IN ARRAY ARRAY[\n 'plg_inventory_product_barcodes',\n 'plg_inventory_product_ingredient_info',\n 'plg_inventory_product_sale_info',\n 'plg_inventory_product_sale_channels',\n 'plg_inventory_product_intermediate_info',\n 'plg_inventory_product_asset_info'\n ]\n LOOP\n EXECUTE format('ALTER TABLE public.%I ENABLE ROW LEVEL SECURITY', t);\n EXECUTE format('ALTER TABLE public.%I FORCE ROW LEVEL SECURITY', t);\n EXECUTE format('CREATE INDEX IF NOT EXISTS idx_%s_tenant ON public.%I (tenant_id)', t, t);\n\n EXECUTE format('DROP POLICY IF EXISTS %I ON public.%I', t || '_select', t);\n EXECUTE format(\n 'CREATE POLICY %I ON public.%I FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()))',\n t || '_select', t);\n\n EXECUTE format('DROP POLICY IF EXISTS %I ON public.%I', t || '_insert', t);\n EXECUTE format(\n 'CREATE POLICY %I ON public.%I FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()))',\n t || '_insert', t);\n\n EXECUTE format('DROP POLICY IF EXISTS %I ON public.%I', t || '_update', t);\n EXECUTE format(\n 'CREATE POLICY %I ON public.%I FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()))',\n t || '_update', t);\n\n EXECUTE format('DROP POLICY IF EXISTS %I ON public.%I', t || '_delete', t);\n EXECUTE format(\n 'CREATE POLICY %I ON public.%I FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()))',\n t || '_delete', t);\n\n EXECUTE format('GRANT ALL ON TABLE public.%I TO authenticated', t);\n EXECUTE format('GRANT ALL ON TABLE public.%I TO service_role', t);\n END LOOP;\nEND $$;\n";
|
|
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
|
+
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";
|
|
21
24
|
export declare const MIGRATIONS: Array<{
|
|
22
25
|
id: string;
|
|
23
26
|
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,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,
|
|
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,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAwBzD,CAAA"}
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,6 +6,125 @@ export type MovementType = 'entry' | 'exit' | 'adjustment' | 'transfer' | 'loss'
|
|
|
6
6
|
export type ProductPurpose = 'purchase' | 'sale' | 'both' | 'internal';
|
|
7
7
|
/** Life of a physical count. `counting` starts at the first entry typed. */
|
|
8
8
|
export type CountSessionStatus = 'open' | 'counting' | 'closed' | 'cancelled';
|
|
9
|
+
export interface ProductClassification {
|
|
10
|
+
/** Aparece nas fichas técnicas. */
|
|
11
|
+
isIngredient: boolean;
|
|
12
|
+
/** Cardápio, PDV, catálogo. */
|
|
13
|
+
isForSale: boolean;
|
|
14
|
+
/** Produzido para consumir depois (molho, massa). */
|
|
15
|
+
isIntermediate: boolean;
|
|
16
|
+
/** Equipamento: entra no balanço patrimonial, não se consome. */
|
|
17
|
+
isAsset: boolean;
|
|
18
|
+
/** Habilita a ficha técnica — o produto nasce de uma receita. */
|
|
19
|
+
isProduced: boolean;
|
|
20
|
+
/** Destinado à revenda ao cliente final. */
|
|
21
|
+
isResale: boolean;
|
|
22
|
+
/** Alto custo: cada unidade é acompanhada individualmente. */
|
|
23
|
+
trackByUnitLabel: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** A ficha do insumo: o que a compra precisa saber. */
|
|
26
|
+
export interface ProductIngredientInfo {
|
|
27
|
+
minimumQuantity?: number;
|
|
28
|
+
maximumQuantity?: number;
|
|
29
|
+
/** Saldo em que a compra deve ser disparada — fica ACIMA do mínimo. */
|
|
30
|
+
reorderPoint?: number;
|
|
31
|
+
leadTimeDays?: number;
|
|
32
|
+
shelfLifeDays?: number;
|
|
33
|
+
storageTemperature?: string;
|
|
34
|
+
allowedSupplierIds?: string[];
|
|
35
|
+
notes?: string;
|
|
36
|
+
}
|
|
37
|
+
/** A ficha de venda: o que o cardápio e o balcão precisam saber. */
|
|
38
|
+
export interface ProductSaleInfo {
|
|
39
|
+
menuDescription?: string;
|
|
40
|
+
allergens?: string;
|
|
41
|
+
preparationTimeMinutes?: number;
|
|
42
|
+
servesQuantity?: number;
|
|
43
|
+
calories?: number;
|
|
44
|
+
soldByWeight?: boolean;
|
|
45
|
+
highlightDelivery?: boolean;
|
|
46
|
+
availableForDelivery?: boolean;
|
|
47
|
+
availableForCounter?: boolean;
|
|
48
|
+
notes?: string;
|
|
49
|
+
}
|
|
50
|
+
/** Preço por canal de venda. O canal é texto: cada praça tem os seus. */
|
|
51
|
+
export interface ProductSaleChannel {
|
|
52
|
+
channel: string;
|
|
53
|
+
price: number;
|
|
54
|
+
active?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface ProductIntermediateInfo {
|
|
57
|
+
yieldPercentage?: number;
|
|
58
|
+
preparationTimeMinutes?: number;
|
|
59
|
+
shelfLifeHours?: number;
|
|
60
|
+
batchSize?: number;
|
|
61
|
+
batchUnitId?: string;
|
|
62
|
+
storageInstructions?: string;
|
|
63
|
+
notes?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface ProductAssetInfo {
|
|
66
|
+
assetValue?: number;
|
|
67
|
+
residualValue?: number;
|
|
68
|
+
usefulLifeMonths?: number;
|
|
69
|
+
depreciationRate?: number;
|
|
70
|
+
serialNumber?: string;
|
|
71
|
+
acquisitionDate?: string;
|
|
72
|
+
warrantyExpiryDate?: string;
|
|
73
|
+
assetStatus?: string;
|
|
74
|
+
assetLocation?: string;
|
|
75
|
+
responsiblePersonId?: string;
|
|
76
|
+
insurancePolicy?: string;
|
|
77
|
+
lastMaintenanceDate?: string;
|
|
78
|
+
nextMaintenanceDate?: string;
|
|
79
|
+
notes?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Tributos do produto — a EXCEÇÃO ao grupo fiscal, não a cópia dele.
|
|
83
|
+
* `undefined` quer dizer «vale o que o grupo diz», nunca zero.
|
|
84
|
+
*/
|
|
85
|
+
export interface ProductTaxInfo {
|
|
86
|
+
taxGroupId?: string;
|
|
87
|
+
ncm?: string;
|
|
88
|
+
cest?: string;
|
|
89
|
+
icmsOrigin?: string;
|
|
90
|
+
icmsRate?: number;
|
|
91
|
+
cfop?: string;
|
|
92
|
+
cst?: string;
|
|
93
|
+
pisSituation?: string;
|
|
94
|
+
pisRate?: number;
|
|
95
|
+
cofinsSituation?: string;
|
|
96
|
+
cofinsRate?: number;
|
|
97
|
+
baseCalculationMode?: string;
|
|
98
|
+
benefitCode?: string;
|
|
99
|
+
povertyFundRate?: number;
|
|
100
|
+
ibsCbsSituation?: string;
|
|
101
|
+
ibsCbsClassification?: string;
|
|
102
|
+
}
|
|
103
|
+
export interface ProductBarcode {
|
|
104
|
+
id?: string;
|
|
105
|
+
barcode: string;
|
|
106
|
+
barcodeType?: string;
|
|
107
|
+
description?: string;
|
|
108
|
+
isPrimary?: boolean;
|
|
109
|
+
}
|
|
110
|
+
/** Os campos dos Dados Gerais do V1 que não cabiam em nenhuma ficha. */
|
|
111
|
+
export interface ProductGeneralExtras {
|
|
112
|
+
/** % que o profissional ganha ao vender este produto. */
|
|
113
|
+
commissionPercent?: number;
|
|
114
|
+
/** Conta de despesa do plano de contas. */
|
|
115
|
+
chartAccountId?: string;
|
|
116
|
+
/** Quanto de `contentUnitId` cabe em UMA unidade de estoque. */
|
|
117
|
+
contentPerUnit?: number;
|
|
118
|
+
contentUnitId?: string;
|
|
119
|
+
/** Custo médio, reescrito a cada entrada de estoque. */
|
|
120
|
+
avgPurchasePrice?: number;
|
|
121
|
+
avgPurchasePriceUpdatedAt?: string;
|
|
122
|
+
professionalResalePrice?: number;
|
|
123
|
+
/** Trava a entrada de estoque sem número de lote. */
|
|
124
|
+
requireBatchForStock?: boolean;
|
|
125
|
+
/** Trava a entrada de estoque sem data de validade. */
|
|
126
|
+
requireExpiryForStock?: boolean;
|
|
127
|
+
}
|
|
9
128
|
export interface Product {
|
|
10
129
|
id: string;
|
|
11
130
|
name: string;
|
|
@@ -17,6 +136,14 @@ export interface Product {
|
|
|
17
136
|
categoryName?: string;
|
|
18
137
|
productType: ProductType;
|
|
19
138
|
purpose?: ProductPurpose;
|
|
139
|
+
/** Os sete interruptores do V1. `productType` é derivado deles. */
|
|
140
|
+
classification?: ProductClassification;
|
|
141
|
+
ingredientInfo?: ProductIngredientInfo;
|
|
142
|
+
saleInfo?: ProductSaleInfo;
|
|
143
|
+
saleChannels?: ProductSaleChannel[];
|
|
144
|
+
intermediateInfo?: ProductIntermediateInfo;
|
|
145
|
+
assetInfo?: ProductAssetInfo;
|
|
146
|
+
taxInfo?: ProductTaxInfo;
|
|
20
147
|
currentQuantity: number;
|
|
21
148
|
minQuantity: number;
|
|
22
149
|
maxQuantity?: number;
|
|
@@ -33,6 +160,7 @@ export interface Product {
|
|
|
33
160
|
supplierName?: string;
|
|
34
161
|
defaultLocationId?: string;
|
|
35
162
|
imageUrl?: string;
|
|
163
|
+
extras?: ProductGeneralExtras;
|
|
36
164
|
metadata?: Record<string, unknown>;
|
|
37
165
|
tenantId: string;
|
|
38
166
|
createdAt: string;
|
|
@@ -53,6 +181,17 @@ export interface StockMovement {
|
|
|
53
181
|
supplierId?: string;
|
|
54
182
|
supplierName?: string;
|
|
55
183
|
documentNumber?: string;
|
|
184
|
+
/** `nfe`, `manual`, `transfer`… — é o que diz se o documento é abrível. */
|
|
185
|
+
documentType?: string;
|
|
186
|
+
/**
|
|
187
|
+
* A operação de estoque que criou este movimento. É o caminho de volta ao
|
|
188
|
+
* documento de origem: `plg_fiscalbr_inbox_documents.inventory_operation_id`
|
|
189
|
+
* aponta para a mesma operação, e é por aqui que a linha abre a nota.
|
|
190
|
+
*/
|
|
191
|
+
operationId?: string;
|
|
192
|
+
measurementUnitId?: string;
|
|
193
|
+
/** `UN`, `KG`, `CX` — o V1 escreve «12 SR» e a V2 escrevia só «12». */
|
|
194
|
+
measurementUnitAbbreviation?: string;
|
|
56
195
|
reason?: string;
|
|
57
196
|
notes?: string;
|
|
58
197
|
batchNumber?: string;
|
|
@@ -278,6 +417,14 @@ export interface CreateProductInput {
|
|
|
278
417
|
supplierId?: string;
|
|
279
418
|
defaultLocationId?: string;
|
|
280
419
|
imageUrl?: string;
|
|
420
|
+
classification?: Partial<ProductClassification>;
|
|
421
|
+
extras?: ProductGeneralExtras;
|
|
422
|
+
ingredientInfo?: ProductIngredientInfo;
|
|
423
|
+
saleInfo?: ProductSaleInfo;
|
|
424
|
+
saleChannels?: ProductSaleChannel[];
|
|
425
|
+
intermediateInfo?: ProductIntermediateInfo;
|
|
426
|
+
assetInfo?: ProductAssetInfo;
|
|
427
|
+
taxInfo?: ProductTaxInfo;
|
|
281
428
|
metadata?: Record<string, unknown>;
|
|
282
429
|
}
|
|
283
430
|
export interface CreateStockMovementInput {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -9,6 +9,16 @@ 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;
|
|
12
22
|
/** Alteração em massa de produtos — sub-item de Produtos no V1. */
|
|
13
23
|
export declare function BulkProductEditView(): React.JSX.Element;
|
|
14
24
|
//# 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,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;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,sBAejC;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;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MovementHistoryView.d.ts","sourceRoot":"","sources":["../../src/views/MovementHistoryView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"MovementHistoryView.d.ts","sourceRoot":"","sources":["../../src/views/MovementHistoryView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAA;AA0ExE,wBAAgB,mBAAmB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,GAAE;IACtE,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAClB,qBAsTL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductBarcodesTab.d.ts","sourceRoot":"","sources":["../../src/views/ProductBarcodesTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAS/D,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,UAAU,CAAA;AAqBvD,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,qBA8L7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCrudForm.d.ts","sourceRoot":"","sources":["../../src/views/ProductCrudForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ProductCrudForm.d.ts","sourceRoot":"","sources":["../../src/views/ProductCrudForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAkBzB,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,qBA4J7F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductDetailView.d.ts","sourceRoot":"","sources":["../../src/views/ProductDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAA;
|
|
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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Product } from '../types';
|
|
3
|
+
export declare function ProductRecipeTab({ item, onOpenRecipes }: {
|
|
4
|
+
item: Product;
|
|
5
|
+
/** Leva para a lista de Receitas — é lá que uma ficha nasce. */
|
|
6
|
+
onOpenRecipes?: () => void;
|
|
7
|
+
}): React.JSX.Element;
|
|
8
|
+
//# sourceMappingURL=ProductRecipeTab.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { EntityDef } from '@fayz-ai/core';
|
|
3
|
+
/** V1 stock_locations → plg_inventory_stock_locations. Deleting deactivates, as in V1. */
|
|
4
|
+
export declare const stockLocationEntity: EntityDef;
|
|
5
|
+
export declare function UnitStockLocationsWidget({ item }: {
|
|
6
|
+
item?: {
|
|
7
|
+
id?: string;
|
|
8
|
+
};
|
|
9
|
+
}): React.JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=UnitStockLocationsWidget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnitStockLocationsWidget.d.ts","sourceRoot":"","sources":["../../src/views/UnitStockLocationsWidget.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAI9C,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,EAAE,SAsBjC,CAAA;AAED,wBAAgB,wBAAwB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,4BAa5E"}
|
|
@@ -7,6 +7,16 @@ export declare function buildProductEntity(t: T, productTypes: ProductTypeOption
|
|
|
7
7
|
/** Called by the Stock tab after it changes stock, so the page can refetch. */
|
|
8
8
|
onStockChanged?: () => void,
|
|
9
9
|
/** Enables the real media slot; list-only consumers may omit it. */
|
|
10
|
-
provider?: InventoryDataProvider
|
|
10
|
+
provider?: InventoryDataProvider,
|
|
11
|
+
/**
|
|
12
|
+
* Esta casa emite nota? Liga a ficha de tributos — e vem LIGADA, como no V1,
|
|
13
|
+
* onde Fiscal aparece em todo produto de venda.
|
|
14
|
+
*
|
|
15
|
+
* A ficha mora numa tabela do plugin fiscal (`plg_fiscalbr_product_tax_info`,
|
|
16
|
+
* migration 011 dele), aplicada no cluster. Um app que não emite nota passa
|
|
17
|
+
* `false` e os dezesseis campos somem — oferecer campo que o banco não tem
|
|
18
|
+
* onde guardar é pior do que não oferecer nenhum.
|
|
19
|
+
*/
|
|
20
|
+
hasFiscal?: boolean): EntityDef;
|
|
11
21
|
export {};
|
|
12
22
|
//# sourceMappingURL=productEntity.d.ts.map
|
|
@@ -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;
|
|
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"}
|