@fayz-ai/plugin-inventory 0.19.0 → 0.20.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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/views/dashboardWidgets.tsx","../src/data/registries.ts","../src/lib/setup-guides.ts","../src/lib/onboarding.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/index.ts"],"names":["T","React"],"mappings":"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","file":"index.js","sourcesContent":["import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle, PackageX } from 'lucide-react'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n KpiCard, Card, CardHeader, CardTitle, CardContent, Badge, Skeleton,\n defineKpiWidget, defineCustomWidget,\n} from '@fayz-ai/ui'\nimport { InventoryContextProvider, useInventoryConfig, useInventoryStore, formatCurrency, type ResolvedInventoryConfig } from '../context'\nimport type { InventoryDataProvider } from '@fayz-ai/inventory/data/provider'\nimport type { InventoryUIState } from '@fayz-ai/inventory/store'\nimport { noProductHasMinimum } from '@fayz-ai/inventory/domain/stock'\n\nfunction useEnsureSummary() {\n const fetchSummary = useInventoryStore((s) => s.fetchSummary)\n useEffect(() => { void fetchSummary() }, [])\n}\n\nfunction StockValueKpi() {\n const t = useTranslation()\n const { currency } = useInventoryConfig()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return (\n <KpiCard label={t('inventory.dashboard.stockValue')} icon=\"BarChart3\"\n value={formatCurrency(summary?.totalStockValue ?? 0, currency)} sub={t('inventory.dashboard.totalValue')} />\n )\n}\n\nfunction TotalProductsKpi() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('inventory.dashboard.totalProducts')} icon=\"Package\" value={String(summary?.totalProducts ?? 0)} sub={t('inventory.dashboard.activeItems')} />\n}\n\nfunction LowStockKpi() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('inventory.dashboard.lowStock')} icon=\"AlertTriangle\" value={String(summary?.lowStockCount ?? 0)} sub={t('inventory.dashboard.belowMinimum')} />\n}\n\nfunction OutOfStockKpi() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('inventory.dashboard.outOfStock')} icon=\"TrendingDown\" value={String(summary?.outOfStockCount ?? 0)} sub={t('inventory.dashboard.needRestocking')} />\n}\n\nfunction RecentActivityPanel() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return (\n <Card>\n <CardHeader><CardTitle>{t('inventory.dashboard.recentActivity')}</CardTitle></CardHeader>\n <CardContent>\n <div className=\"flex items-center gap-4 text-sm\">\n <div className=\"flex items-center gap-1.5\">\n <ArrowUpRight className=\"h-3.5 w-3.5 text-success\" />\n <span className=\"text-muted-foreground\">{t('inventory.dashboard.entries')}</span>\n <span className=\"font-medium\">{summary?.movementsByType?.entry ?? 0}</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <ArrowDownRight className=\"h-3.5 w-3.5 text-destructive\" />\n <span className=\"text-muted-foreground\">{t('inventory.dashboard.exits')}</span>\n <span className=\"font-medium\">{summary?.movementsByType?.exit ?? 0}</span>\n </div>\n </div>\n <p className=\"mt-2 text-xs text-muted-foreground\">{t('inventory.dashboard.last7Days')}</p>\n </CardContent>\n </Card>\n )\n}\n\n/**\n * O número que explica os outros.\n *\n * Com o depósito vazio e nenhum mínimo cadastrado, \"Estoque Baixo\" marca ZERO —\n * e o cartão mais importante do painel vira o mais enganoso. Este conta quantos\n * produtos ainda não têm de que estar abaixo. O V1 resolve o mesmo caso ao\n * contrário: trata mínimo 0 como alerta, 93% do catálogo entra na reposição\n * urgente e ninguém olha mais a lista.\n */\nfunction NoMinimumKpi() {\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n const n = summary?.noMinimumCount ?? 0\n return (\n <KpiCard\n label=\"Sem mínimo definido\"\n icon=\"AlertTriangle\"\n value={String(n)}\n sub={n > 0 ? 'Não entram no alerta de estoque baixo' : 'Todo produto tem mínimo'}\n />\n )\n}\n\nfunction RestockRowSkeleton() {\n return (\n <ul className=\"space-y-2\">\n {[0, 1, 2].map((i) => (\n <li key={i} className=\"flex items-center gap-3\">\n <Skeleton className=\"h-4 w-40\" />\n <span className=\"flex-1\" />\n <Skeleton className=\"h-4 w-16\" />\n </li>\n ))}\n </ul>\n )\n}\n\n/** Quantidade com a unidade de medida junto — o número sozinho não informa. */\nfunction qty(value: number, unit?: string): string {\n const n = value.toLocaleString('pt-BR', { maximumFractionDigits: 3 })\n return unit ? `${n} ${unit}` : n\n}\n\n/**\n * O que precisa de compra, com o MOTIVO em cada linha.\n *\n * \"Abaixo do mínimo\" vem antes de \"sem estoque\": o abaixo do mínimo é uma\n * compra que a casa já decidiu que precisa fazer; o zerado pode ser um cadastro\n * que nunca entrou em uso — e aqui são 162 de 169, o que seria uma lista de\n * alarme falso do tamanho do catálogo.\n */\nfunction RestockPanel() {\n const rows = useInventoryStore((s) => s.restock)\n const summary = useInventoryStore((s) => s.summary)\n const fetchRestock = useInventoryStore((s) => s.fetchRestock)\n useEnsureSummary()\n useEffect(() => { void fetchRestock() }, [])\n\n const belowMinimum = (rows ?? []).filter((r) => r.reason === 'below-minimum')\n const outOfStock = (rows ?? []).filter((r) => r.reason === 'out-of-stock')\n const nobodyHasMinimum = noProductHasMinimum(summary)\n\n return (\n <Card>\n <CardHeader><CardTitle>Precisa de reposição</CardTitle></CardHeader>\n <CardContent>\n {rows === null ? (\n <RestockRowSkeleton />\n ) : nobodyHasMinimum ? (\n // Sem nenhum mínimo cadastrado esta lista não é um alerta: é o\n // catálogo inteiro. Dizer o que falta vale mais do que listá-lo.\n <div className=\"text-sm\">\n <p className=\"font-medium\">Nenhum produto tem estoque mínimo definido.</p>\n <p className=\"mt-1 text-muted-foreground\">\n Sem o mínimo na ficha do produto não há reposição a calcular — o alerta\n de estoque baixo fica em zero mesmo com o depósito vazio.\n {/* O número vem do RESUMO, não do tamanho da lista: a lista é\n cortada em 50 e escrever o corte como se fosse o total é\n mentir com precisão — aqui daria \"50\" onde são 162. */}\n {(summary?.outOfStockCount ?? 0) > 0 && ` Hoje ${summary!.outOfStockCount === 1 ? 'há 1 produto' : `há ${summary!.outOfStockCount} produtos`} com saldo zerado.`}\n </p>\n </div>\n ) : rows.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n Nada a repor: todo produto está acima do mínimo.\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {[...belowMinimum, ...outOfStock].slice(0, 8).map((row) => (\n <li key={row.productId} className=\"flex items-center gap-3 text-sm\">\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{row.name}</span>\n {row.categoryName && (\n <span className=\"block truncate text-xs text-muted-foreground\">{row.categoryName}</span>\n )}\n </span>\n {row.reason === 'below-minimum' ? (\n <Badge variant=\"secondary\" className=\"gap-1 shrink-0\">\n <AlertTriangle className=\"h-3 w-3\" aria-hidden=\"true\" />\n {qty(row.currentQuantity, row.unit)} de {qty(row.minQuantity, row.unit)}\n </Badge>\n ) : (\n <Badge variant=\"outline\" className=\"gap-1 shrink-0\">\n <PackageX className=\"h-3 w-3\" aria-hidden=\"true\" />\n Sem estoque\n </Badge>\n )}\n </li>\n ))}\n </ul>\n )}\n </CardContent>\n </Card>\n )\n}\n\n/**\n * A divisão do catálogo — barras ordenadas, UM matiz, com ênfase.\n *\n * Não é rosca: oito classes que todas significam alguma coisa passam do que uma\n * pizza consegue separar, e a fatia dominante aqui é \"Sem categoria\", que não é\n * uma categoria — é um cadastro por fazer. Em rosca ela vira só a maior fatia;\n * em barras com ênfase ela diz o que custa. A cor não carrega identidade\n * (série única, sem legenda): o rótulo carrega, e o texto usa tinta de texto.\n */\nfunction CategoryMixPanel() {\n const mix = useInventoryStore((s) => s.categoryMix)\n const fetchMix = useInventoryStore((s) => s.fetchCategoryMix)\n useEffect(() => { void fetchMix() }, [])\n\n const total = (mix ?? []).reduce((sum, c) => sum + c.count, 0)\n const uncategorized = (mix ?? []).find((c) => c.categoryId === null)\n\n return (\n <Card>\n <CardHeader><CardTitle>Produtos por categoria</CardTitle></CardHeader>\n <CardContent>\n {mix === null ? (\n <RestockRowSkeleton />\n ) : total === 0 ? (\n <p className=\"text-sm text-muted-foreground\">Nenhum produto ativo para distribuir.</p>\n ) : (\n <>\n <ul className=\"space-y-2\">\n {mix.slice(0, 8).map((row) => {\n const pct = Math.round((row.count / total) * 100)\n const isGap = row.categoryId === null\n return (\n <li key={row.categoryId ?? 'none'} className=\"flex items-center gap-3 text-sm\">\n <span className=\"w-40 shrink-0 truncate\" title={row.name}>{row.name}</span>\n <span\n className=\"relative h-2 flex-1 overflow-hidden rounded-full bg-muted\"\n aria-hidden=\"true\"\n >\n <span\n className={isGap ? 'absolute inset-y-0 left-0 rounded-full bg-muted-foreground/60' : 'absolute inset-y-0 left-0 rounded-full bg-primary'}\n style={{ width: `${pct}%` }}\n />\n </span>\n {/* Rótulo direto em todas as linhas: são oito, e ler um\n eixo para oito valores é trabalho que a tela pode poupar. */}\n <span className=\"w-20 shrink-0 text-right tabular-nums text-muted-foreground\">\n {row.count} · {pct}%\n </span>\n </li>\n )\n })}\n </ul>\n {uncategorized && uncategorized.count > 0 && (\n <p className=\"mt-3 text-xs text-muted-foreground\">\n {uncategorized.count} de {total} produtos ainda não têm categoria — é o\n que impede este painel, os filtros e as isenções de taxa de dizerem\n algo útil.\n </p>\n )}\n </>\n )}\n </CardContent>\n </Card>\n )\n}\n\nexport function createInventoryDashboardWidgets(ctx: {\n config: ResolvedInventoryConfig\n provider: InventoryDataProvider\n store: StoreApi<InventoryUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <InventoryContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </InventoryContextProvider>\n )\n Wrapped.displayName = `InventoryWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Stock value is inventory's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the inventory plugin-home, addable via Customize).\n defineKpiWidget({ id: 'inventory.kpi.stock-value', title: 'inventory.dashboard.stockValue', domain: 'inventory', defaultOrder: 0, component: withCtx(StockValueKpi) }),\n defineKpiWidget({ id: 'inventory.kpi.total-products', title: 'inventory.dashboard.totalProducts', domain: 'inventory', defaultOrder: 1, defaultVisible: false, component: withCtx(TotalProductsKpi) }),\n defineKpiWidget({ id: 'inventory.kpi.low-stock', title: 'inventory.dashboard.lowStock', domain: 'inventory', defaultOrder: 2, defaultVisible: false, component: withCtx(LowStockKpi) }),\n defineKpiWidget({ id: 'inventory.kpi.out-of-stock', title: 'inventory.dashboard.outOfStock', domain: 'inventory', defaultOrder: 3, defaultVisible: false, component: withCtx(OutOfStockKpi) }),\n // Escondido na home global (é diagnóstico de cadastro, não manchete do\n // negócio) e visível no painel do estoque, que é onde se conserta.\n defineKpiWidget({ id: 'inventory.kpi.no-minimum', title: 'Sem mínimo definido', domain: 'inventory', defaultOrder: 4, defaultVisible: false, component: withCtx(NoMinimumKpi) }),\n defineCustomWidget({ id: 'inventory.panel.recent-activity', title: 'inventory.dashboard.recentActivity', domain: 'inventory', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(RecentActivityPanel) }),\n defineCustomWidget({ id: 'inventory.panel.restock', title: 'Precisa de reposição', domain: 'inventory', span: 2, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(RestockPanel) }),\n defineCustomWidget({ id: 'inventory.panel.category-mix', title: 'Produtos por categoria', domain: 'inventory', span: 2, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(CategoryMixPanel) }),\n ]\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { RECORD_GROUP, recordRailFields, activeFacet } from '@fayz-ai/core'\nimport { PRODUCT_CATEGORY_KIND, T } from '@fayz-ai/inventory/data/tables'\n\nconst supplierEntity: EntityDef = {\n name: 'Supplier',\n namePlural: 'Suppliers',\n icon: 'Building2',\n layout: 'person',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, searchable: true },\n { key: 'phone', label: 'Phone', type: 'phone', showInTable: true },\n { key: 'email', label: 'Email', type: 'email', showInTable: true },\n { key: 'documentNumber', label: 'Tax ID', type: 'text', showInTable: true },\n // No address field: a supplier has as many as the operation needs (the\n // office that invoices, the warehouse the goods leave from). `layout:\n // 'person'` gives the record an \"Addresses\" tab backed by public.addresses,\n // which is the same relation clients and patients already use.\n // Declares the supplier as someone the house pays, which is what keeps\n // the \"Bank accounts\" section on the record.\n { key: 'payeeAccount', label: 'Bank account', type: 'bank', showInTable: false, showInDetail: false },\n { key: 'notes', label: 'Notes', type: 'textarea' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: {\n table: 'people',\n tenantScoped: true,\n filters: { kind: 'supplier' },\n defaults: { kind: 'supplier' },\n },\n}\n\nconst measurementUnitEntity: EntityDef = {\n name: 'Measurement Unit',\n namePlural: 'Measurement Units',\n icon: 'Ruler',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'abbreviation', label: 'Abbreviation', type: 'text', required: true, showInTable: true, group: 'identity' },\n ...recordRailFields({ tagsTable: T.measurementUnits, activeLabel: 'Ativo', unit: false }),\n ],\n data: { table: T.measurementUnits, tenantScoped: true },\n}\n\nconst productCategoryEntity: EntityDef = {\n name: 'Product Category',\n namePlural: 'Product Categories',\n // O botao de criar interpola o SUBSTANTIVO, e `name` e um literal ingles:\n // sem estas chaves o CrudListView omite o nome e escreve so «Adicionar»,\n // enquanto a lista ao lado escreve «Novo Produto». Ver EntityDef.nameKey.\n nameKey: 'inventory.entity.productCategory',\n namePluralKey: 'inventory.entity.productCategory.plural',\n icon: 'Tag',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'parentId', label: 'Parent', type: 'text', showInTable: false, group: 'identity' },\n ...recordRailFields({ tagsTable: T.productCategories, activeLabel: 'Ativo', unit: false }),\n ],\n data: {\n table: T.productCategories,\n schema: 'public',\n tenantScoped: true,\n filters: { kind: PRODUCT_CATEGORY_KIND },\n defaults: { kind: PRODUCT_CATEGORY_KIND },\n },\n}\n\n// Em português porque a tela é: as vizinhas desta lista («Ativo», «Unidade»,\n// «Identificação») já estavam traduzidas, e duas colunas em inglês no meio\n// delas leem como campo de outro sistema.\nconst stockLocationEntity: EntityDef = {\n name: 'Local de Estoque',\n namePlural: 'Locais de Estoque',\n nameKey: 'inventory.entity.stockLocation',\n namePluralKey: 'inventory.entity.stockLocation.plural',\n icon: 'Warehouse',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Nome', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'description', label: 'Descrição', type: 'textarea', showInTable: true, group: 'identity' },\n ...recordRailFields({ tagsTable: T.stockLocations, activeLabel: 'Ativo', unit: true }),\n ],\n data: { table: T.stockLocations, tenantScoped: true },\n}\n\nexport const inventoryRegistries: PluginRegistryDef[] = [\n // --- Editable ---\n {\n id: 'suppliers',\n entity: supplierEntity,\n icon: 'Building2',\n description: 'Manage your product and material suppliers',\n display: 'table',\n },\n {\n id: 'product-categories',\n entity: productCategoryEntity,\n icon: 'Tag',\n description: 'Product categories for organization',\n display: 'table',\n },\n {\n id: 'stock-locations',\n entity: stockLocationEntity,\n icon: 'Warehouse',\n description: 'Onde a mercadoria fica guardada',\n display: 'table',\n },\n // --- Seeded defaults, still editable by the tenant ---\n {\n id: 'measurement-units',\n entity: measurementUnitEntity,\n icon: 'Ruler',\n description: 'Standard units of measure',\n display: 'table',\n seedData: [\n { id: 'mu-unit', name: 'Unit', abbreviation: 'un', isActive: true },\n { id: 'mu-box', name: 'Box', abbreviation: 'box', isActive: true },\n { id: 'mu-kg', name: 'Kilogram', abbreviation: 'kg', isActive: true },\n { id: 'mu-g', name: 'Gram', abbreviation: 'g', isActive: true },\n { id: 'mu-l', name: 'Liter', abbreviation: 'L', isActive: true },\n { id: 'mu-ml', name: 'Milliliter', abbreviation: 'mL', isActive: true },\n ],\n },\n]\n","import type { SetupGuideDef } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Como o Estoque entra em pé.\n//\n// A ordem aqui não é preferência, é dependência dura: unidade de medida →\n// local → produto → saldo. Quem cadastra o produto antes de ter local e\n// unidade acaba com um catálogo bonito e saldo nenhum, e a conclusão errada\n// (\"o estoque não funciona\") é sempre a mesma.\n//\n// A outra coisa que estes guias existem para dizer: o estoque deste produto é\n// um RAZÃO append-only. Nada se apaga; corrigir é lançar a diferença. É a\n// regra que mais surpreende quem vem de planilha.\n// ---------------------------------------------------------------------------\n\nconst SETTINGS = '/settings/inventory'\n\nconst foundations: SetupGuideDef = {\n feature: 'inventory.cadastros-base',\n title: 'Cadastros do Estoque',\n about:\n 'As quatro listas de trás — unidades de medida, locais, categorias e fornecedores — sem as quais o cadastro de produto não tem o que escolher.',\n route: `${SETTINGS}/stock-locations`,\n step: 'inventory.foundations',\n requires: [],\n steps: [\n {\n do: 'Configurações › Estoque › Unidades de medida: confira o que já vem (un, cx, kg, g, L, mL) e acrescente o que a casa usa.',\n route: `${SETTINGS}/measurement-units`,\n },\n {\n do: 'Locais de estoque: cadastre onde as coisas ficam de verdade — \"Sala 2\", \"Depósito\", \"Bancada\".',\n why: 'Saldo é sempre de um produto NUM local. Sem local não existe saldo.',\n route: `${SETTINGS}/stock-locations`,\n },\n { do: 'Categorias: poucas e grandes. Elas são para achar, não para classificar contabilmente.', route: `${SETTINGS}/product-categories` },\n { do: 'Fornecedores: só os que você compra de verdade.', route: `${SETTINGS}/suppliers` },\n ],\n rules: [\n 'Local de estoque não é unidade da rede. Uma unidade pode ter vários locais; um local pertence a uma unidade.',\n ],\n pitfalls: [\n 'Pular os locais e cadastrar produto: o produto existe, o saldo não tem onde morar, e a tela parece quebrada.',\n ],\n answers: [\n 'Por onde eu começo no estoque?',\n 'Onde cadastro os lugares onde guardo as coisas?',\n 'Como crio uma unidade de medida?',\n ],\n next: ['inventory.produtos'],\n}\n\nconst products: SetupGuideDef = {\n feature: 'inventory.produtos',\n title: 'Produtos',\n about:\n 'O catálogo do que a casa guarda, vende e consome. Um produto diz em que unidade ele é contado e quanto custa — e é isso que faz o resto do estoque ter sentido.',\n route: '/inventory/products/list',\n step: 'inventory.catalog',\n requires: [\n {\n title: 'Unidades de medida e categorias',\n feature: 'inventory.cadastros-base',\n route: `${SETTINGS}/measurement-units`,\n check: 'o formulário de produto oferece unidade e categoria para escolher',\n },\n {\n title: 'Locais de estoque',\n feature: 'inventory.cadastros-base',\n route: `${SETTINGS}/stock-locations`,\n check: 'existe pelo menos um local — é onde o saldo vai morar',\n },\n ],\n // O tour navega até o cadastro de produto; os passos sem âncora ficam de\n // briefing (a tela é um CRUD genérico, sem campos ancoráveis por enquanto).\n steps: [\n { do: 'O Estoque mora aqui.', anchor: 'nav./inventory', route: '/inventory' },\n { do: 'Produtos ficam neste menu.', anchor: 'modnav.products', route: '/inventory/products/list' },\n { do: 'Cadastre um produto novo aqui.', anchor: 'action.new-product', route: '/inventory/products/list' },\n {\n do: 'Escolha a unidade em que você CONTA o produto, não a que o fornecedor vende.',\n why: 'Se você conta ampolas e ele vende caixa, o produto é em ampola — a conversão é problema da entrada.',\n },\n { do: 'Defina o estoque mínimo do que não pode faltar; é o que gera aviso.' },\n { do: 'Depois de salvar, dê a entrada inicial para o produto passar a ter saldo.', route: '/inventory/stock/entry' },\n ],\n rules: [\n 'Cadastrar produto NÃO cria saldo. Saldo só nasce de um movimento de entrada.',\n 'Trocar a unidade de medida de um produto que já tem movimento reinterpreta o histórico inteiro. Crie outro produto em vez disso.',\n ],\n answers: [\n 'Como cadastro meus produtos?',\n 'Cadastrei o produto e o estoque está zerado',\n 'Como configuro o estoque mínimo?',\n ],\n next: ['inventory.movimentacoes'],\n}\n\nconst movements: SetupGuideDef = {\n feature: 'inventory.movimentacoes',\n title: 'Entradas e Saídas',\n about:\n 'Tudo que entra e sai, com data, quem fez e por quê. É o razão do estoque: o saldo de hoje é a soma disto, não um número que alguém digita.',\n route: '/inventory/stock/entry',\n requires: [\n {\n title: 'Produtos cadastrados',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'dá para escolher um produto no movimento',\n },\n {\n title: 'Local de estoque',\n feature: 'inventory.cadastros-base',\n route: `${SETTINGS}/stock-locations`,\n check: 'o movimento pede um local e existe opção',\n },\n ],\n // Navega até a tela de entrada; a `practice` deixa a pessoa dar a entrada.\n steps: [\n { do: 'O Estoque mora aqui.', anchor: 'nav./inventory', route: '/inventory' },\n { do: 'Abra Entrada neste menu para lançar a compra que chegou.', anchor: 'modnav.stock-entry', route: '/inventory/stock/entry' },\n { do: 'Saída é para o que foi descartado, perdido ou usado fora de um atendimento.' },\n { do: 'O histórico mostra tudo, inclusive o que o sistema lançou sozinho.' },\n ],\n practice: [\n { anchor: 'inventory.entry-product', label: 'Escolha o produto que chegou' },\n { anchor: 'inventory.entry-save', label: 'Confirme a entrada', final: true },\n ],\n rules: [\n 'O razão é append-only: nada é apagado. Corrigir é lançar o movimento contrário — e o histórico guarda os dois.',\n 'Venda concluída baixa estoque sozinha. O que aparecer no histórico sem ninguém ter lançado veio daí.',\n ],\n pitfalls: [\n 'Ajustar saldo \"editando o produto\". Não existe: saldo só muda por movimento.',\n ],\n answers: [\n 'Como dou entrada numa compra?',\n 'Como corrijo um lançamento errado?',\n 'De onde vieram essas saídas que eu não lancei?',\n ],\n next: ['inventory.contagem', 'inventory.auditoria-de-uso'],\n}\n\nconst usageAudit: SetupGuideDef = {\n feature: 'inventory.auditoria-de-uso',\n title: 'Auditoria de Uso',\n about:\n 'O que os atendimentos consumiram de verdade, lado a lado com o que era o padrão. Serve para achar o consumo que fugiu — e para corrigir a quantidade lançada errada.',\n route: '/inventory/stock/usage/audit',\n requires: [\n {\n title: 'Atendimentos concluídos que consumiram material',\n check: 'a lista traz linhas; vazia quer dizer que nada foi consumido no período, não que a tela esteja quebrada',\n },\n {\n title: 'Produtos com custo preenchido',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'a coluna de custo mostra valor',\n required: false,\n },\n ],\n steps: [\n { do: 'Estoque › Auditoria de uso e escolha o período.', route: '/inventory/stock/usage/audit' },\n { do: 'Compare o consumido com o padrão do serviço; olhe o que está fora da curva.' },\n { do: 'Corrija a linha quando a quantidade tiver sido lançada errada.' },\n ],\n rules: [\n 'Aqui é DEPOIS da baixa, não antes: o atendimento já consumiu. A pergunta é \"foi isso mesmo?\", e a ação é Corrigir.',\n 'Corrigir LANÇA a diferença no razão — não reescreve o movimento antigo.',\n ],\n answers: [\n 'O consumo do salão está alto, onde vejo?',\n 'A quantidade foi lançada errada, dá para arrumar?',\n 'Isto aprova a baixa de estoque?',\n ],\n}\n\nconst counts: SetupGuideDef = {\n feature: 'inventory.contagem',\n title: 'Contagem de Estoque',\n about:\n 'O inventário: conta-se o que existe na prateleira e o sistema lança a diferença contra o que ele achava que tinha.',\n route: '/inventory/stock/counts',\n requires: [\n {\n title: 'Produtos com saldo',\n feature: 'inventory.movimentacoes',\n route: '/inventory/stock/history',\n check: 'os produtos já têm entrada lançada — contar contra saldo zero não mede nada',\n },\n ],\n steps: [\n { do: 'Estoque › Contagens › Nova, escolhendo o local a contar.', route: '/inventory/stock/counts/new' },\n { do: 'Conte de verdade e registre o que achou, item por item.' },\n { do: 'Feche a sessão: a diferença vira movimento de ajuste com o motivo \"contagem\".' },\n ],\n rules: [\n 'A contagem é por LOCAL. Contar meio depósito e fechar a sessão zera o que não foi contado.',\n ],\n answers: [\n 'Como faço inventário?',\n 'Como acerto o estoque com o que tem na prateleira?',\n ],\n}\n\nconst recipes: SetupGuideDef = {\n feature: 'inventory.receitas',\n title: 'Fichas Técnicas',\n about:\n 'A receita de cada produto que a casa produz: os insumos e as quantidades, por componente e estação, com o custo calculado e o CMV contra o preço de venda.',\n route: '/inventory/recipes/list',\n requires: [\n {\n title: 'Insumos cadastrados',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'o campo Insumo da ficha encontra o item ao digitar (produto com Insumo ou Intermediário ligado)',\n },\n {\n title: 'Custo de cada insumo',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'a coluna Custo da linha mostra R$ em vez de —; o lápis da própria ficha resolve',\n },\n {\n title: 'Preço de venda no produto da ficha',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'o CMV da ficha mostra % em vez de —',\n },\n ],\n steps: [\n { do: 'Estoque › Fichas Técnicas › Nova Ficha Técnica, e escolha o produto.', route: '/inventory/recipes/list' },\n { do: 'Confira Rendimento, Unidade e Tipo de rendimento: Porção quando a ficha é 1 unidade vendida, Lote quando ela produz o rendimento.' },\n { do: 'Adicionar Grupo para cada componente (ex.: Preparo da Costela, Montagem) e escolha a estação.' },\n { do: 'Em cada componente, Adicionar Item: insumo, quantidade e unidade. Custo — = clique no lápis e informe o preço.' },\n { do: 'Salvar Ficha Técnica. O custo por unidade vira o custo do produto.' },\n ],\n rules: [\n 'Ter ficha é ser produzido: salvar liga «Produto Produzido» no produto.',\n 'O custo da ficha substitui o custo do produto, e é ele que outra ficha lê quando este produto entra como insumo.',\n 'Saídas da produção: ou todas as aproveitáveis têm %, somando 100, ou todas ficam em branco (rateio pelo valor de mercado).',\n 'A sugestão da IA preenche a tela e não grava nada; ela substitui os componentes que estavam lá.',\n ],\n answers: [\n 'Por que o produto não tem a aba Ficha Técnica?',\n 'Qual a diferença entre rendimento Porção e Lote?',\n 'Por que o insumo aparece com custo —?',\n 'Salvei a ficha e o custo do produto mudou sozinho. É normal?',\n ],\n}\n\nexport const inventorySetupGuides: SetupGuideDef[] = [\n foundations,\n products,\n movements,\n counts,\n usageAudit,\n recipes,\n]\n","import { countByTenant, type OnboardingProgramDef } from '@fayz-ai/core'\nimport { T } from '@fayz-ai/inventory/data/tables'\n\n/**\n * Implantação do Estoque — e a ordem aqui é dependência, não gosto.\n *\n * Local antes de produto, produto antes de saldo. Quem cadastra o catálogo\n * primeiro termina com produto sem lugar onde ter saldo, conclui que \"o\n * estoque não funciona\" e desiste na primeira semana. Este programa existe\n * principalmente para impedir essa sequência.\n */\nexport function buildInventoryOnboarding(): OnboardingProgramDef {\n return {\n id: 'inventory',\n title: 'Seu estoque de pé',\n order: 60,\n role: 'operations',\n instructions: `Você está implantando o ESTOQUE. A ordem é dependência dura, não preferência: local → produto → saldo.\n\n- Comece pelos LOCAIS. Sem local não existe saldo, e produto cadastrado antes disso não tem onde ter quantidade. Se a pessoa quiser pular para produtos, explique isso em uma linha e siga com ela mesmo assim — mas volte.\n- Unidade de medida é a que a casa CONTA, não a que o fornecedor vende. Pergunte assim: \"quando você olha a prateleira, você conta o quê?\".\n- Cadastrar produto não cria saldo. Diga isso ANTES de a pessoa cadastrar dez produtos e estranhar o zero.\n- O razão é append-only: nada é apagado, corrigir é lançar a diferença. É a regra que mais surpreende quem vem de planilha — diga uma vez, quando aparecer a primeira correção.\n- Cada passo tem um guia (\\`readSetupGuide\\`) com as armadilhas. Leia antes de conduzir.`,\n steps: [\n {\n key: 'foundations',\n title: 'Diga onde as coisas ficam',\n description: 'Sala, depósito, bancada — saldo é sempre de um produto NUM lugar.',\n icon: 'Warehouse',\n route: '/settings/inventory/stock-locations',\n priority: 'high',\n agentHint:\n 'Pergunte onde as coisas ficam guardadas de verdade e use as palavras da pessoa. Dois ou três locais bastam para começar.',\n howTo:\n 'Configurações › Estoque › Locais de estoque. Cadastre os lugares reais onde o material fica — \"Sala 2\", \"Depósito\", \"Bancada\". Saldo é sempre de um produto num local: sem isso, o produto existe e a quantidade não tem onde morar.',\n celebrate: 'Cada coisa no seu lugar 📦',\n script: [\n { kind: 'say', text: 'Estoque começa pelo lugar: onde as coisas ficam guardadas.' },\n { kind: 'goto', route: '/settings/inventory/stock-locations' },\n {\n kind: 'ask',\n text: 'Estamos em Locais de estoque. Pergunte onde o material fica guardado na casa e cadastre com as palavras da própria pessoa.',\n },\n ],\n check: async () => (await countByTenant(T.stockLocations)) > 0,\n },\n {\n key: 'catalog',\n title: 'Traga o que você guarda',\n description: 'O catálogo do que a casa usa e vende, na unidade em que você conta.',\n icon: 'Package',\n route: '/inventory/products/list',\n priority: 'high',\n replaces: 'catalog',\n agentHint:\n 'Pergunte onde o catálogo está hoje (planilha, nota do fornecedor, cabeça). Um produto já destrava o resto — não espere pelos duzentos.',\n howTo:\n 'Estoque › Produtos › Novo. Escolha a unidade em que VOCÊ conta o produto (se você conta ampola e o fornecedor vende caixa, é ampola). Defina o estoque mínimo do que não pode faltar. Cadastrar não cria saldo — o saldo vem da entrada, no passo seguinte.',\n celebrate: 'Catálogo no ar 🎉',\n check: async () => (await countByTenant('products')) > 0,\n },\n {\n key: 'first-entry',\n title: 'Dê a primeira entrada',\n description: 'É o movimento que faz o saldo existir.',\n icon: 'ArrowDownToLine',\n route: '/inventory/stock/entry',\n agentHint:\n 'Faça junto com um produto só, para a pessoa VER o saldo aparecer. É o momento em que o módulo deixa de ser abstrato.',\n howTo:\n 'Estoque › Movimentações › Entrada. Escolha o produto, o local e a quantidade que você tem hoje na prateleira. O saldo aparece na hora, e o lançamento fica no histórico com data e autor — nada aqui é apagado depois; corrigir é lançar a diferença.',\n celebrate: 'Saldo na mão 📈',\n script: [\n { kind: 'say', text: 'Agora o que faz o saldo existir: uma entrada.' },\n { kind: 'goto', route: '/inventory/stock/entry' },\n { kind: 'await', text: 'Escolha um produto, o local e a quantidade que tem hoje. Eu vejo daqui quando entrar.' },\n ],\n check: async () => (await countByTenant(T.stockMovements)) > 0,\n },\n ],\n }\n}\n","// inventory.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"inventory.nav.panel\": \"Panel\",\n \"inventory.panel.columnProduct\": \"Product\",\n \"inventory.panel.columnLocation\": \"Location\",\n \"inventory.panel.columnBatch\": \"Batch\",\n \"inventory.panel.columnExpiry\": \"Expiry\",\n \"inventory.panel.columnQuantity\": \"Qty / min\",\n \"inventory.panel.columnValue\": \"Value\",\n \"inventory.panel.empty\": \"No stock position for this selection.\",\n \"inventory.panel.totalLines\": \"Lines\",\n \"inventory.panel.totalValue\": \"Stock value\",\n \"inventory.panel.unsupported\": \"This app does not expose the stock panel.\",\n \"inventory.filters.stockState\": \"Stock status\",\n \"inventory.filters.health.negative\": \"Negative\",\n \"inventory.filters.health.below_min\": \"Below min\",\n \"inventory.filters.health.zero\": \"Zero\",\n \"inventory.filters.health.ok\": \"OK\",\n \"inventory.filters.expiry\": \"Expiry\",\n \"inventory.filters.expiry.all\": \"All\",\n \"inventory.filters.expiry.expired\": \"Expired\",\n \"inventory.filters.expiry.le30\": \"Expires in 30 days\",\n \"inventory.filters.expiry.le60\": \"Expires in 60 days\",\n \"inventory.filters.expiry.le90\": \"Expires in 90 days\",\n \"inventory.filters.expiry.none\": \"No expiry\",\n \"inventory.filters.batchPlaceholder\": \"Batch\",\n \"inventory.filters.productPlaceholder\": \"Search product...\",\n \"inventory.filters.countState\": \"Count state\",\n \"inventory.filters.countAll\": \"All\",\n \"inventory.filters.countPending\": \"To count\",\n \"inventory.filters.countDone\": \"Counted\",\n \"inventory.filters.itemSearchPlaceholder\": \"Search product or code...\",\n \"inventory.filters.title\": \"Filters\",\n \"inventory.filters.apply\": \"Search\",\n \"inventory.filters.pending\": \"Filters changed\",\n \"inventory.filters.pendingHint\": \"The list still shows the previous selection. Click Search to apply.\",\n \"inventory.filters.clear\": \"Clear\",\n \"inventory.filters.more\": \"More filters\",\n \"inventory.filters.less\": \"Fewer filters\",\n \"inventory.filters.from\": \"From\",\n \"inventory.filters.to\": \"To\",\n \"inventory.filters.allTypes\": \"All types\",\n \"inventory.filters.location\": \"Location\",\n \"inventory.filters.allLocations\": \"All locations\",\n \"inventory.filters.category\": \"Category\",\n \"inventory.filters.allCategories\": \"All categories\",\n \"inventory.filters.kind\": \"Item type\",\n \"inventory.filters.allKinds\": \"All\",\n \"inventory.filters.status\": \"Status\",\n \"inventory.filters.allStatuses\": \"All\",\n \"inventory.stock.pendingRetry\": \"Confirmation is pending. Do not create another entry. Retry the same details before leaving this screen.\",\n \"inventory.stock.refreshAfterCommit\": \"Movement recorded. Refresh the screen to see the balance.\",\n \"inventory.dashboard.activeItems\": \"Active items\",\n \"inventory.dashboard.belowMinimum\": \"Below minimum\",\n \"inventory.dashboard.entries\": \"Entries:\",\n \"inventory.dashboard.exits\": \"Exits:\",\n \"inventory.dashboard.last7Days\": \"Last 7 days\",\n \"inventory.dashboard.lowStock\": \"Low Stock\",\n \"inventory.dashboard.needRestocking\": \"Need restocking\",\n \"inventory.dashboard.outOfStock\": \"Out of Stock\",\n \"inventory.dashboard.quickActions\": \"Quick Actions\",\n \"inventory.dashboard.quickActionsDesc\": \"Use the sidebar to record stock entries, exits, or manage products.\",\n \"inventory.dashboard.recentActivity\": \"Recent Activity\",\n \"inventory.dashboard.stockValue\": \"Stock Value\",\n \"inventory.dashboard.totalProducts\": \"Total Products\",\n \"inventory.dashboard.totalValue\": \"Total inventory value\",\n \"inventory.history.noMovements\": \"No movements recorded\",\n \"inventory.history.columnDate\": \"Date\",\n \"inventory.history.columnProduct\": \"Product\",\n \"inventory.history.columnType\": \"Type\",\n \"inventory.history.columnLocation\": \"Location\",\n \"inventory.history.columnQty\": \"Qty\",\n \"inventory.history.columnTotal\": \"Total\",\n \"inventory.history.newEntry\": \"New entry\",\n \"inventory.history.newExit\": \"Exit\",\n \"inventory.nav.recipes\": \"Recipes\",\n \"inventory.entity.stockLocation\": \"Stock Location\",\n \"inventory.entity.stockLocation.plural\": \"Stock Locations\",\n \"inventory.entity.productCategory\": \"Category\",\n \"inventory.entity.productCategory.plural\": \"Categories\",\n \"registry.suppliers\": \"Suppliers\",\n \"registry.suppliers.description\": \"Who you buy from\",\n \"registry.product-categories\": \"Categories\",\n \"registry.product-categories.description\": \"How the catalogue is grouped\",\n \"registry.stock-locations\": \"Stock locations\",\n \"registry.stock-locations.description\": \"Where stock physically sits — cold room, dry store, freezer\",\n \"registry.measurement-units\": \"Units of measure\",\n \"registry.measurement-units.description\": \"How each item is counted\",\n \"inventory.history.searchPlaceholder\": \"Search movements...\",\n \"inventory.history.subtitle\": \"All stock movements\",\n \"inventory.history.title\": \"Stock History\",\n \"inventory.nav.dashboard\": \"Summary\",\n \"inventory.nav.entry\": \"Entry\",\n \"inventory.nav.exit\": \"Exit\",\n \"inventory.nav.history\": \"History\",\n \"inventory.nav.inventory\": \"Inventory\",\n \"inventory.nav.list\": \"List\",\n \"inventory.nav.new\": \"New\",\n \"inventory.nav.products\": \"Products\",\n \"inventory.nav.stock\": \"Movements\",\n \"inventory.page.newProduct\": \"New Product\",\n \"inventory.page.newProductDesc\": \"Add a product to your catalog\",\n \"inventory.page.settingsSubtitle\": \"Preferences, suppliers, categories, and units\",\n \"inventory.page.settingsTitle\": \"Inventory Settings\",\n \"inventory.page.stockEntry\": \"Stock Entry\",\n \"inventory.page.stockEntryDesc\": \"Record goods received\",\n \"inventory.page.stockExit\": \"Stock Exit\",\n \"inventory.page.stockExitDesc\": \"Record goods used or sold\",\n \"inventory.recipeDetail.active\": \"Active\",\n \"inventory.recipeDetail.backToList\": \"Back to list\",\n \"inventory.recipeDetail.inactive\": \"Inactive\",\n \"inventory.recipeDetail.ingredientCount\": \"Ingredients\",\n \"inventory.recipeDetail.ingredientsTitle\": \"Ingredients\",\n \"inventory.recipeDetail.instructions\": \"Instructions\",\n \"inventory.recipeDetail.noIngredients\": \"No ingredients defined\",\n \"inventory.recipeDetail.notFound\": \"Recipe not found\",\n \"inventory.recipeDetail.prepTime\": \"Prep time\",\n \"inventory.recipeDetail.produces\": \"Produces\",\n \"inventory.recipeDetail.recipes\": \"Recipes\",\n \"inventory.recipeDetail.yield\": \"Yield\",\n \"inventory.recipes.createFirst\": \"Create your first recipe\",\n \"inventory.recipes.ingredients\": \"Ingredients\",\n \"inventory.recipes.newRecipe\": \"New recipe\",\n \"inventory.recipes.noRecipes\": \"No produced products yet\",\n \"inventory.recipes.exporting\": \"Building the recipes spreadsheet…\",\n \"inventory.recipes.exported\": \"Spreadsheet downloaded\",\n \"inventory.sheet.print\": \"Print\",\n \"inventory.sheet.printSaveFirst\": \"Save the sheet before printing\",\n \"inventory.recipes.noCategory\": \"No category\",\n \"inventory.recipes.filterKind\": \"Type\",\n \"inventory.recipes.filterKindAll\": \"All types\",\n \"inventory.recipes.kindSale\": \"Sale\",\n \"inventory.recipes.kindIntermediate\": \"Intermediate\",\n \"inventory.recipes.filterCategory\": \"Category\",\n \"inventory.recipes.filterCategoryAll\": \"All categories\",\n \"inventory.recipes.filterCmv\": \"CMV\",\n \"inventory.recipes.filterCmvAll\": \"Any CMV\",\n \"inventory.recipes.cmvHigh\": \"CMV above {{pct}}%\",\n \"inventory.recipes.cmvGood\": \"Good CMV (below {{pct}}%)\",\n \"inventory.recipes.cmvAttention\": \"CMV watch ({{from}}–{{to}}%)\",\n \"inventory.recipes.cmvNone\": \"No CMV\",\n \"inventory.recipes.produces\": \"Produces:\",\n \"inventory.recipes.productionFormulas\": \"{{count}} production formulas\",\n \"inventory.recipes.recipesDesc\": \"Recipes define how to produce products from ingredients\",\n \"inventory.recipes.title\": \"Recipes\",\n \"inventory.recipes.yield\": \"Yield\",\n \"inventory.stock.additionalDetails\": \"Additional details (optional)\",\n \"inventory.stock.adjustmentDesc\": \"Count correction\",\n \"inventory.stock.adjustmentLabel\": \"Adjustment\",\n \"inventory.stock.back\": \"Back\",\n \"inventory.stock.batchNumber\": \"Batch Number\",\n \"inventory.stock.currentStock\": \"Current Stock\",\n \"inventory.stock.destination\": \"Destination\",\n \"inventory.stock.document\": \"Document\",\n \"inventory.stock.documentNumber\": \"Document Number\",\n \"inventory.stock.entry\": \"Stock Entry\",\n \"inventory.stock.entryDesc\": \"Receiving goods\",\n \"inventory.stock.entryLabel\": \"Entry\",\n \"inventory.stock.exit\": \"Stock Exit\",\n \"inventory.stock.exitDesc\": \"Using or selling\",\n \"inventory.stock.exitLabel\": \"Exit\",\n \"inventory.stock.expirationDate\": \"Expiration Date\",\n \"inventory.stock.fromLocation\": \"From Location\",\n \"inventory.stock.locationLabel\": \"Location\",\n \"inventory.stock.lossDesc\": \"Waste or damage\",\n \"inventory.stock.lossLabel\": \"Loss\",\n \"inventory.stock.movement\": \"Stock Movement\",\n \"inventory.stock.movementDetails\": \"Movement Details\",\n \"inventory.stock.movementType\": \"Movement type\",\n \"inventory.stock.next\": \"Next\",\n \"inventory.stock.notes\": \"Notes\",\n \"inventory.stock.product\": \"Product\",\n \"inventory.stock.quantity\": \"Quantity *\",\n \"inventory.stock.quantityLabel\": \"Quantity\",\n \"inventory.stock.reason\": \"Reason *\",\n \"inventory.stock.reasonLabel\": \"Reason\",\n \"inventory.stock.recordMovement\": \"Record Movement\",\n \"inventory.stock.recorded\": \"Recorded\",\n \"inventory.stock.recording\": \"Recording...\",\n \"inventory.stock.searchProduct\": \"Search by name, SKU, or barcode...\",\n \"inventory.stock.stepOf\": \"Step {{step}} of 3\",\n \"inventory.stock.supplier\": \"Supplier\",\n \"inventory.stock.toLocation\": \"To Location *\",\n \"inventory.stock.total\": \"Total\",\n \"inventory.stock.totalCost\": \"Total Cost\",\n \"inventory.stock.transferDesc\": \"Between locations\",\n \"inventory.stock.transferLabel\": \"Transfer\",\n \"inventory.stock.unitCost\": \"Unit Cost\",\n \"inventory.stock.unitCostLabel\": \"Unit Cost\",\n \"inventory.stock.searchSupplier\": \"Search supplier...\",\n \"inventory.stock.noSuppliers\": \"No supplier registered\",\n \"inventory.productDetail.stockTab\": \"Stock\",\n \"inventory.productDetail.positionsTitle\": \"Stock by location\",\n \"inventory.productDetail.onHand\": \"On hand\",\n \"inventory.productDetail.minimum\": \"Minimum\",\n \"inventory.productDetail.noPositions\": \"No stock in any location\",\n \"inventory.productDetail.historyTitle\": \"Movement history\",\n \"inventory.productDetail.undoLast\": \"Undo last movement\",\n \"inventory.productDetail.undoTitle\": \"Undo the last movement?\",\n \"inventory.productDetail.undoDescription\": \"{{type}} of {{quantity}} on {{date}} leaves the history, and the stock it moved goes back.\",\n \"inventory.productDetail.undoConfirm\": \"Undo\",\n \"inventory.productDetail.undone\": \"Movement undone\",\n \"inventory.productDetail.undoFailed\": \"Could not undo the movement\",\n \"inventory.productDetail.notFound\": \"Product not found\",\n \"inventory.productDetail.backToList\": \"Back to products\",\n \"inventory.onboarding.welcome\": \"Welcome to Inventory\",\n \"inventory.onboarding.description\": \"Track products, manage stock levels, and monitor movements across your business.\",\n \"inventory.onboarding.skip\": \"Skip setup\",\n \"inventory.onboarding.getStarted\": \"Get Started\",\n \"inventory.onboarding.units.title\": \"Measurement Units\",\n \"inventory.onboarding.units.description\": \"Default units (Unit, Box, Kg, L, etc.) are ready. Customize them anytime in Settings.\",\n \"inventory.onboarding.locations.title\": \"Stock Locations\",\n \"inventory.onboarding.locations.description\": \"A default storage location has been created. Add more for multi-location tracking.\",\n \"inventory.onboarding.start\": \"Start using Inventory\",\n \"inventory.onboarding.preparing\": \"Preparing inventory...\",\n \"inventory.onboarding.setupError\": \"We could not prepare the default units and stock location. Try again.\",\n \"inventory.quickActions.newProduct\": \"New Product\",\n \"inventory.quickActions.newProductDesc\": \"Add a product to your catalog\",\n \"inventory.quickActions.stockEntry\": \"Stock Entry\",\n \"inventory.quickActions.stockEntryDesc\": \"Record goods received\",\n \"inventory.quickActions.stockExit\": \"Stock Exit\",\n \"inventory.quickActions.stockExitDesc\": \"Record goods used or sold\",\n \"inventory.settingsPage.title\": \"Inventory Settings\",\n \"inventory.settingsPage.subtitle\": \"Manage units, categories, and stock locations\",\n \"inventory.settings.modules\": \"Modules\",\n \"inventory.settings.modulesDesc\": \"What this house shows inside Inventory\",\n \"inventory.settings.recipes\": \"Recipes\",\n \"inventory.settings.recipesDesc\": \"The bill of materials that says what each product consumes\",\n \"inventory.settings.requisitions\": \"Requisitions\",\n \"inventory.settings.requisitionsDesc\": \"Internal requests for material between areas\",\n \"inventory.settings.usageAuditDesc\": \"What left stock against what was sold\",\n \"inventory.settings.temperature\": \"Temperature\",\n \"inventory.settings.temperatureDesc\": \"Temperature log for refrigerated locations\",\n \"inventory.settings.stockManagement\": \"Stock Management\",\n \"inventory.settings.stockManagementDesc\": \"How stock levels are tracked\",\n \"inventory.settings.lowStockAlerts\": \"Low stock alerts\",\n \"inventory.settings.lowStockAlertsDesc\": \"Show warnings when products fall below minimum quantity\",\n \"inventory.settings.requireReason\": \"Require reason for adjustments\",\n \"inventory.settings.requireReasonDesc\": \"Make reason mandatory for stock adjustments and losses\",\n \"inventory.settings.autoDeduct\": \"Auto-deduct on service\",\n \"inventory.settings.autoDeductDesc\": \"Automatically deduct products when a service is executed\",\n \"inventory.settings.products\": \"Products\",\n \"inventory.settings.productsDesc\": \"Product catalog behavior\",\n \"inventory.settings.requireSku\": \"Require SKU\",\n \"inventory.settings.requireSkuDesc\": \"Make SKU mandatory when creating products\",\n \"inventory.settings.allowNegative\": \"Allow negative stock\",\n \"inventory.settings.allowNegativeDesc\": \"Allow stock quantities to go below zero\",\n \"inventory.settings.notifications\": \"Notifications\",\n \"inventory.settings.notificationsDesc\": \"Alerts and reminders\",\n \"inventory.settings.lowStockEmail\": \"Low stock email alerts\",\n \"inventory.settings.lowStockEmailDesc\": \"Send email when products reach minimum quantity\",\n \"inventory.settings.expiryWarnings\": \"Expiry date warnings\",\n \"inventory.settings.expiryWarningsDesc\": \"Alert before products expire (batch tracking)\",\n // Product fichas — ported from the V1 product form (the per-type tabs).\n \"inventory.productForm.commissionPercent\": \"Commission % (sale)\",\n \"inventory.productForm.commissionPercentHint\": \"What the professional earns when selling this product.\",\n \"inventory.productForm.chartAccount\": \"Chart of accounts\",\n \"inventory.productForm.avgPurchasePrice\": \"Average purchase price\",\n \"inventory.productForm.avgPurchasePriceHint\": \"Rewritten on every stock entry.\",\n \"inventory.productForm.packaging\": \"Packaging and conversions\",\n \"inventory.productForm.packagingDesc\": \"How the house buys, when that differs from how it counts.\",\n \"inventory.productForm.contentPerUnit\": \"Content per unit\",\n \"inventory.productForm.contentPerUnitHint\": \"How much fits in ONE stock unit (a bottle holds 300 ml).\",\n \"inventory.productForm.contentUnit\": \"Content unit\",\n \"inventory.productForm.purchaseUnit\": \"Purchase unit\",\n \"inventory.productForm.conversionFactor\": \"Quantity per package\",\n \"inventory.productForm.conversionFactorHint\": \"How many stock units come in one purchase unit.\",\n \"inventory.productForm.flagIngredient\": \"Ingredient\",\n \"inventory.productForm.flagIngredientHint\": \"Shows up in recipes.\",\n \"inventory.productForm.flagForSale\": \"For sale\",\n \"inventory.productForm.flagForSaleHint\": \"Menu, POS, catalogue.\",\n \"inventory.productForm.flagIntermediate\": \"Intermediate\",\n \"inventory.productForm.flagIntermediateHint\": \"Made to be used later (sauce, dough).\",\n \"inventory.productForm.flagAsset\": \"Asset\",\n \"inventory.productForm.flagAssetHint\": \"Equipment: it goes on the balance sheet, it is not consumed.\",\n \"inventory.productForm.flagProduced\": \"Produced product\",\n \"inventory.productForm.flagProducedHint\": \"Comes from a recipe — enables the recipe sheet.\",\n \"inventory.productForm.flagResale\": \"Resale\",\n \"inventory.productForm.flagResaleHint\": \"Goods meant to be resold to the customer.\",\n \"inventory.productForm.flagTracked\": \"High value / labelled\",\n \"inventory.productForm.flagTrackedHint\": \"Each unit is tracked individually.\",\n \"inventory.productForm.professionalResalePrice\": \"Professional resale price\",\n \"inventory.productForm.professionalResalePriceHint\": \"Charged when the professional resells to the end customer.\",\n \"inventory.productForm.requireBatch\": \"Require batch on entry\",\n \"inventory.productForm.requireBatchHint\": \"Blocks stock entry without a batch number.\",\n \"inventory.productForm.requireExpiry\": \"Require expiry on entry\",\n \"inventory.productForm.requireExpiryHint\": \"Blocks stock entry without an expiry date.\",\n \"inventory.productForm.notes\": \"Notes\",\n \"inventory.productForm.ingredientSection\": \"Ingredient\",\n \"inventory.productForm.ingredientSectionDesc\": \"What purchasing needs to restock in time.\",\n \"inventory.productForm.ingReorderPoint\": \"Reorder point\",\n \"inventory.productForm.ingReorderPointHint\": \"Sits ABOVE the minimum: the warning that still arrives in time to buy.\",\n \"inventory.productForm.ingLeadTime\": \"Lead time (days)\",\n \"inventory.productForm.ingShelfLife\": \"Shelf life (days)\",\n \"inventory.productForm.ingStorageTemp\": \"Storage temperature\",\n \"inventory.productForm.saleSection\": \"Sale\",\n \"inventory.productForm.saleSectionDesc\": \"What the menu and the counter show the customer.\",\n \"inventory.productForm.salePrepTime\": \"Prep time (min)\",\n \"inventory.productForm.saleServes\": \"Serves (people)\",\n \"inventory.productForm.saleCalories\": \"Calories (kcal)\",\n \"inventory.productForm.saleMenuDescription\": \"Menu description\",\n \"inventory.productForm.saleAllergens\": \"Allergens\",\n \"inventory.productForm.saleAllergensPlaceholder\": \"Contains gluten, lactose\",\n \"inventory.productForm.saleSoldByWeight\": \"Sold by weight\",\n \"inventory.productForm.saleHighlightDelivery\": \"Highlight on delivery\",\n \"inventory.productForm.saleAvailableDelivery\": \"Available for delivery\",\n \"inventory.productForm.saleAvailableCounter\": \"Available at the counter\",\n \"inventory.productForm.saleChannelsSection\": \"Channel prices\",\n \"inventory.productForm.saleChannelsSectionDesc\": \"Leave a channel empty to use the base sale price.\",\n \"inventory.productForm.intermediateSection\": \"Intermediate\",\n \"inventory.productForm.intermediateSectionDesc\": \"What production needs to prepare the batch.\",\n \"inventory.productForm.intYield\": \"Yield (%)\",\n \"inventory.productForm.intPrepTime\": \"Prep time (min)\",\n \"inventory.productForm.intShelfLifeHours\": \"Shelf life after prep (h)\",\n \"inventory.productForm.intBatchSize\": \"Batch size\",\n \"inventory.productForm.intBatchUnit\": \"Batch unit\",\n \"inventory.productForm.intStorage\": \"Storage instructions\",\n \"inventory.productForm.assetSection\": \"Asset\",\n \"inventory.productForm.assetSectionDesc\": \"The equipment the house owns, and who answers for it.\",\n \"inventory.productForm.assetValue\": \"Asset value\",\n \"inventory.productForm.assetResidualValue\": \"Residual value\",\n \"inventory.productForm.assetUsefulLife\": \"Useful life (months)\",\n \"inventory.productForm.assetDepreciation\": \"Annual depreciation (%)\",\n \"inventory.productForm.assetSerial\": \"Serial number\",\n \"inventory.productForm.assetAcquisition\": \"Acquisition date\",\n \"inventory.productForm.assetWarranty\": \"Warranty until\",\n \"inventory.productForm.assetStatus\": \"Status\",\n \"inventory.productForm.assetLocation\": \"Location\",\n \"inventory.productForm.assetLocationPlaceholder\": \"Room 2, shelf B\",\n \"inventory.productForm.assetResponsible\": \"Responsible\",\n \"inventory.productForm.assetInsurance\": \"Insurance policy\",\n \"inventory.productForm.assetLastMaintenance\": \"Last maintenance\",\n \"inventory.productForm.assetNextMaintenance\": \"Next maintenance\",\n \"inventory.productForm.taxSection\": \"Tax\",\n \"inventory.productForm.taxSectionDesc\": \"What the invoice must say about this product. Empty means the tax group decides.\",\n \"inventory.productForm.taxGroup\": \"Tax group\",\n \"inventory.productForm.taxGroupHint\": \"Set up under Inventory › Invoices › Tax groups.\",\n \"inventory.productForm.ncmHint\": \"The product's invoice classification. It belongs to the product, never to the group.\",\n \"inventory.productForm.icmsOrigin\": \"ICMS origin\",\n \"inventory.productForm.icmsRate\": \"ICMS rate (%)\",\n \"inventory.productForm.cstHint\": \"CST has 2 digits. CSOSN has 3 and is set on the tax group, for Simples Nacional.\",\n \"inventory.productForm.pisRate\": \"PIS rate (%)\",\n \"inventory.productForm.cofinsRate\": \"COFINS rate (%)\",\n \"inventory.productForm.baseCalcMode\": \"Tax base mode\",\n \"inventory.productForm.benefitCode\": \"Tax benefit code (cBenef)\",\n \"inventory.productForm.povertyFund\": \"Poverty fund (%)\",\n \"inventory.productForm.ibsCbsSituation\": \"IBS and CBS — tax situation\",\n \"inventory.productForm.ibsCbsClassification\": \"IBS and CBS — tax classification\",\n \"inventory.productForm.classificationRequired\": \"Pick at least one classification for the product.\",\n \"inventory.productType.ingredient\": \"Ingredient\",\n \"inventory.productType.sale\": \"For sale\",\n \"inventory.productType.intermediate\": \"Intermediate\",\n \"inventory.productType.asset\": \"Asset\",\n \"inventory.variants.tab\": \"Variants\",\n \"inventory.variants.name\": \"Variant\",\n \"inventory.variants.namePlaceholder\": \"E.g. M, L, XL, Blue\",\n \"inventory.variants.sku\": \"SKU\",\n \"inventory.variants.skuPlaceholder\": \"Optional\",\n \"inventory.variants.default\": \"Default\",\n \"inventory.variants.empty\": \"No variants. The product is sold and stocked as a single item.\",\n \"inventory.variants.duplicate\": \"A variant with this name already exists.\",\n \"inventory.variants.loadFailed\": \"Could not load the variants.\",\n \"inventory.variants.saveFailed\": \"Could not save the variant.\",\n \"inventory.variants.unavailable\": \"Variants are not available in this workspace.\",\n \"inventory.variants.onHand\": \"{{count}} in stock\",\n \"inventory.barcodes.tab\": \"Barcodes\",\n \"inventory.barcodes.code\": \"Barcode\",\n \"inventory.barcodes.codePlaceholder\": \"Type or scan\",\n \"inventory.barcodes.type\": \"Type\",\n \"inventory.barcodes.description\": \"Description\",\n \"inventory.barcodes.descriptionPlaceholder\": \"500 ml pack\",\n \"inventory.barcodes.needCode\": \"Type or scan a code.\",\n \"inventory.barcodes.empty\": \"No barcode registered.\",\n \"inventory.barcodes.duplicate\": \"This code is already in use.\",\n \"inventory.barcodes.isPrimary\": \"Primary — this is what the label prints\",\n \"inventory.barcodes.makePrimary\": \"Make primary\",\n \"inventory.barcodes.removeTitle\": \"Remove this barcode?\",\n \"inventory.barcodes.unavailable\": \"Barcodes are unavailable in this environment.\",\n \"inventory.productRecipe.tab\": \"Recipe\",\n \"inventory.productRecipe.none\": \"This product has no recipe yet.\",\n \"inventory.productRecipe.noneHint\": \"The recipe says what the product is made of — cost and food-cost come from it.\",\n \"inventory.productRecipe.goToRecipes\": \"Go to Recipes\",\n \"inventory.productForm.classificationUnset\": \"Unclassified\",\n \"inventory.productForm.stepIdentity\": \"Identity\",\n \"inventory.productForm.stepClassification\": \"Classification\",\n \"inventory.productForm.stepPricing\": \"Pricing\",\n \"inventory.productForm.stepStock\": \"Stock\",\n \"inventory.productForm.stepInitialEntry\": \"Opening stock\",\n \"inventory.productForm.initialEntrySection\": \"Receive stock\",\n \"inventory.productForm.initialEntrySectionDesc\": \"Optional: record what is already on the shelf. Leave blank to receive later.\",\n \"inventory.productForm.initialQuantity\": \"Quantity on hand\",\n \"inventory.productForm.initialLocation\": \"Location\",\n \"inventory.productForm.initialLocationHint\": \"Blank uses the product's default location.\",\n \"inventory.productForm.initialUnitCost\": \"Unit cost\",\n \"inventory.productForm.initialUnitCostHint\": \"Blank uses the product's cost.\",\n \"inventory.productForm.initialBatch\": \"Batch\",\n \"inventory.productForm.initialExpiry\": \"Expiry date\",\n \"inventory.productForm.initialEntryFailed\": \"Product created, but the stock entry was not recorded. Receive it from the Stock tab.\",\n \"inventory.productForm.newProduct\": \"New Product\",\n \"inventory.productForm.editProduct\": \"Edit Product\",\n \"inventory.productForm.updateDetails\": \"Update product details\",\n \"inventory.productForm.addToCatalog\": \"Add a product to your catalog\",\n \"inventory.productForm.cancel\": \"Cancel\",\n \"inventory.productForm.save\": \"Save\",\n \"inventory.productForm.saving\": \"Saving...\",\n \"inventory.productForm.generalInfo\": \"General Information\",\n \"inventory.productForm.name\": \"Name\",\n \"inventory.productForm.namePlaceholder\": \"Product name\",\n \"inventory.productForm.brand\": \"Brand\",\n \"inventory.productForm.brandPlaceholder\": \"Brand name\",\n \"inventory.productForm.sku\": \"SKU\",\n \"inventory.productForm.skuPlaceholder\": \"Internal code\",\n \"inventory.productForm.barcode\": \"Barcode\",\n \"inventory.productForm.barcodePlaceholder\": \"EAN / UPC\",\n \"inventory.productForm.description\": \"Description\",\n \"inventory.productForm.descriptionPlaceholder\": \"Additional information about the product\",\n \"inventory.productForm.classification\": \"Classification\",\n \"inventory.productForm.classificationDesc\": \"How this product is used in your business\",\n \"inventory.productForm.typeIngredient\": \"Raw material used in production or services\",\n \"inventory.productForm.typeSale\": \"Sold directly to customers\",\n \"inventory.productForm.typeIntermediate\": \"Produced internally from other items\",\n \"inventory.productForm.typeAsset\": \"Fixed asset for patrimony tracking\",\n \"inventory.productForm.pricing\": \"Pricing\",\n \"inventory.productForm.costPrice\": \"Cost Price\",\n \"inventory.productForm.salePrice\": \"Sale Price\",\n \"inventory.productForm.margin\": \"Margin\",\n \"inventory.productForm.stockLevels\": \"Stock Levels\",\n \"inventory.productForm.stockLevelsDesc\": \"Minimum and maximum thresholds for alerts\",\n \"inventory.productForm.minQuantity\": \"Minimum Quantity\",\n \"inventory.productForm.minQuantityHint\": \"Alert when stock falls below this\",\n \"inventory.productForm.maxQuantity\": \"Maximum Quantity\",\n \"inventory.productForm.maxQuantityHint\": \"Max capacity for this product\",\n \"inventory.productForm.optional\": \"Optional\",\n \"inventory.productForm.organization\": \"Organisation\",\n \"inventory.productForm.organizationDesc\": \"Category, unit, supplier and default storage location\",\n \"inventory.productForm.category\": \"Category\",\n \"inventory.productForm.measurementUnit\": \"Unit of measure\",\n \"inventory.productForm.measurementUnitHint\": \"How this item is counted in stock\",\n \"inventory.productForm.supplier\": \"Default supplier\",\n \"inventory.productForm.defaultLocation\": \"Default location\",\n \"inventory.movementType.entry\": \"Entry\",\n \"inventory.movementType.exit\": \"Exit\",\n \"inventory.movementType.adjustment\": \"Adjustment\",\n \"inventory.movementType.transfer\": \"Transfer\",\n \"inventory.movementType.loss\": \"Loss\",\n \"inventory.recipeForm.group\": \"Stage\",\n \"inventory.recipeForm.ungrouped\": \"No stage\",\n \"inventory.productList.bulkActivate\": \"Activate\",\n \"inventory.productList.bulkActivated\": \"{{count}} product(s) activated\",\n \"inventory.productList.bulkDeactivate\": \"Deactivate\",\n \"inventory.productList.bulkDeactivated\": \"{{count}} product(s) deactivated\",\n \"inventory.productList.bulkFailed\": \"{{count}} product(s) could not be updated\",\n \"inventory.productList.bulkNothingToDo\": \"The selected products are already in that state.\",\n \"inventory.productList.filterActive\": \"Active\",\n \"inventory.productList.filterAllStatuses\": \"Active and inactive\",\n \"inventory.productList.filterInactive\": \"Inactive\",\n \"inventory.productList.filterStatus\": \"Status\",\n \"inventory.productList.inactive\": \"Inactive\",\n \"inventory.productList.title\": \"Products\",\n \"inventory.productList.subtitle\": \"{{count}} products\",\n \"inventory.productList.product\": \"Product\",\n \"inventory.productList.type\": \"Type\",\n \"inventory.productList.stock\": \"Stock\",\n \"inventory.productList.cost\": \"Cost\",\n \"inventory.productList.value\": \"Value\",\n \"inventory.productList.searchPlaceholder\": \"Search products...\",\n 'inventory.productList.aiHint': 'Describe the product and I create it.',\n 'inventory.productList.askPlaceholder': 'Describe the product…',\n 'inventory.productList.askPersona': 'Product intake',\n 'inventory.productList.askPitch': 'Tell me the product you want to add.',\n 'inventory.productList.askDescription': 'Name, price, cost, SKU, kind — tell me what you know, however you say it, and I fill in the rest sensibly. You check before it saves.',\n 'inventory.productList.askSuggestion.0': 'Black tee S/M/L, $79, cost $28',\n 'inventory.productList.askSuggestion.1': 'Add 5 sample products so I can test the store',\n 'inventory.productList.askSuggestion.2': 'A bundle of the two best sellers',\n \"inventory.productList.newProduct\": \"New Product\",\n \"inventory.productList.empty\": \"No products yet\",\n \"inventory.productList.createFirst\": \"Create your first product\",\n \"inventory.stock.unknownProduct\": \"Unknown Product\",\n \"inventory.stock.reasonLossPlaceholder\": \"e.g. Expired, damaged\",\n \"inventory.stock.reasonAdjustPlaceholder\": \"e.g. Physical count correction\",\n \"inventory.stock.documentPlaceholder\": \"Invoice, receipt, PO...\",\n \"inventory.stock.batchPlaceholder\": \"e.g. LOT001\",\n \"inventory.stock.notesPlaceholder\": \"Additional notes...\",\n \"inventory.recipeDetail.loading\": \"Loading...\",\n \"inventory.recipeDetail.ingredient\": \"Ingredient\",\n \"inventory.recipeDetail.quantity\": \"Quantity\",\n \"inventory.recipeDetail.unit\": \"Unit\",\n \"inventory.recipeDetail.notes\": \"Notes\",\n \"inventory.recipeDetail.created\": \"Created\",\n \"inventory.recipeDetail.updated\": \"Updated\",\n \"inventory.recipeForm.newRecipe\": \"New Recipe\",\n \"inventory.recipeForm.subtitle\": \"Define a production formula\",\n \"inventory.recipeForm.cancel\": \"Cancel\",\n \"inventory.recipeForm.saveRecipe\": \"Save Recipe\",\n \"inventory.recipeForm.saving\": \"Saving...\",\n \"inventory.recipeForm.recipeDetails\": \"Recipe Details\",\n \"inventory.recipeForm.recipeName\": \"Recipe Name\",\n \"inventory.recipeForm.recipeNamePlaceholder\": \"e.g. Tomato Sauce\",\n \"inventory.recipeForm.description\": \"Description\",\n \"inventory.recipeForm.descriptionPlaceholder\": \"Brief description...\",\n \"inventory.recipeForm.produces\": \"Produces (Product)\",\n \"inventory.recipeForm.searchProduct\": \"Search product...\",\n \"inventory.recipeForm.createProduct\": \"Create product\",\n \"inventory.recipeForm.yieldQuantity\": \"Yield Quantity\",\n \"inventory.recipeForm.prepTime\": \"Prep Time (min)\",\n \"inventory.recipeForm.instructions\": \"Instructions\",\n \"inventory.recipeForm.instructionsPlaceholder\": \"Step-by-step preparation instructions...\",\n \"inventory.recipeForm.ingredients\": \"Ingredients\",\n \"inventory.recipeForm.addIngredient\": \"Add Ingredient\",\n \"inventory.recipeForm.noIngredients\": \"No ingredients added\",\n \"inventory.recipeForm.addFirstIngredient\": \"Add your first ingredient\",\n \"inventory.recipeForm.ingredient\": \"Ingredient\",\n \"inventory.recipeForm.quantity\": \"Quantity\",\n \"inventory.recipeForm.notes\": \"Notes\",\n \"inventory.recipeForm.searchIngredient\": \"Search ingredient...\",\n \"inventory.recipeForm.createIngredient\": \"Create ingredient\",\n \"inventory.recipeForm.notesPlaceholder\": \"e.g. diced, fresh\",\n \"inventory.recipeForm.ingredientsConfigured\": \"{{configured}} of {{total}} ingredients configured\",\n \"inventory.title\": \"Inventory\",\n \"inventory.stock.title\": \"Stock\",\n \"inventory.stock.minStock\": \"Min. Stock\",\n \"inventory.stock.adjust\": \"Adjust Stock\",\n \"inventory.stock.lowStock\": \"Low Stock\",\n \"inventory.products.title\": \"Products\",\n \"inventory.products.create\": \"New Product\",\n \"inventory.recipes.create\": \"New Recipe\",\n \"inventory.recipes.addIngredient\": \"Add Ingredient\",\n \"inventory.recipes.cost\": \"Cost\",\n \"inventory.recipes.loading\": \"Loading...\",\n \"inventory.suppliers.title\": \"Suppliers\",\n \"inventory.suppliers.create\": \"New Supplier\",\n \"inventory.movements.title\": \"Movements\",\n \"inventory.movements.in\": \"Stock In\",\n \"inventory.movements.out\": \"Stock Out\",\n \"inventory.settings.title\": \"Inventory Settings\",\n\n \"inventory.recipeDetail.cost\": \"Cost\",\n \"inventory.recipeDetail.unitCost\": \"Unit cost\",\n \"inventory.recipeDetail.totalCost\": \"Recipe cost\",\n \"inventory.recipeDetail.costPerYield\": \"Cost per unit produced\",\n \"inventory.recipeDetail.salePrice\": \"Sale price\",\n \"inventory.recipeDetail.cmv\": \"Food cost %\",\n \"inventory.recipeDetail.cmvUnknown\": \"No sale price\",\n \"inventory.recipeDetail.cmvHigh\": \"Above {{threshold}}% — this dish is eating the margin.\",\n\n \"inventory.recipeGaps.title\": \"Not linked to your catalogue\",\n \"inventory.recipeGaps.description\": \"The assistant suggested these but could not match them. Pick the equivalent item or create it.\",\n \"inventory.recipeGaps.produces\": \"Produces:\",\n \"inventory.recipeGaps.unnamed\": \"Unnamed ingredient\",\n \"inventory.recipeGaps.linkFailed\": \"Could not link this item\",\n \"inventory.recipeGaps.createFailed\": \"Could not create the product\",\n\n \"inventory.recipes.entity\": \"Recipe\",\n \"inventory.recipes.colProduct\": \"Product\",\n \"inventory.recipes.colIngredients\": \"Ingredients\",\n \"inventory.recipes.colYield\": \"Yield\",\n \"inventory.recipes.colPrep\": \"Prep\",\n \"inventory.recipes.colCost\": \"Cost\",\n \"inventory.recipes.colSale\": \"Sale\",\n \"inventory.recipes.colCmv\": \"Food cost %\",\n \"inventory.recipes.noSheet\": \"No recipe sheet\",\n \"inventory.recipes.searchPlaceholder\": \"Search recipe...\",\n \"inventory.recipes.newByHand\": \"Fill it in by hand\",\n \"inventory.recipes.newByHandHint\": \"Open the form and enter the ingredients yourself\",\n \"inventory.recipes.aiHint\": \"Describe the dish and get the sheet built with your own ingredients\",\n \"inventory.recipes.askPlaceholder\": \"e.g. recipe for smoked hump with cheese, 400g, serves 3\",\n \"inventory.recipes.askPersona\": \"Recipe sheets\",\n \"inventory.recipes.askPitch\": \"Let's cost your menu\",\n \"inventory.recipes.askDescription\": \"Describe the dish and I build the sheet from the ingredients you already have, with cost and food cost %.\",\n \"inventory.recipes.askSuggestion.0\": \"Build the recipe sheet for the smoked hump with cheese\",\n \"inventory.recipes.askSuggestion.1\": \"Which menu items still have no recipe sheet?\",\n \"inventory.recipes.askSuggestion.2\": \"Which dishes are above 35% food cost?\",\n \"inventory.recipes.loadFailed\": \"Could not load recipe sheets\",\n \"inventory.recipes.retry\": \"Try again\",\n \"inventory.recipeDetail.loadFailed\": \"Could not load this recipe sheet\",\n \"inventory.recipeDetail.retry\": \"Try again\",\n\n \"inventory.nav.counts\": \"Counts\",\n \"inventory.counts.title\": \"Stock counts\",\n \"inventory.counts.entity\": \"Stock count\",\n \"inventory.counts.colReference\": \"Count\",\n \"inventory.counts.colOpened\": \"Opened\",\n \"inventory.counts.colStatus\": \"Status\",\n \"inventory.counts.colProgress\": \"Counted\",\n \"inventory.counts.colDivergent\": \"Divergences\",\n \"inventory.counts.status.open\": \"Open\",\n \"inventory.counts.status.counting\": \"Counting\",\n \"inventory.counts.status.closed\": \"Closed\",\n \"inventory.counts.status.cancelled\": \"Cancelled\",\n \"inventory.counts.progress\": \"{{counted}} of {{total}}\",\n \"inventory.counts.newCount\": \"New count\",\n \"inventory.counts.searchPlaceholder\": \"Search counts...\",\n \"inventory.counts.empty\": \"No counts yet\",\n \"inventory.counts.formTitle\": \"Open a count\",\n \"inventory.counts.formSubtitle\": \"What the system believes is frozen the moment you open it — the variance describes the shelf, not the clock.\",\n \"inventory.counts.location\": \"Stock location\",\n \"inventory.counts.pickLocation\": \"Pick a location\",\n \"inventory.counts.category\": \"Category\",\n \"inventory.counts.allCategories\": \"Every category\",\n \"inventory.counts.reference\": \"Name\",\n \"inventory.counts.referencePlaceholder\": \"e.g. Cold room, end of August\",\n \"inventory.counts.blind\": \"Blind count\",\n \"inventory.counts.blindHint\": \"Hides the system quantity while counting, so you write what is on the shelf instead of confirming what is on the screen.\",\n \"inventory.counts.blindLine\": \"Blind — system quantity hidden\",\n \"inventory.counts.notes\": \"Notes\",\n \"inventory.counts.notesPlaceholder\": \"Anything the next person should know\",\n \"inventory.counts.open\": \"Open the count\",\n \"inventory.counts.opening\": \"Opening...\",\n \"inventory.counts.openFailed\": \"Could not open the count\",\n \"inventory.counts.cancel\": \"Cancel\",\n \"inventory.counts.notFound\": \"Count not found\",\n \"inventory.counts.noItems\": \"This count has no products\",\n \"inventory.counts.systemQty\": \"System:\",\n \"inventory.counts.notCounted\": \"Not counted\",\n \"inventory.counts.counted\": \"Counted\",\n \"inventory.counts.divergent\": \"Divergences\",\n \"inventory.counts.varianceValue\": \"Variance\",\n \"inventory.counts.saveFailed\": \"Could not save this line\",\n \"inventory.counts.close\": \"Close the count\",\n \"inventory.counts.closeTitle\": \"Close the count?\",\n \"inventory.counts.closeDescription\": \"{{divergent}} line(s) differ from the system and will get an adjustment.\",\n \"inventory.counts.incomplete\": \"Finish the count before closing\",\n \"inventory.counts.incompleteDescription\": \"{{count}} line(s) are still blank. Enter zero when the item is physically out of stock.\",\n \"inventory.counts.closeConfirm\": \"Close and adjust\",\n \"inventory.counts.closed\": \"Count closed — {{count}} adjustment(s) recorded\",\n \"inventory.counts.alreadyClosed\": \"This count was already closed\",\n \"inventory.counts.closeFailed\": \"Could not close the count\",\n \"inventory.counts.cancelCount\": \"Cancel count\",\n \"inventory.counts.cancelTitle\": \"Cancel this count?\",\n \"inventory.counts.cancelDescription\": \"The count is filed away and nothing is adjusted. What you typed stays on record.\",\n \"inventory.counts.cancelConfirm\": \"Cancel the count\",\n \"inventory.counts.cancelled\": \"Count cancelled\",\n \"inventory.counts.cancelFailed\": \"Could not cancel the count\",\n \"inventory.counts.adjustmentReason\": \"Stock count {{reference}}\",\n 'inventory.productDetail.newMovement': 'Record movement',\n 'inventory.productDetail.movementFailed': 'Could not record the movement',\n \"inventory.nav.usageAudit\": \"Usage Audit\",\n \"inventory.usageAudit.title\": \"Product Usage Audit\",\n \"inventory.usageAudit.subtitle\": \"Review what the appointments consumed and correct a quantity entered wrong.\",\n \"inventory.usageAudit.columnProduct\": \"Product\",\n \"inventory.usageAudit.columnQuantity\": \"Quantity\",\n \"inventory.usageAudit.columnLocation\": \"Position\",\n \"inventory.usageAudit.columnWhen\": \"When\",\n \"inventory.usageAudit.columnPerformedBy\": \"Performed by\",\n \"inventory.usageAudit.columnCustomer\": \"Customer\",\n \"inventory.usageAudit.columnCost\": \"Cost\",\n \"inventory.usageAudit.standard\": \"Standard\",\n \"inventory.usageAudit.badgePosted\": \"Posted\",\n \"inventory.usageAudit.badgeApproved\": \"Approved\",\n \"inventory.usageAudit.batchNoStock\": \"{count} without stock — still queued\",\n \"inventory.usageAudit.corrected\": \"Corrected\",\n \"inventory.usageAudit.noLocation\": \"No position\",\n \"inventory.usageAudit.unnamedProduct\": \"Unnamed product\",\n \"inventory.usageAudit.reason\": \"Audit notes\",\n \"inventory.usageAudit.cancel\": \"Cancel\",\n \"inventory.usageAudit.loadFailed\": \"Could not load the audit\",\n \"inventory.usageAudit.searchPlaceholder\": \"Search by product, customer, professional…\",\n \"inventory.usageAudit.periodLabel\": \"Period\",\n \"inventory.usageAudit.period30\": \"30 days\",\n \"inventory.usageAudit.period90\": \"90 days\",\n \"inventory.usageAudit.periodAll\": \"All time\",\n \"inventory.usageAudit.filterPending\": \"Pending\",\n \"inventory.usageAudit.emptyPending\": \"No usage waiting for review in this period.\",\n \"inventory.usageAudit.columnActions\": \"Actions\",\n \"inventory.usageAudit.post\": \"Post\",\n \"inventory.usageAudit.approve\": \"Approve\",\n \"inventory.usageAudit.postHint\": \"Accepts the usage AND deducts stock\",\n \"inventory.usageAudit.approveHint\": \"Accepts the usage without touching stock\",\n \"inventory.usageAudit.posted\": \"{{count}} line(s) posted to stock\",\n \"inventory.usageAudit.approved\": \"{{count}} line(s) approved\",\n \"inventory.usageAudit.approveFailed\": \"Could not accept the usage\",\n \"inventory.usageAudit.noStock\": \"No stock to post — receive the product or use Approve\",\n \"inventory.usageAudit.filtersLabel\": \"Filters\",\n \"inventory.usageAudit.filterLabel\": \"Review\",\n \"inventory.usageAudit.filterAll\": \"All\",\n \"inventory.usageAudit.filterDivergent\": \"Off standard\",\n \"inventory.usageAudit.empty\": \"No usage posted by appointments yet\",\n \"inventory.usageAudit.columnCounted\": \"Counted\",\n \"inventory.usageAudit.draftOne\": \"1 quantity changed\",\n \"inventory.usageAudit.draftMany\": \"{{count}} quantities changed\",\n \"inventory.usageAudit.draftCheck\": \"Check the quantities you typed\",\n \"inventory.usageAudit.draftHint\": \"Applying posts one adjustment per line, all under the same note.\",\n \"inventory.usageAudit.draftCost\": \"Consumption cost difference: {{value}}\",\n \"inventory.usageAudit.draftInvalid\": \"{{count}} line(s) hold a quantity that is not a number\",\n \"inventory.usageAudit.draftNothing\": \"No quantity has changed yet\",\n \"inventory.usageAudit.discard\": \"Discard\",\n \"inventory.usageAudit.apply\": \"Apply {{count}}\",\n \"inventory.usageAudit.applyTitle\": \"Apply {{count}} corrections\",\n \"inventory.usageAudit.applyDescription\": \"One ledger adjustment per line, all under the same note. Nothing is rewritten: the difference is posted.\",\n \"inventory.usageAudit.applyConfirm\": \"Apply\",\n \"inventory.usageAudit.batchReasonPlaceholder\": \"Why these quantities changed\\u2026\",\n \"inventory.usageAudit.batchReasonHint\": \"It covers the whole batch \\u2014 this note stays on every movement.\",\n \"inventory.usageAudit.batchApplied\": \"{{count}} corrections posted to the ledger\",\n \"inventory.usageAudit.batchFailed\": \"Could not apply the conference\",\n \"inventory.usageAudit.applyTitleOne\": \"Apply 1 correction\",\n \"inventory.usageAudit.batchReasonRequired\": \"Say why before applying — the note is required.\",\n \"inventory.usageAudit.batchAppliedOne\": \"1 correction posted to the ledger\",\n \"inventory.usageAudit.emptyDivergent\": \"No usage off the standard\",\n \"inventory.recipes.edit\": \"Edit\",\n \"inventory.recipes.print\": \"Print recipe\",\n \"inventory.recipes.printNoSheet\": \"No recipe to print\",\n \"inventory.recipes.pickTitle\": \"Select product\",\n \"inventory.recipes.pickHint\": \"Choose the product this recipe belongs to.\",\n \"inventory.recipes.pickPlaceholder\": \"Search product...\",\n \"inventory.recipes.pickContinue\": \"Continue\",\n \"inventory.sheet.name\": \"Recipe name\",\n \"inventory.sheet.namePlaceholder\": \"E.g. Grilled picanha\",\n \"inventory.sheet.nameRequired\": \"The recipe name is required.\",\n \"inventory.sheet.yield\": \"Yield\",\n \"inventory.sheet.yieldUnit\": \"Yield unit\",\n \"inventory.sheet.none\": \"None\",\n \"inventory.sheet.yieldMode\": \"Yield type\",\n \"inventory.sheet.yieldMode.portion\": \"Portion (the recipe is 1 unit sold)\",\n \"inventory.sheet.yieldMode.batch\": \"Batch (the recipe produces the yield)\",\n \"inventory.sheet.yieldMode.portionHint\": \"The yield only describes the plate («serves 4», «6 pieces», «400 g»). The product cost is the recipe total.\",\n \"inventory.sheet.yieldMode.batchHint\": \"The recipe produces the yield (e.g. 2.4 kg of sauce). The product cost is the recipe total ÷ the yield, in the product's unit.\",\n \"inventory.sheet.prepTime\": \"Prep time (min)\",\n \"inventory.sheet.description\": \"Description\",\n \"inventory.sheet.descriptionPlaceholder\": \"General description of the recipe\",\n \"inventory.sheet.costPrice\": \"Cost price\",\n \"inventory.sheet.per\": \"per\",\n \"inventory.sheet.batchCost\": \"Batch\",\n \"inventory.sheet.salePrice\": \"Sale price\",\n \"inventory.sheet.cmv\": \"Food cost\",\n \"inventory.sheet.components\": \"Recipe components (by station)\",\n \"inventory.sheet.suggestAi\": \"Suggest with AI\",\n \"inventory.sheet.addGroup\": \"Add group\",\n \"inventory.sheet.noComponents\": \"No components yet. Click \\\"Add group\\\" or use \\\"Suggest with AI\\\".\",\n \"inventory.sheet.componentName\": \"Component name\",\n \"inventory.sheet.componentNamePlaceholder\": \"E.g. Fried strips\",\n \"inventory.sheet.station\": \"Production station\",\n \"inventory.sheet.stationPlaceholder\": \"Select the station\",\n \"inventory.sheet.noStations\": \"No stations registered\",\n \"inventory.sheet.estimatedMinutes\": \"Estimated time (min)\",\n \"inventory.sheet.estimatedMinutesPlaceholder\": \"E.g. 20\",\n \"inventory.sheet.componentMenu\": \"More component actions\",\n \"inventory.sheet.transform\": \"Turn into intermediate product\",\n \"inventory.sheet.deleteComponent\": \"Delete component\",\n \"inventory.sheet.transformNeedsLines\": \"Add at least one ingredient to this component.\",\n \"inventory.sheet.noLines\": \"No ingredients. Click \\\"Add item\\\".\",\n \"inventory.sheet.ingredient\": \"Ingredient\",\n \"inventory.sheet.quantity\": \"Quantity\",\n \"inventory.sheet.notes\": \"Notes\",\n \"inventory.sheet.cost\": \"Cost\",\n \"inventory.sheet.unit\": \"Unit\",\n \"inventory.sheet.searchIngredient\": \"Search ingredient...\",\n \"inventory.sheet.createIngredient\": \"Create ingredient\",\n \"inventory.sheet.ingredientCreated\": \"Ingredient \\\"{{name}}\\\" created\",\n \"inventory.sheet.ingredientCreateFailed\": \"Could not create the ingredient.\",\n \"inventory.sheet.aiHint\": \"Suggested by AI\",\n \"inventory.sheet.create\": \"Create\",\n \"inventory.sheet.updateCost\": \"Update cost\",\n \"inventory.sheet.updateCostCurrent\": \"Update cost (now: {{price}}{{unit}})\",\n \"inventory.sheet.setCost\": \"Set the ingredient's cost\",\n \"inventory.sheet.removeLine\": \"Remove ingredient\",\n \"inventory.sheet.addLine\": \"Add item\",\n \"inventory.sheet.componentPrep\": \"How to prepare this component\",\n \"inventory.sheet.componentPrepPlaceholder\": \"How this component is prepared at the station\",\n \"inventory.sheet.outputs\": \"Production outputs (optional)\",\n \"inventory.sheet.outputsHint\": \"When this recipe yields more than one product (e.g. fillet + trimmings + skin). With no lines, production delivers only the main product. The order cost is split by each output's %; left blank, by market value. Waste carries no cost.\",\n \"inventory.sheet.addOutput\": \"Add output\",\n \"inventory.sheet.product\": \"Product\",\n \"inventory.sheet.outputType\": \"Type\",\n \"inventory.sheet.expectedQty\": \"Expected qty\",\n \"inventory.sheet.costShare\": \"% of cost\",\n \"inventory.sheet.auto\": \"auto\",\n \"inventory.sheet.removeOutput\": \"Remove output\",\n \"inventory.sheet.outputType.main\": \"Main\",\n \"inventory.sheet.outputType.coproduct\": \"Co-product\",\n \"inventory.sheet.outputType.byproduct\": \"By-product\",\n \"inventory.sheet.outputType.waste\": \"Waste\",\n \"inventory.sheet.outputShareTitle\": \"Check the outputs' % of cost\",\n \"inventory.sheet.outputShareHint\": \"Fill the % on every usable output, adding up to 100% — or leave them all blank to split by market value.\",\n \"inventory.sheet.instructions\": \"Assembly instructions (optional)\",\n \"inventory.sheet.instructionsPlaceholder\": \"How to assemble and finish the dish once the components are ready...\",\n \"inventory.sheet.save\": \"Save recipe\",\n \"inventory.sheet.saving\": \"Saving...\",\n \"inventory.sheet.saved\": \"Recipe saved\",\n \"inventory.sheet.saveFailed\": \"Could not save.\",\n \"inventory.sheet.loadFailed\": \"Could not load the recipe.\",\n \"inventory.sheet.costDialogTitle\": \"Update cost\",\n \"inventory.sheet.costDialogHint\": \"Set it by hand or ask the AI for a market estimate.\",\n \"inventory.sheet.costAppliesEverywhere\": \"The cost applies to every recipe that uses this ingredient.\",\n \"inventory.sheet.costInvalid\": \"Enter a value above zero.\",\n \"inventory.sheet.costUpdated\": \"{{name}} now costs {{price}}\",\n \"inventory.sheet.aiNoPrice\": \"The AI returned no price.\",\n \"inventory.sheet.aiFailed\": \"The AI did not answer. Try again.\",\n \"inventory.sheet.aiUnitMismatch\": \"The AI priced it per {{ai}}; this ingredient is counted in {{unit}}. Check before saving.\",\n \"inventory.sheet.aiTitle\": \"Suggest recipe with AI\",\n \"inventory.sheet.aiPhotos\": \"Product photos\",\n \"inventory.sheet.aiPhotosHint\": \"The more angles of the dish, the better the suggestion.\",\n \"inventory.sheet.aiProductName\": \"Product name\",\n \"inventory.sheet.aiStations\": \"Stations available to the AI:\",\n \"inventory.sheet.aiNoStations\": \"No stations registered — add stations so the AI can group correctly.\",\n \"inventory.sheet.aiInstructions\": \"Extra instructions for the AI (optional)\",\n \"inventory.sheet.aiInstructionsPlaceholder\": \"E.g. serves 2, gluten-free, use clarified butter, keep the sauce at the cold station...\",\n \"inventory.sheet.aiReplaces\": \"The suggestion replaces the components on the recipe. Nothing is saved until you save.\",\n \"inventory.sheet.aiGenerate\": \"Generate suggestion\",\n \"inventory.sheet.aiGenerating\": \"Generating...\",\n \"inventory.sheet.aiApplied\": \"Suggestion applied — review and save.\",\n \"inventory.sheet.uploadFailed\": \"Could not upload the image.\",\n \"inventory.sheet.addPhoto\": \"Add photo\",\n \"inventory.sheet.removePhoto\": \"Remove photo\",\n \"inventory.sheet.transformHint\": \"A new intermediate product is created with this block as its recipe. The block leaves this recipe — you can then add the intermediate as an item anywhere.\",\n \"inventory.sheet.transformName\": \"Intermediate product name\",\n \"inventory.sheet.transformNamePlaceholder\": \"E.g. White rice portion\",\n \"inventory.sheet.transformUnitPlaceholder\": \"Select (g, kg, ml, L, un...)\",\n \"inventory.sheet.transformNameRequired\": \"Enter the intermediate product's name.\",\n \"inventory.sheet.transformYieldRequired\": \"Enter the yield.\",\n \"inventory.sheet.transformUnitRequired\": \"Select the yield unit.\",\n \"inventory.sheet.transformDuplicate\": \"A product with this name already exists.\",\n \"inventory.sheet.transformCreate\": \"Create intermediate\",\n \"inventory.sheet.transformCreating\": \"Creating...\",\n \"inventory.sheet.transformDone\": \"\\\"{{name}}\\\" was created. You can now add it as an item to any component of this recipe.\",\n \"inventory.sheet.transformFailed\": \"Could not create the intermediate.\",\n \"inventory.complements.tab\": \"Add-ons\",\n \"inventory.complements.title\": \"Add-ons and choices\",\n \"inventory.complements.hint\": \"Set up flavours, doneness and extras. Use 0.00 when a choice costs nothing extra.\",\n \"inventory.complements.newGroup\": \"New group\",\n \"inventory.complements.empty\": \"This product has no add-ons yet.\",\n \"inventory.complements.emptyHint\": \"Create a group to start, like “Doneness” or “Whipped cream”.\",\n \"inventory.complements.groupName\": \"Group name\",\n \"inventory.complements.groupNamePlaceholder\": \"E.g. Doneness\",\n \"inventory.complements.active\": \"Active\",\n \"inventory.complements.moveUp\": \"Move group up\",\n \"inventory.complements.moveDown\": \"Move group down\",\n \"inventory.complements.deleteGroup\": \"Delete group\",\n \"inventory.complements.required\": \"Required choice\",\n \"inventory.complements.min\": \"Minimum\",\n \"inventory.complements.max\": \"Maximum\",\n \"inventory.complements.option\": \"Option\",\n \"inventory.complements.price\": \"Extra charge\",\n \"inventory.complements.optionActive\": \"Active\",\n \"inventory.complements.optionPlaceholder\": \"E.g. With whipped cream\",\n \"inventory.complements.deleteOption\": \"Delete option\",\n \"inventory.complements.addOption\": \"Add option\",\n \"inventory.complements.save\": \"Save add-ons\",\n \"inventory.complements.saved\": \"Add-ons saved\",\n \"inventory.complements.saveFailed\": \"Could not save\",\n \"inventory.complements.review\": \"Review the add-ons\",\n \"inventory.complements.loadFailed\": \"Could not load the add-ons\",\n \"inventory.photoAi.title\": \"Generate photo with AI\",\n \"inventory.photoAi.product\": \"Product\",\n \"inventory.photoAi.category\": \"Category\",\n \"inventory.photoAi.usesSheet\": \"The recipe's ingredients go into the photo's description.\",\n \"inventory.photoAi.references\": \"Reference images (optional)\",\n \"inventory.photoAi.useCurrent\": \"Use the current photo as reference\",\n \"inventory.photoAi.add\": \"Add\",\n \"inventory.photoAi.instructionsPlaceholder\": \"E.g. wooden table, late-afternoon light, served on a white plate...\",\n \"inventory.photoAi.generate\": \"Generate photo\",\n \"inventory.photoAi.again\": \"Generate another\",\n \"inventory.photoAi.generating\": \"Generating the photo…\",\n \"inventory.photoAi.apply\": \"Apply photo\",\n \"inventory.photoAi.applied\": \"Photo applied to the product\",\n \"inventory.photoAi.failed\": \"Could not generate the photo\",\n \"inventory.sheet.quickTitle\": \"New ingredient\",\n \"inventory.sheet.quickHint\": \"Registers the product as an ingredient and puts it on this line.\",\n \"inventory.sheet.quickName\": \"Name\",\n \"inventory.sheet.quickUnit\": \"Stock unit\",\n \"inventory.sheet.quickUnitHint\": \"Base unit used in recipes, stock and sales (e.g. un, ml, g).\",\n \"inventory.sheet.quickNameRequired\": \"Enter the ingredient's name.\",\n \"inventory.sheet.quickUnitRequired\": \"Choose the unit the ingredient is counted in.\",\n \"inventory.sheet.quickCreate\": \"Create ingredient\",\n \"inventory.recipes.pickEmpty\": \"No sold or intermediate product found.\",\n \"inventory.recipes.kind.sale\": \"Sold\",\n \"inventory.recipes.kind.intermediate\": \"Intermediate\",\n \"inventory.recipes.kind.produced\": \"Produced\",\n \"inventory.recipes.kind.all\": \"All\",\n \"inventory.recipes.hasSheet\": \"Has recipe\",\n \"inventory.recipes.noSheetShort\": \"No recipe\",\n}\n","// inventory.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"inventory.nav.panel\": \"Painel\",\n \"inventory.panel.columnProduct\": \"Produto\",\n \"inventory.panel.columnLocation\": \"Local\",\n \"inventory.panel.columnBatch\": \"Lote\",\n \"inventory.panel.columnExpiry\": \"Validade\",\n \"inventory.panel.columnQuantity\": \"Qtd / mín.\",\n \"inventory.panel.columnValue\": \"Valor\",\n \"inventory.panel.empty\": \"Nenhuma posição de estoque para este recorte.\",\n \"inventory.panel.totalLines\": \"Linhas\",\n \"inventory.panel.totalValue\": \"Valor em estoque\",\n \"inventory.panel.unsupported\": \"Este aplicativo não expõe o painel de estoque.\",\n \"inventory.filters.stockState\": \"Status do estoque\",\n \"inventory.filters.health.negative\": \"Negativo\",\n \"inventory.filters.health.below_min\": \"Abaixo do mín.\",\n \"inventory.filters.health.zero\": \"Zerado\",\n \"inventory.filters.health.ok\": \"OK\",\n \"inventory.filters.expiry\": \"Validade\",\n \"inventory.filters.expiry.all\": \"Todas\",\n \"inventory.filters.expiry.expired\": \"Vencidos\",\n \"inventory.filters.expiry.le30\": \"Vence em 30 dias\",\n \"inventory.filters.expiry.le60\": \"Vence em 60 dias\",\n \"inventory.filters.expiry.le90\": \"Vence em 90 dias\",\n \"inventory.filters.expiry.none\": \"Sem validade\",\n \"inventory.filters.batchPlaceholder\": \"Lote\",\n \"inventory.filters.productPlaceholder\": \"Buscar produto...\",\n \"inventory.filters.countState\": \"Situação da contagem\",\n \"inventory.filters.countAll\": \"Todas\",\n \"inventory.filters.countPending\": \"A contar\",\n \"inventory.filters.countDone\": \"Contadas\",\n \"inventory.filters.itemSearchPlaceholder\": \"Buscar produto ou código...\",\n \"inventory.filters.title\": \"Filtros\",\n \"inventory.filters.apply\": \"Buscar\",\n \"inventory.filters.pending\": \"Filtros alterados\",\n \"inventory.filters.pendingHint\": \"A lista ainda mostra o recorte anterior. Clique em Buscar para aplicar.\",\n \"inventory.filters.clear\": \"Limpar\",\n \"inventory.filters.more\": \"Mais filtros\",\n \"inventory.filters.less\": \"Menos filtros\",\n \"inventory.filters.from\": \"De\",\n \"inventory.filters.to\": \"Até\",\n \"inventory.filters.allTypes\": \"Todos os tipos\",\n \"inventory.filters.location\": \"Local\",\n \"inventory.filters.allLocations\": \"Todos os locais\",\n \"inventory.filters.category\": \"Categoria\",\n \"inventory.filters.allCategories\": \"Todas as categorias\",\n \"inventory.filters.kind\": \"Tipo de item\",\n \"inventory.filters.allKinds\": \"Todos\",\n \"inventory.filters.status\": \"Situação\",\n \"inventory.filters.allStatuses\": \"Todas\",\n \"inventory.stock.pendingRetry\": \"A confirmação ainda está pendente. Não faça outro lançamento. Tente novamente com os mesmos dados antes de sair desta tela.\",\n \"inventory.stock.refreshAfterCommit\": \"Movimento registrado. Atualize a tela para consultar o saldo.\",\n \"inventory.dashboard.activeItems\": \"Itens ativos\",\n \"inventory.dashboard.belowMinimum\": \"Abaixo do mínimo\",\n \"inventory.dashboard.entries\": \"Entradas:\",\n \"inventory.dashboard.exits\": \"Saídas:\",\n \"inventory.dashboard.last7Days\": \"Últimos 7 dias\",\n \"inventory.dashboard.lowStock\": \"Estoque Baixo\",\n \"inventory.dashboard.needRestocking\": \"Precisam reposição\",\n \"inventory.dashboard.outOfStock\": \"Sem Estoque\",\n \"inventory.dashboard.quickActions\": \"Ações Rápidas\",\n \"inventory.dashboard.quickActionsDesc\": \"Use a barra lateral para registrar entradas, saídas ou gerenciar produtos.\",\n \"inventory.dashboard.recentActivity\": \"Atividade Recente\",\n \"inventory.dashboard.stockValue\": \"Valor do Estoque\",\n \"inventory.dashboard.totalProducts\": \"Total de Produtos\",\n \"inventory.dashboard.totalValue\": \"Valor total do estoque\",\n \"inventory.history.noMovements\": \"Nenhuma movimentação registrada\",\n \"inventory.history.columnDate\": \"Data\",\n \"inventory.history.columnProduct\": \"Produto\",\n \"inventory.history.columnType\": \"Tipo\",\n \"inventory.history.columnLocation\": \"Local\",\n \"inventory.history.columnQty\": \"Qtd\",\n \"inventory.history.columnTotal\": \"Total\",\n \"inventory.history.newEntry\": \"Nova entrada\",\n \"inventory.history.newExit\": \"Saída\",\n \"inventory.nav.recipes\": \"Fichas Técnicas\",\n \"inventory.entity.stockLocation\": \"Local de Estoque\",\n \"inventory.entity.stockLocation.plural\": \"Locais de Estoque\",\n \"inventory.entity.productCategory\": \"Categoria\",\n \"inventory.entity.productCategory.plural\": \"Categorias\",\n \"registry.suppliers\": \"Fornecedores\",\n \"registry.suppliers.description\": \"De quem você compra\",\n \"registry.product-categories\": \"Categorias\",\n \"registry.product-categories.description\": \"Como o catálogo é agrupado\",\n \"registry.stock-locations\": \"Locais de estoque\",\n \"registry.stock-locations.description\": \"Onde o estoque fica de fato — câmara fria, estoque seco, freezer\",\n \"registry.measurement-units\": \"Unidades de medida\",\n \"registry.measurement-units.description\": \"Como cada item é contado\",\n \"inventory.history.searchPlaceholder\": \"Buscar movimentações...\",\n \"inventory.history.subtitle\": \"Todas as movimentações de estoque\",\n \"inventory.history.title\": \"Histórico de Estoque\",\n \"inventory.nav.dashboard\": \"Resumo\",\n \"inventory.nav.entry\": \"Entrada\",\n \"inventory.nav.exit\": \"Saída\",\n \"inventory.nav.history\": \"Histórico\",\n \"inventory.nav.inventory\": \"Inventário\",\n \"inventory.nav.list\": \"Lista\",\n \"inventory.nav.new\": \"Novo\",\n \"inventory.nav.products\": \"Produtos\",\n \"inventory.nav.stock\": \"Movimentações\",\n \"inventory.page.newProduct\": \"Novo Produto\",\n \"inventory.page.newProductDesc\": \"Adicionar um produto ao seu catálogo\",\n \"inventory.page.settingsSubtitle\": \"Preferências, fornecedores, categorias e unidades\",\n \"inventory.page.settingsTitle\": \"Configurações de Estoque\",\n \"inventory.page.stockEntry\": \"Entrada de Estoque\",\n \"inventory.page.stockEntryDesc\": \"Registrar mercadorias recebidas\",\n \"inventory.page.stockExit\": \"Saída de Estoque\",\n \"inventory.page.stockExitDesc\": \"Registrar mercadorias usadas ou vendidas\",\n \"inventory.recipeDetail.active\": \"Ativa\",\n \"inventory.recipeDetail.backToList\": \"Voltar à lista\",\n \"inventory.recipeDetail.inactive\": \"Inativa\",\n \"inventory.recipeDetail.ingredientCount\": \"Ingredientes\",\n \"inventory.recipeDetail.ingredientsTitle\": \"Ingredientes\",\n \"inventory.recipeDetail.instructions\": \"Instruções\",\n \"inventory.recipeDetail.noIngredients\": \"Nenhum ingrediente definido\",\n \"inventory.recipeDetail.notFound\": \"Receita não encontrada\",\n \"inventory.recipeDetail.prepTime\": \"Tempo de preparo\",\n \"inventory.recipeDetail.produces\": \"Produz\",\n \"inventory.recipeDetail.recipes\": \"Receitas\",\n \"inventory.recipeDetail.yield\": \"Rendimento\",\n \"inventory.recipes.createFirst\": \"Crie sua primeira receita\",\n \"inventory.recipes.ingredients\": \"Ingredientes\",\n \"inventory.recipes.newRecipe\": \"Nova Ficha Técnica\",\n \"inventory.recipes.noRecipes\": \"Nenhum produto produzido ainda\",\n \"inventory.recipes.exporting\": \"Gerando a planilha das fichas…\",\n \"inventory.recipes.exported\": \"Planilha baixada\",\n \"inventory.sheet.print\": \"Imprimir\",\n \"inventory.sheet.printSaveFirst\": \"Salve a ficha antes de imprimir\",\n \"inventory.recipes.noCategory\": \"Sem categoria\",\n \"inventory.recipes.filterKind\": \"Tipo\",\n \"inventory.recipes.filterKindAll\": \"Todos os tipos\",\n \"inventory.recipes.kindSale\": \"Venda\",\n \"inventory.recipes.kindIntermediate\": \"Intermediário\",\n \"inventory.recipes.filterCategory\": \"Categoria\",\n \"inventory.recipes.filterCategoryAll\": \"Todas as categorias\",\n \"inventory.recipes.filterCmv\": \"CMV\",\n \"inventory.recipes.filterCmvAll\": \"Todo CMV\",\n \"inventory.recipes.cmvHigh\": \"CMV acima de {{pct}}%\",\n \"inventory.recipes.cmvGood\": \"CMV bom (abaixo de {{pct}}%)\",\n \"inventory.recipes.cmvAttention\": \"CMV atenção ({{from}}–{{to}}%)\",\n \"inventory.recipes.cmvNone\": \"Sem CMV\",\n \"inventory.recipes.produces\": \"Produz:\",\n \"inventory.recipes.productionFormulas\": \"{{count}} fórmulas de produção\",\n \"inventory.recipes.recipesDesc\": \"Receitas definem como produzir produtos a partir de ingredientes\",\n \"inventory.recipes.title\": \"Fichas Técnicas\",\n \"inventory.recipes.yield\": \"Rendimento\",\n \"inventory.stock.additionalDetails\": \"Detalhes adicionais (opcional)\",\n \"inventory.stock.adjustmentDesc\": \"Correção de contagem\",\n \"inventory.stock.adjustmentLabel\": \"Ajuste\",\n \"inventory.stock.back\": \"Voltar\",\n \"inventory.stock.batchNumber\": \"Número do Lote\",\n \"inventory.stock.currentStock\": \"Estoque Atual\",\n \"inventory.stock.destination\": \"Destino\",\n \"inventory.stock.document\": \"Documento\",\n \"inventory.stock.documentNumber\": \"Número do Documento\",\n \"inventory.stock.entry\": \"Entrada de Estoque\",\n \"inventory.stock.entryDesc\": \"Recebimento de mercadorias\",\n \"inventory.stock.entryLabel\": \"Entrada\",\n \"inventory.stock.exit\": \"Saída de Estoque\",\n \"inventory.stock.exitDesc\": \"Uso ou venda\",\n \"inventory.stock.exitLabel\": \"Saída\",\n \"inventory.stock.expirationDate\": \"Data de Validade\",\n \"inventory.stock.fromLocation\": \"Local de Origem\",\n \"inventory.stock.locationLabel\": \"Local\",\n \"inventory.stock.lossDesc\": \"Desperdício ou dano\",\n \"inventory.stock.lossLabel\": \"Perda\",\n \"inventory.stock.movement\": \"Movimentação de Estoque\",\n \"inventory.stock.movementDetails\": \"Detalhes da Movimentação\",\n \"inventory.stock.movementType\": \"Tipo de movimentação\",\n \"inventory.stock.next\": \"Próximo\",\n \"inventory.stock.notes\": \"Observações\",\n \"inventory.stock.product\": \"Produto\",\n \"inventory.stock.quantity\": \"Quantidade *\",\n \"inventory.stock.quantityLabel\": \"Quantidade\",\n \"inventory.stock.reason\": \"Motivo *\",\n \"inventory.stock.reasonLabel\": \"Motivo\",\n \"inventory.stock.recordMovement\": \"Registrar Movimentação\",\n \"inventory.stock.recorded\": \"Registrado\",\n \"inventory.stock.recording\": \"Registrando...\",\n \"inventory.stock.searchProduct\": \"Buscar por nome, SKU ou código de barras...\",\n \"inventory.stock.stepOf\": \"Etapa {{step}} de 3\",\n \"inventory.stock.supplier\": \"Fornecedor\",\n \"inventory.stock.toLocation\": \"Local de Destino *\",\n \"inventory.stock.total\": \"Total\",\n \"inventory.stock.totalCost\": \"Custo Total\",\n \"inventory.stock.transferDesc\": \"Entre locais\",\n \"inventory.stock.transferLabel\": \"Transferência\",\n \"inventory.stock.unitCost\": \"Custo Unitário\",\n \"inventory.stock.unitCostLabel\": \"Custo Unitário\",\n \"inventory.stock.searchSupplier\": \"Buscar fornecedor...\",\n \"inventory.stock.noSuppliers\": \"Nenhum fornecedor cadastrado\",\n \"inventory.productDetail.stockTab\": \"Estoque\",\n \"inventory.productDetail.positionsTitle\": \"Estoque por local\",\n \"inventory.productDetail.onHand\": \"Em estoque\",\n \"inventory.productDetail.minimum\": \"Mínimo\",\n \"inventory.productDetail.noPositions\": \"Sem estoque em nenhum local\",\n \"inventory.productDetail.historyTitle\": \"Movimentação\",\n \"inventory.productDetail.undoLast\": \"Desfazer último movimento\",\n \"inventory.productDetail.undoTitle\": \"Desfazer o último movimento?\",\n \"inventory.productDetail.undoDescription\": \"{{type}} de {{quantity}} em {{date}} sai do histórico, e o estoque que ele moveu volta.\",\n \"inventory.productDetail.undoConfirm\": \"Desfazer\",\n \"inventory.productDetail.undone\": \"Movimento desfeito\",\n \"inventory.productDetail.undoFailed\": \"Não foi possível desfazer o movimento\",\n \"inventory.productDetail.notFound\": \"Produto não encontrado\",\n \"inventory.productDetail.backToList\": \"Voltar para produtos\",\n \"inventory.onboarding.welcome\": \"Bem-vindo ao Estoque\",\n \"inventory.onboarding.description\": \"Acompanhe produtos, gerencie níveis de estoque e monitore movimentações do seu negócio.\",\n \"inventory.onboarding.skip\": \"Pular configuração\",\n \"inventory.onboarding.getStarted\": \"Começar\",\n \"inventory.onboarding.units.title\": \"Unidades de Medida\",\n \"inventory.onboarding.units.description\": \"Unidades padrão (Unidade, Caixa, Kg, L, etc.) estão prontas. Personalize-as a qualquer momento em Configurações.\",\n \"inventory.onboarding.locations.title\": \"Locais de Estoque\",\n \"inventory.onboarding.locations.description\": \"Um local de armazenamento padrão foi criado. Adicione mais para controle multi-local.\",\n \"inventory.onboarding.start\": \"Começar a usar Estoque\",\n \"inventory.onboarding.preparing\": \"Preparando estoque...\",\n \"inventory.onboarding.setupError\": \"Não foi possível preparar as unidades e o local padrão. Tente novamente.\",\n \"inventory.quickActions.newProduct\": \"Novo Produto\",\n \"inventory.quickActions.newProductDesc\": \"Adicionar um produto ao catálogo\",\n \"inventory.quickActions.stockEntry\": \"Entrada de Estoque\",\n \"inventory.quickActions.stockEntryDesc\": \"Registrar mercadorias recebidas\",\n \"inventory.quickActions.stockExit\": \"Saída de Estoque\",\n \"inventory.quickActions.stockExitDesc\": \"Registrar mercadorias usadas ou vendidas\",\n \"inventory.settingsPage.title\": \"Configurações de Estoque\",\n \"inventory.settingsPage.subtitle\": \"Gerenciar unidades, categorias e locais de estoque\",\n \"inventory.settings.modules\": \"Módulos\",\n \"inventory.settings.modulesDesc\": \"O que desta casa aparece no Estoque\",\n \"inventory.settings.recipes\": \"Receitas\",\n \"inventory.settings.recipesDesc\": \"A ficha técnica que diz quanto cada produto consome\",\n \"inventory.settings.requisitions\": \"Requisições\",\n \"inventory.settings.requisitionsDesc\": \"Pedidos internos de material entre setores\",\n \"inventory.settings.usageAuditDesc\": \"O que saiu do estoque contra o que foi vendido\",\n \"inventory.settings.temperature\": \"Temperatura\",\n \"inventory.settings.temperatureDesc\": \"Registro de temperatura dos locais refrigerados\",\n \"inventory.settings.stockManagement\": \"Gestão de Estoque\",\n \"inventory.settings.stockManagementDesc\": \"Como os níveis de estoque são rastreados\",\n \"inventory.settings.lowStockAlerts\": \"Alertas de estoque baixo\",\n \"inventory.settings.lowStockAlertsDesc\": \"Mostrar avisos quando produtos ficarem abaixo da quantidade mínima\",\n \"inventory.settings.requireReason\": \"Exigir motivo para ajustes\",\n \"inventory.settings.requireReasonDesc\": \"Tornar obrigatório o motivo para ajustes e perdas de estoque\",\n \"inventory.settings.autoDeduct\": \"Auto-deduzir no serviço\",\n \"inventory.settings.autoDeductDesc\": \"Deduzir automaticamente produtos quando um serviço é executado\",\n \"inventory.settings.products\": \"Produtos\",\n \"inventory.settings.productsDesc\": \"Comportamento do catálogo de produtos\",\n \"inventory.settings.requireSku\": \"Exigir SKU\",\n \"inventory.settings.requireSkuDesc\": \"Tornar SKU obrigatório ao criar produtos\",\n \"inventory.settings.allowNegative\": \"Permitir estoque negativo\",\n \"inventory.settings.allowNegativeDesc\": \"Permitir que quantidades de estoque fiquem abaixo de zero\",\n \"inventory.settings.notifications\": \"Notificações\",\n \"inventory.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"inventory.settings.lowStockEmail\": \"Alertas de estoque baixo por e-mail\",\n \"inventory.settings.lowStockEmailDesc\": \"Enviar e-mail quando produtos atingirem a quantidade mínima\",\n \"inventory.settings.expiryWarnings\": \"Avisos de validade\",\n \"inventory.settings.expiryWarningsDesc\": \"Alertar antes de produtos vencerem (rastreamento de lotes)\",\n // As fichas do produto — portadas do cadastro do V1 (as abas por tipo).\n \"inventory.productForm.commissionPercent\": \"% Comissão (venda)\",\n \"inventory.productForm.commissionPercentHint\": \"Quanto o profissional ganha ao vender este produto.\",\n \"inventory.productForm.chartAccount\": \"Plano de Contas\",\n \"inventory.productForm.avgPurchasePrice\": \"Preço médio de compra\",\n \"inventory.productForm.avgPurchasePriceHint\": \"Atualizado a cada entrada de estoque.\",\n \"inventory.productForm.packaging\": \"Embalagem e Conversões\",\n \"inventory.productForm.packagingDesc\": \"Como a casa compra, quando é diferente de como ela conta.\",\n \"inventory.productForm.contentPerUnit\": \"Conteúdo por Unidade\",\n \"inventory.productForm.contentPerUnitHint\": \"Quanto cabe em UMA unidade de estoque (um frasco contém 300 ml).\",\n \"inventory.productForm.contentUnit\": \"Unidade de Conteúdo\",\n \"inventory.productForm.purchaseUnit\": \"Unidade de Compra\",\n \"inventory.productForm.conversionFactor\": \"Quantidade por Embalagem\",\n \"inventory.productForm.conversionFactorHint\": \"Quantas unidades de estoque vêm em uma unidade de compra.\",\n \"inventory.productForm.flagIngredient\": \"Insumo\",\n \"inventory.productForm.flagIngredientHint\": \"Aparece nas fichas técnicas.\",\n \"inventory.productForm.flagForSale\": \"Venda\",\n \"inventory.productForm.flagForSaleHint\": \"Cardápio, PDV, catálogo.\",\n \"inventory.productForm.flagIntermediate\": \"Intermediário\",\n \"inventory.productForm.flagIntermediateHint\": \"Produzido para consumir depois (molho, massa).\",\n \"inventory.productForm.flagAsset\": \"Patrimônio\",\n \"inventory.productForm.flagAssetHint\": \"Equipamento: entra no balanço, não se consome.\",\n \"inventory.productForm.flagProduced\": \"Produto produzido\",\n \"inventory.productForm.flagProducedHint\": \"Nasce de uma receita — habilita a ficha técnica.\",\n \"inventory.productForm.flagResale\": \"Revenda\",\n \"inventory.productForm.flagResaleHint\": \"Mercadoria destinada à revenda ao cliente.\",\n \"inventory.productForm.flagTracked\": \"Alto custo / etiquetado\",\n \"inventory.productForm.flagTrackedHint\": \"Cada unidade é acompanhada individualmente.\",\n \"inventory.productForm.professionalResalePrice\": \"Preço de revenda profissional\",\n \"inventory.productForm.professionalResalePriceHint\": \"Preço cobrado quando o profissional revende ao cliente final.\",\n \"inventory.productForm.requireBatch\": \"Exigir lote na entrada\",\n \"inventory.productForm.requireBatchHint\": \"Bloqueia entrada de estoque sem número de lote.\",\n \"inventory.productForm.requireExpiry\": \"Exigir validade na entrada\",\n \"inventory.productForm.requireExpiryHint\": \"Bloqueia entrada de estoque sem data de validade.\",\n \"inventory.productForm.notes\": \"Observações\",\n \"inventory.productForm.ingredientSection\": \"Insumo\",\n \"inventory.productForm.ingredientSectionDesc\": \"O que a compra precisa saber para repor na hora certa.\",\n \"inventory.productForm.ingReorderPoint\": \"Ponto de reposição\",\n \"inventory.productForm.ingReorderPointHint\": \"Fica ACIMA do mínimo: é o aviso que ainda chega a tempo de comprar.\",\n \"inventory.productForm.ingLeadTime\": \"Prazo de entrega (dias)\",\n \"inventory.productForm.ingShelfLife\": \"Validade (dias)\",\n \"inventory.productForm.ingStorageTemp\": \"Temperatura de armazenamento\",\n \"inventory.productForm.saleSection\": \"Venda\",\n \"inventory.productForm.saleSectionDesc\": \"O que o cardápio e o balcão mostram ao cliente.\",\n \"inventory.productForm.salePrepTime\": \"Tempo de preparo (min)\",\n \"inventory.productForm.saleServes\": \"Serve (pessoas)\",\n \"inventory.productForm.saleCalories\": \"Calorias (kcal)\",\n \"inventory.productForm.saleMenuDescription\": \"Descrição no cardápio\",\n \"inventory.productForm.saleAllergens\": \"Alergênicos\",\n \"inventory.productForm.saleAllergensPlaceholder\": \"Contém glúten, lactose\",\n \"inventory.productForm.saleSoldByWeight\": \"Vendido por peso\",\n \"inventory.productForm.saleHighlightDelivery\": \"Destacar no delivery\",\n \"inventory.productForm.saleAvailableDelivery\": \"Disponível no delivery\",\n \"inventory.productForm.saleAvailableCounter\": \"Disponível no balcão\",\n \"inventory.productForm.saleChannelsSection\": \"Preços por canal\",\n \"inventory.productForm.saleChannelsSectionDesc\": \"Deixe vazio o canal que usa o preço de venda base.\",\n \"inventory.productForm.intermediateSection\": \"Intermediário\",\n \"inventory.productForm.intermediateSectionDesc\": \"O que a produção precisa saber para preparar o lote.\",\n \"inventory.productForm.intYield\": \"Rendimento (%)\",\n \"inventory.productForm.intPrepTime\": \"Tempo de preparo (min)\",\n \"inventory.productForm.intShelfLifeHours\": \"Validade após preparo (h)\",\n \"inventory.productForm.intBatchSize\": \"Tamanho do lote\",\n \"inventory.productForm.intBatchUnit\": \"Unidade do lote\",\n \"inventory.productForm.intStorage\": \"Instruções de armazenamento\",\n \"inventory.productForm.assetSection\": \"Patrimônio\",\n \"inventory.productForm.assetSectionDesc\": \"O equipamento que a casa possui, e quem responde por ele.\",\n \"inventory.productForm.assetValue\": \"Valor do ativo\",\n \"inventory.productForm.assetResidualValue\": \"Valor residual\",\n \"inventory.productForm.assetUsefulLife\": \"Vida útil (meses)\",\n \"inventory.productForm.assetDepreciation\": \"Depreciação anual (%)\",\n \"inventory.productForm.assetSerial\": \"Número de série\",\n \"inventory.productForm.assetAcquisition\": \"Data de aquisição\",\n \"inventory.productForm.assetWarranty\": \"Garantia até\",\n \"inventory.productForm.assetStatus\": \"Situação\",\n \"inventory.productForm.assetLocation\": \"Localização\",\n \"inventory.productForm.assetLocationPlaceholder\": \"Sala 2, prateleira B\",\n \"inventory.productForm.assetResponsible\": \"Responsável\",\n \"inventory.productForm.assetInsurance\": \"Apólice de seguro\",\n \"inventory.productForm.assetLastMaintenance\": \"Última manutenção\",\n \"inventory.productForm.assetNextMaintenance\": \"Próxima manutenção\",\n \"inventory.productForm.taxSection\": \"Fiscal\",\n \"inventory.productForm.taxSectionDesc\": \"O que a nota precisa dizer sobre este produto. Em branco vale o que o grupo fiscal diz.\",\n \"inventory.productForm.taxGroup\": \"Grupo fiscal\",\n \"inventory.productForm.taxGroupHint\": \"Cadastre em Estoque › Notas Fiscais › Grupos Fiscais.\",\n \"inventory.productForm.ncmHint\": \"Classificação do produto na nota. É do produto, nunca do grupo.\",\n \"inventory.productForm.icmsOrigin\": \"ICMS de origem\",\n \"inventory.productForm.icmsRate\": \"Alíquota ICMS (%)\",\n \"inventory.productForm.cstHint\": \"CST tem 2 dígitos. CSOSN tem 3 e se configura no grupo fiscal, para o Simples Nacional.\",\n \"inventory.productForm.pisRate\": \"Alíquota PIS (%)\",\n \"inventory.productForm.cofinsRate\": \"Alíquota COFINS (%)\",\n \"inventory.productForm.baseCalcMode\": \"Modalidade de base de cálculo\",\n \"inventory.productForm.benefitCode\": \"Código de benefícios fiscais (cBenef)\",\n \"inventory.productForm.povertyFund\": \"Fundo de combate à pobreza (%)\",\n \"inventory.productForm.ibsCbsSituation\": \"IBS e CBS — situação tributária\",\n \"inventory.productForm.ibsCbsClassification\": \"IBS e CBS — classificação tributária\",\n \"inventory.productForm.classificationRequired\": \"Escolha ao menos uma classificação para o produto.\",\n \"inventory.productType.ingredient\": \"Insumo\",\n \"inventory.productType.sale\": \"Venda\",\n \"inventory.productType.intermediate\": \"Intermediário\",\n \"inventory.productType.asset\": \"Patrimônio\",\n \"inventory.variants.tab\": \"Variações\",\n \"inventory.variants.name\": \"Variação\",\n \"inventory.variants.namePlaceholder\": \"Ex.: M, G, GG, Azul\",\n \"inventory.variants.sku\": \"SKU\",\n \"inventory.variants.skuPlaceholder\": \"Opcional\",\n \"inventory.variants.default\": \"Padrão\",\n \"inventory.variants.empty\": \"Nenhuma variação. O produto é vendido e estocado como um item só.\",\n \"inventory.variants.duplicate\": \"Já existe uma variação com esse nome.\",\n \"inventory.variants.loadFailed\": \"Não foi possível carregar as variações.\",\n \"inventory.variants.saveFailed\": \"Não foi possível salvar a variação.\",\n \"inventory.variants.unavailable\": \"Variações não estão disponíveis nesta conta.\",\n \"inventory.variants.onHand\": \"{{count}} em estoque\",\n \"inventory.barcodes.tab\": \"Códigos de Barras\",\n \"inventory.barcodes.code\": \"Código de barras\",\n \"inventory.barcodes.codePlaceholder\": \"Digite ou bipe\",\n \"inventory.barcodes.type\": \"Tipo\",\n \"inventory.barcodes.description\": \"Descrição\",\n \"inventory.barcodes.descriptionPlaceholder\": \"Embalagem 500 ml\",\n \"inventory.barcodes.needCode\": \"Digite ou bipe um código.\",\n \"inventory.barcodes.empty\": \"Nenhum código de barras cadastrado.\",\n \"inventory.barcodes.duplicate\": \"Este código já está em uso.\",\n \"inventory.barcodes.isPrimary\": \"Principal — é o que a etiqueta imprime\",\n \"inventory.barcodes.makePrimary\": \"Tornar principal\",\n \"inventory.barcodes.removeTitle\": \"Remover este código de barras?\",\n \"inventory.barcodes.unavailable\": \"Códigos de barras indisponíveis neste ambiente.\",\n \"inventory.productRecipe.tab\": \"Ficha Técnica\",\n \"inventory.productRecipe.none\": \"Este produto ainda não tem ficha técnica.\",\n \"inventory.productRecipe.noneHint\": \"A ficha técnica diz de que o produto é feito — é dela que saem o custo e o CMV.\",\n \"inventory.productRecipe.goToRecipes\": \"Ir para Receitas\",\n \"inventory.productForm.classificationUnset\": \"Sem classificação\",\n \"inventory.productForm.stepIdentity\": \"Identificação\",\n \"inventory.productForm.stepClassification\": \"Classificação\",\n \"inventory.productForm.stepPricing\": \"Preço\",\n \"inventory.productForm.stepStock\": \"Estoque\",\n \"inventory.productForm.stepInitialEntry\": \"Entrada inicial\",\n \"inventory.productForm.initialEntrySection\": \"Dar entrada no estoque\",\n \"inventory.productForm.initialEntrySectionDesc\": \"Opcional: registre o que já está na prateleira. Deixe em branco para dar entrada depois.\",\n \"inventory.productForm.initialQuantity\": \"Quantidade em estoque\",\n \"inventory.productForm.initialLocation\": \"Local\",\n \"inventory.productForm.initialLocationHint\": \"Em branco usa o local padrão do produto.\",\n \"inventory.productForm.initialUnitCost\": \"Custo unitário\",\n \"inventory.productForm.initialUnitCostHint\": \"Em branco usa o custo do produto.\",\n \"inventory.productForm.initialBatch\": \"Lote\",\n \"inventory.productForm.initialExpiry\": \"Validade\",\n \"inventory.productForm.initialEntryFailed\": \"Produto criado, mas a entrada de estoque não foi registrada. Dê entrada pela aba Estoque.\",\n \"inventory.productForm.newProduct\": \"Novo Produto\",\n \"inventory.productForm.editProduct\": \"Editar Produto\",\n \"inventory.productForm.updateDetails\": \"Atualizar detalhes do produto\",\n \"inventory.productForm.addToCatalog\": \"Adicionar um produto ao seu catálogo\",\n \"inventory.productForm.cancel\": \"Cancelar\",\n \"inventory.productForm.save\": \"Salvar\",\n \"inventory.productForm.saving\": \"Salvando...\",\n \"inventory.productForm.generalInfo\": \"Informações Gerais\",\n \"inventory.productForm.name\": \"Nome\",\n \"inventory.productForm.namePlaceholder\": \"Nome do produto\",\n \"inventory.productForm.brand\": \"Marca\",\n \"inventory.productForm.brandPlaceholder\": \"Nome da marca\",\n \"inventory.productForm.sku\": \"SKU\",\n \"inventory.productForm.skuPlaceholder\": \"Código interno\",\n \"inventory.productForm.barcode\": \"Código de Barras\",\n \"inventory.productForm.barcodePlaceholder\": \"EAN / UPC\",\n \"inventory.productForm.description\": \"Descrição\",\n \"inventory.productForm.descriptionPlaceholder\": \"Informações adicionais sobre o produto\",\n \"inventory.productForm.classification\": \"Classificação\",\n \"inventory.productForm.classificationDesc\": \"Como este produto é usado no seu negócio\",\n \"inventory.productForm.typeIngredient\": \"Matéria-prima usada na produção ou serviços\",\n \"inventory.productForm.typeSale\": \"Vendido diretamente aos clientes\",\n \"inventory.productForm.typeIntermediate\": \"Produzido internamente a partir de outros itens\",\n \"inventory.productForm.typeAsset\": \"Ativo fixo para controle patrimonial\",\n \"inventory.productForm.pricing\": \"Preços\",\n \"inventory.productForm.costPrice\": \"Preço de Custo\",\n \"inventory.productForm.salePrice\": \"Preço de Venda\",\n \"inventory.productForm.margin\": \"Margem\",\n \"inventory.productForm.stockLevels\": \"Níveis de Estoque\",\n \"inventory.productForm.stockLevelsDesc\": \"Limites mínimo e máximo para alertas\",\n \"inventory.productForm.minQuantity\": \"Quantidade Mínima\",\n \"inventory.productForm.minQuantityHint\": \"Alertar quando o estoque ficar abaixo deste valor\",\n \"inventory.productForm.maxQuantity\": \"Quantidade Máxima\",\n \"inventory.productForm.maxQuantityHint\": \"Capacidade máxima para este produto\",\n \"inventory.productForm.optional\": \"Opcional\",\n \"inventory.productForm.organization\": \"Organização\",\n \"inventory.productForm.organizationDesc\": \"Categoria, unidade, fornecedor e local padrão de estoque\",\n \"inventory.productForm.category\": \"Categoria\",\n \"inventory.productForm.measurementUnit\": \"Unidade de medida\",\n \"inventory.productForm.measurementUnitHint\": \"Como este item é contado no estoque\",\n \"inventory.productForm.supplier\": \"Fornecedor padrão\",\n \"inventory.productForm.defaultLocation\": \"Local padrão\",\n \"inventory.movementType.entry\": \"Entrada\",\n \"inventory.movementType.exit\": \"Saída\",\n \"inventory.movementType.adjustment\": \"Ajuste\",\n \"inventory.movementType.transfer\": \"Transferência\",\n \"inventory.movementType.loss\": \"Perda\",\n \"inventory.recipeForm.group\": \"Etapa\",\n \"inventory.recipeForm.ungrouped\": \"Sem etapa\",\n \"inventory.productList.bulkActivate\": \"Ativar\",\n \"inventory.productList.bulkActivated\": \"{{count}} produto(s) ativado(s)\",\n \"inventory.productList.bulkDeactivate\": \"Desativar\",\n \"inventory.productList.bulkDeactivated\": \"{{count}} produto(s) desativado(s)\",\n \"inventory.productList.bulkFailed\": \"{{count}} produto(s) não puderam ser atualizados\",\n \"inventory.productList.bulkNothingToDo\": \"Os produtos selecionados já estão nesse estado.\",\n \"inventory.productList.filterActive\": \"Ativos\",\n \"inventory.productList.filterAllStatuses\": \"Ativos e inativos\",\n \"inventory.productList.filterInactive\": \"Inativos\",\n \"inventory.productList.filterStatus\": \"Situação\",\n \"inventory.productList.inactive\": \"Inativo\",\n \"inventory.productList.title\": \"Produtos\",\n \"inventory.productList.subtitle\": \"{{count}} produtos\",\n \"inventory.productList.product\": \"Produto\",\n \"inventory.productList.type\": \"Tipo\",\n \"inventory.productList.stock\": \"Estoque\",\n \"inventory.productList.cost\": \"Custo\",\n \"inventory.productList.value\": \"Valor\",\n \"inventory.productList.searchPlaceholder\": \"Buscar produtos...\",\n 'inventory.productList.aiHint': 'Descreva o produto e eu cadastro.',\n 'inventory.productList.askPlaceholder': 'Descreva o produto…',\n 'inventory.productList.askPersona': 'Cadastro de produtos',\n 'inventory.productList.askPitch': 'Diga o produto que você quer cadastrar.',\n 'inventory.productList.askDescription': 'Nome, preço, custo, SKU, tipo — diga o que souber, do jeito que falar, e eu preencho o resto com o que faz sentido. Você confere antes de salvar.',\n 'inventory.productList.askSuggestion.0': 'Camiseta preta P/M/G, R$ 79, custo R$ 28',\n 'inventory.productList.askSuggestion.1': 'Cadastre 5 produtos de exemplo para eu testar a loja',\n 'inventory.productList.askSuggestion.2': 'Um combo com os dois itens mais vendidos',\n \"inventory.productList.newProduct\": \"Novo Produto\",\n \"inventory.productList.empty\": \"Nenhum produto ainda\",\n \"inventory.productList.createFirst\": \"Crie seu primeiro produto\",\n \"inventory.stock.unknownProduct\": \"Produto Desconhecido\",\n \"inventory.stock.reasonLossPlaceholder\": \"ex. Vencido, danificado\",\n \"inventory.stock.reasonAdjustPlaceholder\": \"ex. Correção de contagem física\",\n \"inventory.stock.documentPlaceholder\": \"Nota fiscal, recibo, PO...\",\n \"inventory.stock.batchPlaceholder\": \"ex. LOT001\",\n \"inventory.stock.notesPlaceholder\": \"Observações adicionais...\",\n \"inventory.recipeDetail.loading\": \"Carregando...\",\n \"inventory.recipeDetail.ingredient\": \"Ingrediente\",\n \"inventory.recipeDetail.quantity\": \"Quantidade\",\n \"inventory.recipeDetail.unit\": \"Unidade\",\n \"inventory.recipeDetail.notes\": \"Observações\",\n \"inventory.recipeDetail.created\": \"Criado\",\n \"inventory.recipeDetail.updated\": \"Atualizado\",\n \"inventory.recipeForm.newRecipe\": \"Nova Receita\",\n \"inventory.recipeForm.subtitle\": \"Definir uma fórmula de produção\",\n \"inventory.recipeForm.cancel\": \"Cancelar\",\n \"inventory.recipeForm.saveRecipe\": \"Salvar Receita\",\n \"inventory.recipeForm.saving\": \"Salvando...\",\n \"inventory.recipeForm.recipeDetails\": \"Detalhes da Receita\",\n \"inventory.recipeForm.recipeName\": \"Nome da Receita\",\n \"inventory.recipeForm.recipeNamePlaceholder\": \"ex. Molho de Tomate\",\n \"inventory.recipeForm.description\": \"Descrição\",\n \"inventory.recipeForm.descriptionPlaceholder\": \"Breve descrição...\",\n \"inventory.recipeForm.produces\": \"Produz (Produto)\",\n \"inventory.recipeForm.searchProduct\": \"Buscar produto...\",\n \"inventory.recipeForm.createProduct\": \"Criar produto\",\n \"inventory.recipeForm.yieldQuantity\": \"Quantidade de Rendimento\",\n \"inventory.recipeForm.prepTime\": \"Tempo de Preparo (min)\",\n \"inventory.recipeForm.instructions\": \"Instruções\",\n \"inventory.recipeForm.instructionsPlaceholder\": \"Instruções de preparo passo a passo...\",\n \"inventory.recipeForm.ingredients\": \"Ingredientes\",\n \"inventory.recipeForm.addIngredient\": \"Adicionar Ingrediente\",\n \"inventory.recipeForm.noIngredients\": \"Nenhum ingrediente adicionado\",\n \"inventory.recipeForm.addFirstIngredient\": \"Adicione seu primeiro ingrediente\",\n \"inventory.recipeForm.ingredient\": \"Ingrediente\",\n \"inventory.recipeForm.quantity\": \"Quantidade\",\n \"inventory.recipeForm.notes\": \"Observações\",\n \"inventory.recipeForm.searchIngredient\": \"Buscar ingrediente...\",\n \"inventory.recipeForm.createIngredient\": \"Criar ingrediente\",\n \"inventory.recipeForm.notesPlaceholder\": \"ex. picado, fresco\",\n \"inventory.recipeForm.ingredientsConfigured\": \"{{configured}} de {{total}} ingredientes configurados\",\n \"inventory.title\": \"Estoque\",\n \"inventory.stock.title\": \"Estoque\",\n \"inventory.stock.minStock\": \"Estoque Mín.\",\n \"inventory.stock.adjust\": \"Ajustar Estoque\",\n \"inventory.stock.lowStock\": \"Estoque Baixo\",\n \"inventory.products.title\": \"Produtos\",\n \"inventory.products.create\": \"Novo Produto\",\n \"inventory.recipes.create\": \"Nova Receita\",\n \"inventory.recipes.addIngredient\": \"Adicionar Ingrediente\",\n \"inventory.recipes.cost\": \"Custo\",\n \"inventory.recipes.loading\": \"Carregando...\",\n \"inventory.suppliers.title\": \"Fornecedores\",\n \"inventory.suppliers.create\": \"Novo Fornecedor\",\n \"inventory.movements.title\": \"Movimentações\",\n \"inventory.movements.in\": \"Entrada\",\n \"inventory.movements.out\": \"Saída\",\n \"inventory.settings.title\": \"Configurações de Estoque\",\n\n \"inventory.recipeDetail.cost\": \"Custo\",\n \"inventory.recipeDetail.unitCost\": \"Custo unitário\",\n \"inventory.recipeDetail.totalCost\": \"Custo da ficha\",\n \"inventory.recipeDetail.costPerYield\": \"Custo por unidade produzida\",\n \"inventory.recipeDetail.salePrice\": \"Preço de venda\",\n \"inventory.recipeDetail.cmv\": \"CMV\",\n \"inventory.recipeDetail.cmvUnknown\": \"Sem preço de venda\",\n \"inventory.recipeDetail.cmvHigh\": \"Acima de {{threshold}}% — este prato está comendo a margem.\",\n\n \"inventory.recipeGaps.title\": \"Falta ligar ao seu catálogo\",\n \"inventory.recipeGaps.description\": \"A assistente sugeriu estes itens mas não achou equivalente. Escolha o insumo certo ou cadastre.\",\n \"inventory.recipeGaps.produces\": \"Produz:\",\n \"inventory.recipeGaps.unnamed\": \"Ingrediente sem nome\",\n \"inventory.recipeGaps.linkFailed\": \"Não foi possível ligar este item\",\n \"inventory.recipeGaps.createFailed\": \"Não foi possível cadastrar o produto\",\n\n \"inventory.recipes.entity\": \"Ficha técnica\",\n \"inventory.recipes.colProduct\": \"Produto\",\n \"inventory.recipes.colIngredients\": \"Insumos\",\n \"inventory.recipes.colYield\": \"Rendimento\",\n \"inventory.recipes.colPrep\": \"Preparo\",\n \"inventory.recipes.colCost\": \"Custo\",\n \"inventory.recipes.colSale\": \"Venda\",\n \"inventory.recipes.colCmv\": \"CMV\",\n \"inventory.recipes.noSheet\": \"Sem ficha técnica\",\n \"inventory.recipes.searchPlaceholder\": \"Buscar receita...\",\n \"inventory.recipes.newByHand\": \"Preencher à mão\",\n \"inventory.recipes.newByHandHint\": \"Abrir o formulário e lançar os insumos você mesmo\",\n \"inventory.recipes.aiHint\": \"Descreva o prato e receba a ficha montada com os seus insumos\",\n \"inventory.recipes.askPlaceholder\": \"ex. ficha técnica do cupim defumado com queijo, 400g, serve 3\",\n \"inventory.recipes.askPersona\": \"Fichas técnicas\",\n \"inventory.recipes.askPitch\": \"Vamos custear o seu cardápio\",\n \"inventory.recipes.askDescription\": \"Descreva o prato que eu monto a ficha com os insumos que você já tem, com custo e CMV.\",\n \"inventory.recipes.askSuggestion.0\": \"Monte a ficha técnica do cupim defumado com queijo\",\n \"inventory.recipes.askSuggestion.1\": \"Quais itens do cardápio ainda não têm ficha técnica?\",\n \"inventory.recipes.askSuggestion.2\": \"Quais pratos estão acima de 35% de CMV?\",\n \"inventory.recipes.loadFailed\": \"Não foi possível carregar as fichas técnicas\",\n \"inventory.recipes.retry\": \"Tentar novamente\",\n \"inventory.recipeDetail.loadFailed\": \"Não foi possível carregar esta ficha técnica\",\n \"inventory.recipeDetail.retry\": \"Tentar novamente\",\n\n \"inventory.nav.counts\": \"Contagens\",\n \"inventory.counts.title\": \"Contagens de estoque\",\n \"inventory.counts.entity\": \"Contagem\",\n \"inventory.counts.colReference\": \"Contagem\",\n \"inventory.counts.colOpened\": \"Aberta em\",\n \"inventory.counts.colStatus\": \"Situação\",\n \"inventory.counts.colProgress\": \"Contados\",\n \"inventory.counts.colDivergent\": \"Divergências\",\n \"inventory.counts.status.open\": \"Aberta\",\n \"inventory.counts.status.counting\": \"Contando\",\n \"inventory.counts.status.closed\": \"Fechada\",\n \"inventory.counts.status.cancelled\": \"Cancelada\",\n \"inventory.counts.progress\": \"{{counted}} de {{total}}\",\n \"inventory.counts.newCount\": \"Nova contagem\",\n \"inventory.counts.searchPlaceholder\": \"Buscar contagem...\",\n \"inventory.counts.empty\": \"Nenhuma contagem ainda\",\n \"inventory.counts.formTitle\": \"Abrir uma contagem\",\n \"inventory.counts.formSubtitle\": \"O que o sistema acredita é congelado na hora em que você abre — a variação fala da prateleira, não do relógio.\",\n \"inventory.counts.location\": \"Local de estoque\",\n \"inventory.counts.pickLocation\": \"Escolha um local\",\n \"inventory.counts.category\": \"Categoria\",\n \"inventory.counts.allCategories\": \"Todas as categorias\",\n \"inventory.counts.reference\": \"Nome\",\n \"inventory.counts.referencePlaceholder\": \"ex. Câmara fria, fim de agosto\",\n \"inventory.counts.blind\": \"Contagem cega\",\n \"inventory.counts.blindHint\": \"Esconde a quantidade do sistema enquanto você conta, para escrever o que está na prateleira em vez de confirmar o que está na tela.\",\n \"inventory.counts.blindLine\": \"Cega — quantidade do sistema oculta\",\n \"inventory.counts.notes\": \"Observações\",\n \"inventory.counts.notesPlaceholder\": \"O que a próxima pessoa precisa saber\",\n \"inventory.counts.open\": \"Abrir a contagem\",\n \"inventory.counts.opening\": \"Abrindo...\",\n \"inventory.counts.openFailed\": \"Não foi possível abrir a contagem\",\n \"inventory.counts.cancel\": \"Cancelar\",\n \"inventory.counts.notFound\": \"Contagem não encontrada\",\n \"inventory.counts.noItems\": \"Esta contagem não tem produtos\",\n \"inventory.counts.systemQty\": \"Sistema:\",\n \"inventory.counts.notCounted\": \"Não contado\",\n \"inventory.counts.counted\": \"Contados\",\n \"inventory.counts.divergent\": \"Divergências\",\n \"inventory.counts.varianceValue\": \"Variação\",\n \"inventory.counts.saveFailed\": \"Não foi possível salvar esta linha\",\n \"inventory.counts.close\": \"Fechar a contagem\",\n \"inventory.counts.closeTitle\": \"Fechar a contagem?\",\n \"inventory.counts.closeDescription\": \"{{divergent}} linha(s) divergem do sistema e vão receber um ajuste.\",\n \"inventory.counts.incomplete\": \"Finalize a contagem antes de fechar\",\n \"inventory.counts.incompleteDescription\": \"Ainda existem {{count}} linha(s) em branco. Informe zero quando o item acabou fisicamente.\",\n \"inventory.counts.closeConfirm\": \"Fechar e ajustar\",\n \"inventory.counts.closed\": \"Contagem fechada — {{count}} ajuste(s) lançado(s)\",\n \"inventory.counts.alreadyClosed\": \"Esta contagem já estava fechada\",\n \"inventory.counts.closeFailed\": \"Não foi possível fechar a contagem\",\n \"inventory.counts.cancelCount\": \"Cancelar contagem\",\n \"inventory.counts.cancelTitle\": \"Cancelar esta contagem?\",\n \"inventory.counts.cancelDescription\": \"A contagem é arquivada e nada é ajustado. O que você digitou fica registrado.\",\n \"inventory.counts.cancelConfirm\": \"Cancelar a contagem\",\n \"inventory.counts.cancelled\": \"Contagem cancelada\",\n \"inventory.counts.cancelFailed\": \"Não foi possível cancelar a contagem\",\n \"inventory.counts.adjustmentReason\": \"Contagem de estoque {{reference}}\",\n 'inventory.productDetail.newMovement': 'Lançar movimento',\n 'inventory.productDetail.movementFailed': 'Não foi possível lançar o movimento',\n \"inventory.nav.usageAudit\": \"Auditoria de Uso\",\n \"inventory.usageAudit.title\": \"Auditoria de Uso de Produtos\",\n \"inventory.usageAudit.subtitle\": \"Confira o que os atendimentos consumiram e corrija a quantidade lançada errada.\",\n \"inventory.usageAudit.columnProduct\": \"Produto\",\n \"inventory.usageAudit.columnQuantity\": \"Quantidade\",\n \"inventory.usageAudit.columnLocation\": \"Posição\",\n \"inventory.usageAudit.columnWhen\": \"Quando\",\n \"inventory.usageAudit.columnPerformedBy\": \"Profissional\",\n \"inventory.usageAudit.columnCustomer\": \"Cliente\",\n \"inventory.usageAudit.columnCost\": \"Custo\",\n \"inventory.usageAudit.standard\": \"Padrão\",\n \"inventory.usageAudit.badgePosted\": \"Baixado\",\n \"inventory.usageAudit.badgeApproved\": \"Aprovado\",\n \"inventory.usageAudit.batchNoStock\": \"{count} sem saldo — seguem na fila\",\n \"inventory.usageAudit.corrected\": \"Corrigido\",\n \"inventory.usageAudit.noLocation\": \"Sem posição\",\n \"inventory.usageAudit.unnamedProduct\": \"Produto sem nome\",\n \"inventory.usageAudit.reason\": \"Observações da auditoria\",\n \"inventory.usageAudit.cancel\": \"Cancelar\",\n \"inventory.usageAudit.loadFailed\": \"Não foi possível carregar a auditoria\",\n \"inventory.usageAudit.searchPlaceholder\": \"Buscar por produto, cliente, profissional…\",\n \"inventory.usageAudit.periodLabel\": \"Período\",\n \"inventory.usageAudit.period30\": \"30 dias\",\n \"inventory.usageAudit.period90\": \"90 dias\",\n \"inventory.usageAudit.periodAll\": \"Todo o período\",\n \"inventory.usageAudit.filterPending\": \"Pendentes\",\n \"inventory.usageAudit.emptyPending\": \"Nenhum consumo esperando conferência neste período.\",\n \"inventory.usageAudit.columnActions\": \"Ações\",\n \"inventory.usageAudit.post\": \"Baixar\",\n \"inventory.usageAudit.approve\": \"Aprovar\",\n \"inventory.usageAudit.postHint\": \"Aceita o consumo E desconta do saldo\",\n \"inventory.usageAudit.approveHint\": \"Aceita o consumo sem mexer no saldo\",\n \"inventory.usageAudit.posted\": \"{{count}} linha(s) baixada(s) do estoque\",\n \"inventory.usageAudit.approved\": \"{{count}} linha(s) aprovada(s)\",\n \"inventory.usageAudit.approveFailed\": \"Não foi possível aceitar o consumo\",\n \"inventory.usageAudit.noStock\": \"Sem saldo para baixar — dê entrada no produto ou use Aprovar\",\n \"inventory.usageAudit.filtersLabel\": \"Filtros\",\n \"inventory.usageAudit.filterLabel\": \"Conferência\",\n \"inventory.usageAudit.filterAll\": \"Tudo\",\n \"inventory.usageAudit.filterDivergent\": \"Fora do padrão\",\n \"inventory.usageAudit.empty\": \"Nenhum consumo lançado pelos atendimentos ainda\",\n \"inventory.usageAudit.columnCounted\": \"Conferido\",\n \"inventory.usageAudit.draftOne\": \"1 quantidade alterada\",\n \"inventory.usageAudit.draftMany\": \"{{count}} quantidades alteradas\",\n \"inventory.usageAudit.draftCheck\": \"Confira as quantidades digitadas\",\n \"inventory.usageAudit.draftHint\": \"Aplicar lan\\u00e7a um ajuste por linha, todos com a mesma observa\\u00e7\\u00e3o.\",\n \"inventory.usageAudit.draftCost\": \"Diferen\\u00e7a de custo do consumo: {{value}}\",\n \"inventory.usageAudit.draftInvalid\": \"{{count}} linha(s) com quantidade que n\\u00e3o \\u00e9 um n\\u00famero\",\n \"inventory.usageAudit.draftNothing\": \"Nenhuma quantidade mudou ainda\",\n \"inventory.usageAudit.discard\": \"Descartar\",\n \"inventory.usageAudit.apply\": \"Aplicar {{count}}\",\n \"inventory.usageAudit.applyTitle\": \"Aplicar {{count}} correções\",\n \"inventory.usageAudit.applyDescription\": \"Um ajuste por linha no raz\\u00e3o, todos com a mesma observa\\u00e7\\u00e3o. Nada \\u00e9 reescrito: a diferen\\u00e7a \\u00e9 lan\\u00e7ada.\",\n \"inventory.usageAudit.applyConfirm\": \"Aplicar\",\n \"inventory.usageAudit.batchReasonPlaceholder\": \"Por que estas quantidades mudaram\\u2026\",\n \"inventory.usageAudit.batchReasonHint\": \"Vale para o lote inteiro \\u2014 \\u00e9 a observa\\u00e7\\u00e3o que ficar\\u00e1 em cada movimento.\",\n \"inventory.usageAudit.batchApplied\": \"{{count}} correções lançadas no razão\",\n \"inventory.usageAudit.batchFailed\": \"N\\u00e3o foi poss\\u00edvel aplicar a confer\\u00eancia\",\n \"inventory.usageAudit.applyTitleOne\": \"Aplicar 1 correção\",\n \"inventory.usageAudit.batchReasonRequired\": \"Escreva por que, antes de aplicar — a observação é obrigatória.\",\n \"inventory.usageAudit.batchAppliedOne\": \"1 correção lançada no razão\",\n \"inventory.usageAudit.emptyDivergent\": \"Nenhum consumo fora do padrão\",\n \"inventory.recipes.edit\": \"Editar\",\n \"inventory.recipes.print\": \"Imprimir ficha técnica\",\n \"inventory.recipes.printNoSheet\": \"Sem ficha técnica para imprimir\",\n \"inventory.recipes.pickTitle\": \"Selecionar Produto\",\n \"inventory.recipes.pickHint\": \"Escolha o produto ao qual esta ficha técnica será associada.\",\n \"inventory.recipes.pickPlaceholder\": \"Buscar produto...\",\n \"inventory.recipes.pickContinue\": \"Continuar\",\n \"inventory.sheet.name\": \"Nome da Ficha Técnica\",\n \"inventory.sheet.namePlaceholder\": \"Ex: Picanha na Chapa\",\n \"inventory.sheet.nameRequired\": \"O nome da ficha técnica é obrigatório.\",\n \"inventory.sheet.yield\": \"Rendimento\",\n \"inventory.sheet.yieldUnit\": \"Unidade Rendimento\",\n \"inventory.sheet.none\": \"Nenhuma\",\n \"inventory.sheet.yieldMode\": \"Tipo de rendimento\",\n \"inventory.sheet.yieldMode.portion\": \"Porção (a ficha é 1 unidade vendida)\",\n \"inventory.sheet.yieldMode.batch\": \"Lote (a ficha produz o rendimento)\",\n \"inventory.sheet.yieldMode.portionHint\": \"O rendimento só descreve o que vai no prato («para 4 pessoas», «6 unidades», «400 g»). O custo do produto é a soma da ficha.\",\n \"inventory.sheet.yieldMode.batchHint\": \"A ficha produz o rendimento informado (ex.: 2,4 kg de molho). O custo do produto é a soma da ficha ÷ o rendimento, na unidade do produto.\",\n \"inventory.sheet.prepTime\": \"Tempo Preparo (min)\",\n \"inventory.sheet.description\": \"Descrição Geral\",\n \"inventory.sheet.descriptionPlaceholder\": \"Descrição geral da ficha técnica\",\n \"inventory.sheet.costPrice\": \"Preço de Custo\",\n \"inventory.sheet.per\": \"por\",\n \"inventory.sheet.batchCost\": \"Lote\",\n \"inventory.sheet.salePrice\": \"Preço de Venda\",\n \"inventory.sheet.cmv\": \"CMV\",\n \"inventory.sheet.components\": \"Componentes da Ficha Técnica (por estação)\",\n \"inventory.sheet.suggestAi\": \"Sugerir com IA\",\n \"inventory.sheet.addGroup\": \"Adicionar Grupo\",\n \"inventory.sheet.noComponents\": \"Nenhum componente adicionado. Clique em \\\"Adicionar Grupo\\\" ou use \\\"Sugerir com IA\\\".\",\n \"inventory.sheet.componentName\": \"Nome do Componente\",\n \"inventory.sheet.componentNamePlaceholder\": \"Ex: Porção de Iscas\",\n \"inventory.sheet.station\": \"Estação de Produção\",\n \"inventory.sheet.stationPlaceholder\": \"Selecione a estação\",\n \"inventory.sheet.noStations\": \"Nenhuma estação cadastrada\",\n \"inventory.sheet.estimatedMinutes\": \"Tempo estimado (min)\",\n \"inventory.sheet.estimatedMinutesPlaceholder\": \"Ex: 20\",\n \"inventory.sheet.componentMenu\": \"Mais ações do componente\",\n \"inventory.sheet.transform\": \"Transformar em produto intermediário\",\n \"inventory.sheet.deleteComponent\": \"Excluir componente\",\n \"inventory.sheet.transformNeedsLines\": \"Adicione ao menos um insumo neste componente.\",\n \"inventory.sheet.noLines\": \"Nenhum insumo. Clique em \\\"Adicionar Item\\\".\",\n \"inventory.sheet.ingredient\": \"Insumo\",\n \"inventory.sheet.quantity\": \"Quantidade\",\n \"inventory.sheet.notes\": \"Obs\",\n \"inventory.sheet.cost\": \"Custo\",\n \"inventory.sheet.unit\": \"Unidade\",\n \"inventory.sheet.searchIngredient\": \"Buscar insumo...\",\n \"inventory.sheet.createIngredient\": \"Criar insumo\",\n \"inventory.sheet.ingredientCreated\": \"Insumo \\\"{{name}}\\\" criado\",\n \"inventory.sheet.ingredientCreateFailed\": \"Não foi possível criar o insumo.\",\n \"inventory.sheet.aiHint\": \"Sugerido pela IA\",\n \"inventory.sheet.create\": \"Criar\",\n \"inventory.sheet.updateCost\": \"Atualizar custo\",\n \"inventory.sheet.updateCostCurrent\": \"Atualizar custo (atual: {{price}}{{unit}})\",\n \"inventory.sheet.setCost\": \"Definir preço de custo do insumo\",\n \"inventory.sheet.removeLine\": \"Remover insumo\",\n \"inventory.sheet.addLine\": \"Adicionar Item\",\n \"inventory.sheet.componentPrep\": \"Modo de Preparo deste Componente\",\n \"inventory.sheet.componentPrepPlaceholder\": \"Como preparar este componente na estação\",\n \"inventory.sheet.outputs\": \"Saídas da produção (opcional)\",\n \"inventory.sheet.outputsHint\": \"Quando esta ficha gera mais de um produto (ex.: filé + aparas + pele). Sem linhas aqui, a produção entrega apenas o produto principal com o rendimento da ficha. O custo da OP é dividido pelo % de cada saída; em branco, pelo valor de mercado (preço médio de compra × quantidade). Rejeito não leva custo.\",\n \"inventory.sheet.addOutput\": \"Adicionar saída\",\n \"inventory.sheet.product\": \"Produto\",\n \"inventory.sheet.outputType\": \"Tipo\",\n \"inventory.sheet.expectedQty\": \"Qtd esperada\",\n \"inventory.sheet.costShare\": \"% do custo\",\n \"inventory.sheet.auto\": \"auto\",\n \"inventory.sheet.removeOutput\": \"Remover saída\",\n \"inventory.sheet.outputType.main\": \"Principal\",\n \"inventory.sheet.outputType.coproduct\": \"Coproduto\",\n \"inventory.sheet.outputType.byproduct\": \"Subproduto\",\n \"inventory.sheet.outputType.waste\": \"Descarte\",\n \"inventory.sheet.outputShareTitle\": \"Confira o % do custo das saídas\",\n \"inventory.sheet.outputShareHint\": \"Preencha o % em todas as saídas aproveitáveis, somando 100% — ou deixe todas em branco para ratear pelo valor de mercado.\",\n \"inventory.sheet.instructions\": \"Modo de Preparo Geral / Montagem (opcional)\",\n \"inventory.sheet.instructionsPlaceholder\": \"Como montar e finalizar o prato após os componentes prontos...\",\n \"inventory.sheet.save\": \"Salvar Ficha Técnica\",\n \"inventory.sheet.saving\": \"Salvando...\",\n \"inventory.sheet.saved\": \"Ficha técnica salva\",\n \"inventory.sheet.saveFailed\": \"Não foi possível salvar.\",\n \"inventory.sheet.loadFailed\": \"Não foi possível carregar a ficha técnica.\",\n \"inventory.sheet.costDialogTitle\": \"Atualizar custo\",\n \"inventory.sheet.costDialogHint\": \"Defina manualmente ou peça uma sugestão à IA com base no mercado.\",\n \"inventory.sheet.costAppliesEverywhere\": \"O custo vale para todas as fichas que usam este insumo.\",\n \"inventory.sheet.costInvalid\": \"Informe um valor maior que zero.\",\n \"inventory.sheet.costUpdated\": \"{{name}} agora custa {{price}}\",\n \"inventory.sheet.aiNoPrice\": \"A IA não retornou um preço.\",\n \"inventory.sheet.aiFailed\": \"A IA não respondeu. Tente novamente.\",\n \"inventory.sheet.aiUnitMismatch\": \"A IA deu o preço por {{ai}}; este insumo é contado em {{unit}}. Confira antes de salvar.\",\n \"inventory.sheet.aiTitle\": \"Sugerir Ficha Técnica com IA\",\n \"inventory.sheet.aiPhotos\": \"Fotos do produto\",\n \"inventory.sheet.aiPhotosHint\": \"Quanto mais ângulos do prato, melhor a sugestão.\",\n \"inventory.sheet.aiProductName\": \"Nome do produto\",\n \"inventory.sheet.aiStations\": \"Estações disponíveis para a IA:\",\n \"inventory.sheet.aiNoStations\": \"Nenhuma estação cadastrada — cadastre estações para a IA agrupar corretamente.\",\n \"inventory.sheet.aiInstructions\": \"Instruções adicionais para a IA (opcional)\",\n \"inventory.sheet.aiInstructionsPlaceholder\": \"Ex.: Porção para 2 pessoas, sem glúten, usar manteiga clarificada, separar molho em estação fria...\",\n \"inventory.sheet.aiReplaces\": \"A sugestão substitui os componentes que estão na ficha. Nada é gravado até você salvar.\",\n \"inventory.sheet.aiGenerate\": \"Gerar sugestão\",\n \"inventory.sheet.aiGenerating\": \"Gerando...\",\n \"inventory.sheet.aiApplied\": \"Sugestão aplicada — confira e salve.\",\n \"inventory.sheet.uploadFailed\": \"Não foi possível enviar a imagem.\",\n \"inventory.sheet.addPhoto\": \"Adicionar foto\",\n \"inventory.sheet.removePhoto\": \"Remover foto\",\n \"inventory.sheet.transformHint\": \"Será criado um novo produto do tipo intermediário com esta ficha técnica (ingredientes e modo de preparo). O bloco atual será removido daqui — depois você pode adicionar este intermediário em qualquer etapa.\",\n \"inventory.sheet.transformName\": \"Nome do Produto Intermediário\",\n \"inventory.sheet.transformNamePlaceholder\": \"Ex: Arroz Branco Porção\",\n \"inventory.sheet.transformUnitPlaceholder\": \"Selecione (g, kg, ml, L, un...)\",\n \"inventory.sheet.transformNameRequired\": \"Informe o nome do produto intermediário.\",\n \"inventory.sheet.transformYieldRequired\": \"Informe o rendimento.\",\n \"inventory.sheet.transformUnitRequired\": \"Selecione a unidade de medida do rendimento.\",\n \"inventory.sheet.transformDuplicate\": \"Já existe um produto com este nome.\",\n \"inventory.sheet.transformCreate\": \"Criar Intermediário\",\n \"inventory.sheet.transformCreating\": \"Criando...\",\n \"inventory.sheet.transformDone\": \"\\\"{{name}}\\\" foi cadastrado. Agora você pode adicioná-lo como item em qualquer componente desta ficha técnica.\",\n \"inventory.sheet.transformFailed\": \"Falha ao transformar em intermediário.\",\n \"inventory.complements.tab\": \"Complementos\",\n \"inventory.complements.title\": \"Complementos e escolhas\",\n \"inventory.complements.hint\": \"Configure sabores, pontos de preparo e adicionais. Use R$ 0,00 quando a escolha não tiver acréscimo.\",\n \"inventory.complements.newGroup\": \"Novo grupo\",\n \"inventory.complements.empty\": \"Este produto ainda não possui complementos.\",\n \"inventory.complements.emptyHint\": \"Crie um grupo para começar, como “Ponto da carne” ou “Chantilly”.\",\n \"inventory.complements.groupName\": \"Nome do grupo\",\n \"inventory.complements.groupNamePlaceholder\": \"Ex: Ponto da carne\",\n \"inventory.complements.active\": \"Ativo\",\n \"inventory.complements.moveUp\": \"Mover grupo para cima\",\n \"inventory.complements.moveDown\": \"Mover grupo para baixo\",\n \"inventory.complements.deleteGroup\": \"Excluir grupo\",\n \"inventory.complements.required\": \"Escolha obrigatória\",\n \"inventory.complements.min\": \"Mínimo\",\n \"inventory.complements.max\": \"Máximo\",\n \"inventory.complements.option\": \"Opção\",\n \"inventory.complements.price\": \"Acréscimo\",\n \"inventory.complements.optionActive\": \"Ativa\",\n \"inventory.complements.optionPlaceholder\": \"Ex: Com chantilly\",\n \"inventory.complements.deleteOption\": \"Excluir opção\",\n \"inventory.complements.addOption\": \"Adicionar opção\",\n \"inventory.complements.save\": \"Salvar complementos\",\n \"inventory.complements.saved\": \"Complementos salvos\",\n \"inventory.complements.saveFailed\": \"Não foi possível salvar\",\n \"inventory.complements.review\": \"Revise os complementos\",\n \"inventory.complements.loadFailed\": \"Não foi possível carregar os complementos\",\n \"inventory.photoAi.title\": \"Gerar foto com IA\",\n \"inventory.photoAi.product\": \"Produto\",\n \"inventory.photoAi.category\": \"Categoria\",\n \"inventory.photoAi.usesSheet\": \"Os insumos da ficha técnica entram na descrição da foto.\",\n \"inventory.photoAi.references\": \"Imagens de referência (opcional)\",\n \"inventory.photoAi.useCurrent\": \"Usar foto atual do produto como referência\",\n \"inventory.photoAi.add\": \"Adicionar\",\n \"inventory.photoAi.instructionsPlaceholder\": \"Ex.: fundo de madeira, luz de fim de tarde, porção servida em prato branco...\",\n \"inventory.photoAi.generate\": \"Gerar foto\",\n \"inventory.photoAi.again\": \"Gerar outra\",\n \"inventory.photoAi.generating\": \"Gerando a foto…\",\n \"inventory.photoAi.apply\": \"Aplicar foto\",\n \"inventory.photoAi.applied\": \"Foto aplicada ao produto\",\n \"inventory.photoAi.failed\": \"Não foi possível gerar a foto\",\n \"inventory.sheet.quickTitle\": \"Novo insumo\",\n \"inventory.sheet.quickHint\": \"Cadastra o produto como Insumo e o coloca nesta linha.\",\n \"inventory.sheet.quickName\": \"Nome\",\n \"inventory.sheet.quickUnit\": \"Unidade de Estoque\",\n \"inventory.sheet.quickUnitHint\": \"Unidade base usada em ficha técnica, estoque e vendas (ex: un, ml, g).\",\n \"inventory.sheet.quickNameRequired\": \"Informe o nome do insumo.\",\n \"inventory.sheet.quickUnitRequired\": \"Escolha a unidade em que o insumo é contado.\",\n \"inventory.sheet.quickCreate\": \"Criar insumo\",\n \"inventory.recipes.pickEmpty\": \"Nenhum produto de venda ou intermediário encontrado.\",\n \"inventory.recipes.kind.sale\": \"Venda\",\n \"inventory.recipes.kind.intermediate\": \"Intermediário\",\n \"inventory.recipes.kind.produced\": \"Produzido\",\n \"inventory.recipes.kind.all\": \"Todos\",\n \"inventory.recipes.hasSheet\": \"Com ficha\",\n \"inventory.recipes.noSheetShort\": \"Sem ficha\",\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const inventoryLocales: Record<string, Record<string, string>> = {\n en,\n 'pt-BR': ptBR,\n}\n","import React from 'react'\nimport type { DetailTab, PluginManifest, PluginScope, VerticalId } from '@fayz-ai/core'\nimport { UNIT_DETAIL_ZONES } from '@fayz-ai/admin'\nimport { createInventoryDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedInventoryConfig } from './context'\nimport type { InventoryDataProvider } from '@fayz-ai/inventory/data/provider'\nimport type { StockMovement } from '@fayz-ai/inventory/domain/movement'\nimport { lazyComponent, registerTranslations } from '@fayz-ai/core'\nimport { PluginSettingsPanel } from '@fayz-ai/admin'\nimport { createInventoryDataProvider, createInventoryStore } from '@fayz-ai/inventory/store'\nimport { inventoryRegistries } from './data/registries'\nimport { inventorySetupGuides } from './lib/setup-guides'\nimport { buildInventoryOnboarding } from './lib/onboarding'\nimport { inventoryLocales } from './locales'\nimport { upsertRecipeTool } from './lib/agent-tools'\nimport { MIGRATIONS } from './migrations'\n\n// Code loads when it is first drawn, not with the app. Pages use React.lazy\n// (the shell's route boundary shows the page skeleton); anything that may\n// render elsewhere uses lazyComponent, which carries its own boundary.\nconst InventoryPage = React.lazy(() => import('./views/InventoryPage').then((m) => ({ default: m.InventoryPage })))\nconst UnitStockLocationsWidget = lazyComponent(() => import('./views/UnitStockLocationsWidget').then((m) => m.UnitStockLocationsWidget))\nconst InventoryGeneralSettings = lazyComponent(() => import('./components/InventoryGeneralSettings').then((m) => m.InventoryGeneralSettings))\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface InventoryPluginLabels {\n pageTitle: string\n pageSubtitle: string\n dashboard: string\n products: string\n productsNew: string\n productsList: string\n stock: string\n stockEntry: string\n stockExit: string\n stockHistory: string\n recipes: string\n recipesNew: string\n recipesList: string\n}\n\n/** Uma tela que outro plugin empresta ao Estoque. */\nexport interface InventoryExtraView {\n /** Vira o segmento da URL: `/inventory/<id>`. Em inglês, como toda rota do V2. */\n id: string\n label: string\n icon?: string\n render: () => React.ReactNode\n /**\n * Telas irmãs sob a mesma aba, como o V1 agrupa cinco sob «Notas Fiscais».\n * Sem isto, quatro telas de nota virariam quatro abas no Estoque e afogariam\n * Produtos e Movimentações.\n */\n children?: Array<{ id: string; label: string; render: () => React.ReactNode }>\n /**\n * O nome da PRÓPRIA tela quando ela entra como primeiro filho do grupo. Sem\n * isto o Estoque chamava toda tela emprestada de «Entrada», que era o nome de\n * uma delas — e o grupo de notas quis o nome do V1, «Manifesto de Notas».\n */\n defaultChildLabel?: string\n}\n\nexport interface InventoryNavShortcut {\n /** The inner view id; the entry routes to `/inventory/<view>`. */\n view: string\n label: string\n icon?: string\n /** Defaults to inventory read. A borrowed view (fiscal notes) passes its own. */\n permission?: { feature: string; action: 'read' }\n}\n\nexport interface InventoryPluginOptions {\n modules?: {\n recipes?: boolean\n stockLocations?: boolean\n batchTracking?: boolean\n /**\n * The product catalogue screens (list + form). Defaults on. Turn OFF when the\n * host already owns product registration elsewhere — an e-commerce app\n * manages products in the shop plugin, and two competing product CRUDs is\n * how the same product ends up entered twice, differently.\n * Stock entry/exit/history stay available either way.\n */\n products?: boolean\n }\n labels?: Partial<InventoryPluginLabels>\n productTypes?: Array<{ value: string; label: string }>\n currency?: { code?: string; locale?: string; symbol?: string }\n navPosition?: number\n navSection?: 'main' | 'secondary'\n /**\n * Telas que OUTRO plugin contribui para dentro do Estoque, como abas irmãs de\n * Produtos, Movimentações e Contagens.\n *\n * Existe porque «Entrada de Notas» é assunto de estoque e não assunto do rail:\n * no V1 o caminho é `Estoque → Notas Fiscais → Entrada de Notas`, e montá-la\n * como linha solta no menu quebra o mapa mental de quem vem do V1 — a pessoa\n * procura dentro do Estoque e não acha. Quem dá entrada de nota é o\n * `plugin-fiscal-br`, que não pode reivindicar uma aba do Estoque sem esta\n * porta.\n *\n * A ordem na faixa é a ordem deste array, depois das abas próprias.\n */\n extraViews?: InventoryExtraView[]\n /**\n * Inner views the app also wants as direct rail entries under Estoque\n * (e.g. `products-list`, `inbound-notes`). Opt-in: without it the module is\n * one rail row and every screen lives in its own tab strip.\n */\n navShortcuts?: InventoryNavShortcut[]\n /**\n * Tabs another plugin contributes to the product record — the shop's photos,\n * say. The catalog product is this plugin's; what else is known about it is\n * not, so the app composes it here instead of this plugin importing theirs.\n * Shown after the plugin's own tabs.\n */\n productDetailTabs?: DetailTab[]\n /**\n * O documento que originou um movimento de estoque — a nota de entrada, hoje —\n * desenhado dentro do modal que o Estoque abre. Ver `ResolvedInventoryConfig`.\n */\n documentModal?: (movement: StockMovement, close: () => void) => React.ReactNode\n scope?: PluginScope\n /**\n * Como o Estoque desenha a PRÓPRIA navegação (Produtos, Movimentações,\n * Contagens, Receitas).\n *\n * O padrão vem do shell, e num app cujo default é `sidebar` esse padrão diz\n * \"o rail lista as minhas sub-telas\" — promessa que ninguém cumpre por este\n * módulo: no rail ele é UMA linha, e o que tem dentro é tela irmã, não\n * assunto novo. O resultado era o Estoque abrindo sem faixa de abas nenhuma.\n *\n * Mesma porta que `crm`, `marketing` e `financial` já usam.\n */\n moduleNav?: 'rail' | 'tabs' | 'sidebar'\n verticalId?: VerticalId\n dataProvider?: InventoryDataProvider\n locations?: Array<{ id: string; name: string; isHQ?: boolean }>\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_LABELS: InventoryPluginLabels = {\n pageTitle: 'Inventory',\n pageSubtitle: 'Product catalog and stock management',\n dashboard: 'Dashboard',\n products: 'Products',\n productsNew: 'New',\n productsList: 'List',\n stock: 'Stock',\n stockEntry: 'Entry',\n stockExit: 'Exit',\n stockHistory: 'History',\n recipes: 'Recipes',\n recipesNew: 'New',\n recipesList: 'List',\n}\n\nconst DEFAULT_CURRENCY = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\nconst DEFAULT_PRODUCT_TYPES = [\n { value: 'ingredient', label: 'Ingredient', labelKey: 'inventory.productType.ingredient' },\n { value: 'sale', label: 'For Sale', labelKey: 'inventory.productType.sale' },\n { value: 'intermediate', label: 'Intermediate', labelKey: 'inventory.productType.intermediate' },\n { value: 'asset', label: 'Asset', labelKey: 'inventory.productType.asset' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: InventoryPluginOptions): ResolvedInventoryConfig {\n return {\n modules: {\n products: options?.modules?.products !== false,\n recipes: options?.modules?.recipes !== false,\n stockLocations: options?.modules?.stockLocations !== false,\n batchTracking: options?.modules?.batchTracking ?? false,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n productTypes: options?.productTypes ?? DEFAULT_PRODUCT_TYPES,\n locations: options?.locations ?? [],\n moduleNav: options?.moduleNav,\n extraViews: options?.extraViews ?? [],\n productDetailTabs: options?.productDetailTabs ?? [],\n documentModal: options?.documentModal,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createInventoryPlugin(options?: InventoryPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(inventoryLocales)\n const provider = options?.dataProvider ?? createInventoryDataProvider()\n const store = createInventoryStore(provider)\n const dashboardWidgets = createInventoryDashboardWidgets({ config, provider, store })\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(InventoryPage, { config, provider, store, registries: inventoryRegistries })\n\n return {\n id: 'inventory',\n // Como esta conta refaz o módulo com as opções DELA. Ver PluginRebuild:\n // a fábrica roda no carregamento do aplicativo, muito antes de a\n // configuração da conta existir, e sem isto `app.tenant_plugins.config`\n // não tinha como chegar aqui. A fusão é RASA e por bloco — a conta troca\n // `modules` inteiro ou não o troca —, que é o mesmo contrato que a chamada\n // do aplicativo já tem.\n rebuild: (tenantConfig) =>\n createInventoryPlugin({ ...options, ...(tenantConfig as InventoryPluginOptions) }),\n defaultAgentRole: 'operations',\n name: config.labels.pageTitle,\n icon: 'Package',\n version: '1.0.0',\n scope: options?.scope ?? 'universal',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n // The parts a plan can permit separately (#281, ADR 0025). Counting what\n // you have is the plugin; costing it and forecasting it are what a growing\n // operation pays for.\n facets: [\n { id: 'stock', label: 'Estoque', description: 'Saldo, movimentos e contagem.', includedWithPlugin: true },\n { id: 'costing', label: 'Custo médio e margem', description: 'Custo móvel por lote e a margem que sai dele.' },\n { id: 'purchasing', label: 'Compras e reposição', description: 'Ponto de pedido, sugestão de compra e recebimento.' },\n ],\n dependencies: [],\n // Business effects cross plugin boundaries through the durable event log.\n // Completion consumes the active recipe (or the sold product itself).\n // Cancelled sales never complete, so the app never coordinates a stock effect.\n subscribesTo: [\n {\n event: 'order.completed',\n handler: 'plg_inventory_on_order_completed',\n description: 'A completed Venda consumes its active recipe or the sold product, except the lines a delivery already covered',\n maxAttempts: 5,\n },\n {\n // The delivery is the movement wherever a delivery exists (PRD 05): the\n // quantity comes from the DELIVERY line, so an order of two that\n // delivers one moves the balance by one.\n event: 'fulfillment.completed',\n handler: 'plg_inventory_on_fulfillment_completed',\n description: 'A completed delivery takes its own quantity out of the balance',\n maxAttempts: 5,\n },\n ],\n // The plugin owns ALL of its SQL and says so: what installing it provisions\n // is this list, byte-for-byte the files under src/migrations (embed barrel).\n // Loose SQL was the standing contract violation (DECISIONS 2026-07-06).\n migrations: MIGRATIONS.map((m) => ({\n id: `inventory-${m.id}`,\n version: '1.0.0',\n sql: m.sql,\n description: m.id,\n })),\n declaredFeatures: [\n { id: 'inventory', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.recipes ? [{ id: 'inventory.recipes', label: config.labels.recipes ?? 'Recipes', group: config.labels.pageTitle }] : []),\n ],\n queryEntities: [\n {\n key: 'inventory:products',\n writable: true,\n entity: {\n name: 'Product',\n namePlural: 'Products',\n icon: 'Package',\n limitKey: 'products',\n permission: { feature: 'inventory', action: 'read' },\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, searchable: true },\n { key: 'kind', label: 'Kind (sale/ingredient/asset)', type: 'text' },\n { key: 'price', label: 'Price', type: 'number' },\n { key: 'cost', label: 'Cost', type: 'number' },\n { key: 'sku', label: 'SKU', type: 'text', searchable: true },\n { key: 'isActive', label: 'Active', type: 'boolean' },\n { key: 'createdAt', label: 'Created at', type: 'text' },\n ],\n data: {\n table: 'products',\n tenantScoped: true,\n archetype: 'product',\n archetypeKind: 'sale',\n searchColumns: ['name', 'sku'],\n defaults: { kind: 'sale', status: 'active', is_active: true },\n },\n },\n },\n ],\n declaredLimits: [\n { key: 'products', label: 'Products', table: 'products' },\n ...(config.modules.recipes ? [{ key: 'recipes', label: config.labels.recipes ?? 'Recipes', table: 'plg_inventory_recipes' }] : []),\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 4,\n label: config.labels.pageTitle,\n route: '/inventory',\n icon: 'Package',\n permission: { feature: 'inventory', action: 'read' as const },\n },\n // The shell nests these under `/inventory` by route prefix, and only when\n // the parent sorts first — a lower position would leave them top-level.\n ...(options?.navShortcuts ?? []).map((shortcut, i) => ({\n section: options?.navSection ?? 'main',\n position: (options?.navPosition ?? 4) + (i + 1) / 100,\n label: shortcut.label,\n route: `/inventory/${shortcut.view}`,\n icon: shortcut.icon,\n permission: shortcut.permission ?? { feature: 'inventory', action: 'read' as const },\n })),\n ],\n routes: [\n {\n path: '/inventory',\n component: PageComponent,\n permission: { feature: 'inventory', action: 'read' as const },\n // Products live on this hand-built page, not a CRUD route, so nothing\n // would register them and a product the assistant just created would\n // resolve to no page at all.\n entityRoutes: ['product:sale', 'product'],\n },\n ],\n widgets: [\n {\n id: 'inventory-unit-stock-locations',\n zone: UNIT_DETAIL_ZONES.stockLocations,\n component: UnitStockLocationsWidget as unknown as React.ComponentType<unknown>,\n order: 0,\n },\n ],\n dashboardWidgets,\n aiTools: [\n {\n id: 'inventory.low-stock',\n name: 'getLowStock',\n description: 'Lists products with stock below minimum threshold.',\n icon: 'AlertTriangle',\n mode: 'read' as const,\n category: 'Inventory',\n parameters: {\n type: 'object' as const,\n properties: {\n threshold: { type: 'number' as const, description: 'Custom stock threshold' },\n },\n },\n suggestions: [\n { label: 'Quais produtos estão com estoque baixo?' },\n { label: 'Quais insumos precisam de reposição?', verticalId: 'food' as const },\n { label: 'Mostre um resumo do estoque' },\n { label: 'Quais são os produtos mais usados?' },\n ],\n permission: { feature: 'inventory', action: 'read' as const },\n },\n // `role: 'finance'` is on the tool itself — the plugin defaults to\n // 'operations' and cost per dish belongs to the finance colleague.\n ...(config.modules.recipes ? [upsertRecipeTool] : []),\n ],\n declaredRpcs: [\n ...(config.modules.recipes ? [{\n name: 'agent_inventory_upsert_recipe',\n kind: 'write' as const,\n description:\n 'Guarded recipe upsert: agent_guard (role→plan→recipes cap), ingredient names resolved to products.id inside SQL, unmatched ones returned and stored for the screen to recover, audited.',\n audits: true,\n }] : []),\n ],\n registries: inventoryRegistries,\n settings: [\n {\n id: 'inventory',\n label: 'Inventory',\n icon: 'Package',\n // PluginSettingsPanel, not the toggles component directly. Declaring\n // `registries` does nothing for settings on its own — the panel is the\n // only thing that turns them into screens, which is why Stock Locations,\n // Categories, Units and Suppliers all existed in code and appeared\n // nowhere. financial and crm already render through it.\n component: (() => {\n const Tab: React.FC = () => React.createElement(PluginSettingsPanel, {\n title: config.labels.pageTitle,\n generalSettings: React.createElement(InventoryGeneralSettings, { config }),\n registries: inventoryRegistries,\n hostPluginId: 'inventory',\n routeBase: '/settings/inventory',\n })\n Tab.displayName = 'InventorySettingsTab'\n return Tab\n })() as unknown as React.ComponentType<unknown>,\n order: 11,\n permission: { feature: 'inventory', action: 'read' as const },\n },\n ],\n // Como cada tela do Estoque entra em pé — lido pelo assistente.\n onboarding: { program: buildInventoryOnboarding() },\n setupGuides: inventorySetupGuides,\n locales: inventoryLocales,\n }\n}\n\nexport { createInventoryDataProvider }\nexport type { InventoryDataProvider } from '@fayz-ai/inventory/data/provider'\nexport type { ResolvedInventoryConfig } from './context'\n\nexport {\n MOVEMENT_TYPES,\n MOVEMENT_TYPE_VALUES,\n LEGACY_PT_MOVEMENT_TYPE,\n movementTypeSpec,\n normalizeMovementType,\n} from '@fayz-ai/inventory/domain/movement'\nexport type { MovementType, MovementTypeSpec } from '@fayz-ai/inventory/domain/movement'\nexport type {\n ConsumeRecipeForSourceInput,\n ReverseRecipeConsumptionInput,\n InventoryConsumptionResult,\n InventoryConsumptionStatus,\n InventoryConsumptionSkipReason,\n} from '@fayz-ai/inventory/domain/consumption'\n"]}
1
+ {"version":3,"sources":["../src/views/dashboardWidgets.tsx","../src/data/registries.ts","../src/lib/setup-guides.ts","../src/lib/onboarding.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/index.ts"],"names":["T","React"],"mappings":"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","file":"index.js","sourcesContent":["import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle, PackageX } from 'lucide-react'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n KpiCard, Card, CardHeader, CardTitle, CardContent, Badge, Skeleton,\n defineKpiWidget, defineCustomWidget,\n} from '@fayz-ai/ui'\nimport { InventoryContextProvider, useInventoryConfig, useInventoryStore, formatCurrency, type ResolvedInventoryConfig } from '../context'\nimport type { InventoryDataProvider } from '@fayz-ai/inventory/data/provider'\nimport type { InventoryUIState } from '@fayz-ai/inventory/store'\nimport { noProductHasMinimum } from '@fayz-ai/inventory/domain/stock'\n\nfunction useEnsureSummary() {\n const fetchSummary = useInventoryStore((s) => s.fetchSummary)\n useEffect(() => { void fetchSummary() }, [])\n}\n\nfunction StockValueKpi() {\n const t = useTranslation()\n const { currency } = useInventoryConfig()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return (\n <KpiCard label={t('inventory.dashboard.stockValue')} icon=\"BarChart3\"\n value={formatCurrency(summary?.totalStockValue ?? 0, currency)} sub={t('inventory.dashboard.totalValue')} />\n )\n}\n\nfunction TotalProductsKpi() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('inventory.dashboard.totalProducts')} icon=\"Package\" value={String(summary?.totalProducts ?? 0)} sub={t('inventory.dashboard.activeItems')} />\n}\n\nfunction LowStockKpi() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('inventory.dashboard.lowStock')} icon=\"AlertTriangle\" value={String(summary?.lowStockCount ?? 0)} sub={t('inventory.dashboard.belowMinimum')} />\n}\n\nfunction OutOfStockKpi() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('inventory.dashboard.outOfStock')} icon=\"TrendingDown\" value={String(summary?.outOfStockCount ?? 0)} sub={t('inventory.dashboard.needRestocking')} />\n}\n\nfunction RecentActivityPanel() {\n const t = useTranslation()\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n return (\n <Card>\n <CardHeader><CardTitle>{t('inventory.dashboard.recentActivity')}</CardTitle></CardHeader>\n <CardContent>\n <div className=\"flex items-center gap-4 text-sm\">\n <div className=\"flex items-center gap-1.5\">\n <ArrowUpRight className=\"h-3.5 w-3.5 text-success\" />\n <span className=\"text-muted-foreground\">{t('inventory.dashboard.entries')}</span>\n <span className=\"font-medium\">{summary?.movementsByType?.entry ?? 0}</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <ArrowDownRight className=\"h-3.5 w-3.5 text-destructive\" />\n <span className=\"text-muted-foreground\">{t('inventory.dashboard.exits')}</span>\n <span className=\"font-medium\">{summary?.movementsByType?.exit ?? 0}</span>\n </div>\n </div>\n <p className=\"mt-2 text-xs text-muted-foreground\">{t('inventory.dashboard.last7Days')}</p>\n </CardContent>\n </Card>\n )\n}\n\n/**\n * O número que explica os outros.\n *\n * Com o depósito vazio e nenhum mínimo cadastrado, \"Estoque Baixo\" marca ZERO —\n * e o cartão mais importante do painel vira o mais enganoso. Este conta quantos\n * produtos ainda não têm de que estar abaixo. O V1 resolve o mesmo caso ao\n * contrário: trata mínimo 0 como alerta, 93% do catálogo entra na reposição\n * urgente e ninguém olha mais a lista.\n */\nfunction NoMinimumKpi() {\n const summary = useInventoryStore((s) => s.summary)\n useEnsureSummary()\n const n = summary?.noMinimumCount ?? 0\n return (\n <KpiCard\n label=\"Sem mínimo definido\"\n icon=\"AlertTriangle\"\n value={String(n)}\n sub={n > 0 ? 'Não entram no alerta de estoque baixo' : 'Todo produto tem mínimo'}\n />\n )\n}\n\nfunction RestockRowSkeleton() {\n return (\n <ul className=\"space-y-2\">\n {[0, 1, 2].map((i) => (\n <li key={i} className=\"flex items-center gap-3\">\n <Skeleton className=\"h-4 w-40\" />\n <span className=\"flex-1\" />\n <Skeleton className=\"h-4 w-16\" />\n </li>\n ))}\n </ul>\n )\n}\n\n/** Quantidade com a unidade de medida junto — o número sozinho não informa. */\nfunction qty(value: number, unit?: string): string {\n const n = value.toLocaleString('pt-BR', { maximumFractionDigits: 3 })\n return unit ? `${n} ${unit}` : n\n}\n\n/**\n * O que precisa de compra, com o MOTIVO em cada linha.\n *\n * \"Abaixo do mínimo\" vem antes de \"sem estoque\": o abaixo do mínimo é uma\n * compra que a casa já decidiu que precisa fazer; o zerado pode ser um cadastro\n * que nunca entrou em uso — e aqui são 162 de 169, o que seria uma lista de\n * alarme falso do tamanho do catálogo.\n */\nfunction RestockPanel() {\n const rows = useInventoryStore((s) => s.restock)\n const summary = useInventoryStore((s) => s.summary)\n const fetchRestock = useInventoryStore((s) => s.fetchRestock)\n useEnsureSummary()\n useEffect(() => { void fetchRestock() }, [])\n\n const belowMinimum = (rows ?? []).filter((r) => r.reason === 'below-minimum')\n const outOfStock = (rows ?? []).filter((r) => r.reason === 'out-of-stock')\n const nobodyHasMinimum = noProductHasMinimum(summary)\n\n return (\n <Card>\n <CardHeader><CardTitle>Precisa de reposição</CardTitle></CardHeader>\n <CardContent>\n {rows === null ? (\n <RestockRowSkeleton />\n ) : nobodyHasMinimum ? (\n // Sem nenhum mínimo cadastrado esta lista não é um alerta: é o\n // catálogo inteiro. Dizer o que falta vale mais do que listá-lo.\n <div className=\"text-sm\">\n <p className=\"font-medium\">Nenhum produto tem estoque mínimo definido.</p>\n <p className=\"mt-1 text-muted-foreground\">\n Sem o mínimo na ficha do produto não há reposição a calcular — o alerta\n de estoque baixo fica em zero mesmo com o depósito vazio.\n {/* O número vem do RESUMO, não do tamanho da lista: a lista é\n cortada em 50 e escrever o corte como se fosse o total é\n mentir com precisão — aqui daria \"50\" onde são 162. */}\n {(summary?.outOfStockCount ?? 0) > 0 && ` Hoje ${summary!.outOfStockCount === 1 ? 'há 1 produto' : `há ${summary!.outOfStockCount} produtos`} com saldo zerado.`}\n </p>\n </div>\n ) : rows.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n Nada a repor: todo produto está acima do mínimo.\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {[...belowMinimum, ...outOfStock].slice(0, 8).map((row) => (\n <li key={row.productId} className=\"flex items-center gap-3 text-sm\">\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{row.name}</span>\n {row.categoryName && (\n <span className=\"block truncate text-xs text-muted-foreground\">{row.categoryName}</span>\n )}\n </span>\n {row.reason === 'below-minimum' ? (\n <Badge variant=\"secondary\" className=\"gap-1 shrink-0\">\n <AlertTriangle className=\"h-3 w-3\" aria-hidden=\"true\" />\n {qty(row.currentQuantity, row.unit)} de {qty(row.minQuantity, row.unit)}\n </Badge>\n ) : (\n <Badge variant=\"outline\" className=\"gap-1 shrink-0\">\n <PackageX className=\"h-3 w-3\" aria-hidden=\"true\" />\n Sem estoque\n </Badge>\n )}\n </li>\n ))}\n </ul>\n )}\n </CardContent>\n </Card>\n )\n}\n\n/**\n * A divisão do catálogo — barras ordenadas, UM matiz, com ênfase.\n *\n * Não é rosca: oito classes que todas significam alguma coisa passam do que uma\n * pizza consegue separar, e a fatia dominante aqui é \"Sem categoria\", que não é\n * uma categoria — é um cadastro por fazer. Em rosca ela vira só a maior fatia;\n * em barras com ênfase ela diz o que custa. A cor não carrega identidade\n * (série única, sem legenda): o rótulo carrega, e o texto usa tinta de texto.\n */\nfunction CategoryMixPanel() {\n const mix = useInventoryStore((s) => s.categoryMix)\n const fetchMix = useInventoryStore((s) => s.fetchCategoryMix)\n useEffect(() => { void fetchMix() }, [])\n\n const total = (mix ?? []).reduce((sum, c) => sum + c.count, 0)\n const uncategorized = (mix ?? []).find((c) => c.categoryId === null)\n\n return (\n <Card>\n <CardHeader><CardTitle>Produtos por categoria</CardTitle></CardHeader>\n <CardContent>\n {mix === null ? (\n <RestockRowSkeleton />\n ) : total === 0 ? (\n <p className=\"text-sm text-muted-foreground\">Nenhum produto ativo para distribuir.</p>\n ) : (\n <>\n <ul className=\"space-y-2\">\n {mix.slice(0, 8).map((row) => {\n const pct = Math.round((row.count / total) * 100)\n const isGap = row.categoryId === null\n return (\n <li key={row.categoryId ?? 'none'} className=\"flex items-center gap-3 text-sm\">\n <span className=\"w-40 shrink-0 truncate\" title={row.name}>{row.name}</span>\n <span\n className=\"relative h-2 flex-1 overflow-hidden rounded-full bg-muted\"\n aria-hidden=\"true\"\n >\n <span\n className={isGap ? 'absolute inset-y-0 left-0 rounded-full bg-muted-foreground/60' : 'absolute inset-y-0 left-0 rounded-full bg-primary'}\n style={{ width: `${pct}%` }}\n />\n </span>\n {/* Rótulo direto em todas as linhas: são oito, e ler um\n eixo para oito valores é trabalho que a tela pode poupar. */}\n <span className=\"w-20 shrink-0 text-right tabular-nums text-muted-foreground\">\n {row.count} · {pct}%\n </span>\n </li>\n )\n })}\n </ul>\n {uncategorized && uncategorized.count > 0 && (\n <p className=\"mt-3 text-xs text-muted-foreground\">\n {uncategorized.count} de {total} produtos ainda não têm categoria — é o\n que impede este painel, os filtros e as isenções de taxa de dizerem\n algo útil.\n </p>\n )}\n </>\n )}\n </CardContent>\n </Card>\n )\n}\n\nexport function createInventoryDashboardWidgets(ctx: {\n config: ResolvedInventoryConfig\n provider: InventoryDataProvider\n store: StoreApi<InventoryUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <InventoryContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </InventoryContextProvider>\n )\n Wrapped.displayName = `InventoryWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Stock value is inventory's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the inventory plugin-home, addable via Customize).\n defineKpiWidget({ id: 'inventory.kpi.stock-value', title: 'inventory.dashboard.stockValue', domain: 'inventory', defaultOrder: 0, component: withCtx(StockValueKpi) }),\n defineKpiWidget({ id: 'inventory.kpi.total-products', title: 'inventory.dashboard.totalProducts', domain: 'inventory', defaultOrder: 1, defaultVisible: false, component: withCtx(TotalProductsKpi) }),\n defineKpiWidget({ id: 'inventory.kpi.low-stock', title: 'inventory.dashboard.lowStock', domain: 'inventory', defaultOrder: 2, defaultVisible: false, component: withCtx(LowStockKpi) }),\n defineKpiWidget({ id: 'inventory.kpi.out-of-stock', title: 'inventory.dashboard.outOfStock', domain: 'inventory', defaultOrder: 3, defaultVisible: false, component: withCtx(OutOfStockKpi) }),\n // Escondido na home global (é diagnóstico de cadastro, não manchete do\n // negócio) e visível no painel do estoque, que é onde se conserta.\n defineKpiWidget({ id: 'inventory.kpi.no-minimum', title: 'Sem mínimo definido', domain: 'inventory', defaultOrder: 4, defaultVisible: false, component: withCtx(NoMinimumKpi) }),\n defineCustomWidget({ id: 'inventory.panel.recent-activity', title: 'inventory.dashboard.recentActivity', domain: 'inventory', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(RecentActivityPanel) }),\n defineCustomWidget({ id: 'inventory.panel.restock', title: 'Precisa de reposição', domain: 'inventory', span: 2, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(RestockPanel) }),\n defineCustomWidget({ id: 'inventory.panel.category-mix', title: 'Produtos por categoria', domain: 'inventory', span: 2, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(CategoryMixPanel) }),\n ]\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { RECORD_GROUP, recordRailFields, activeFacet } from '@fayz-ai/core'\nimport { PRODUCT_CATEGORY_KIND, T } from '@fayz-ai/inventory/data/tables'\n\nconst supplierEntity: EntityDef = {\n name: 'Supplier',\n namePlural: 'Suppliers',\n icon: 'Building2',\n layout: 'person',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, searchable: true },\n { key: 'phone', label: 'Phone', type: 'phone', showInTable: true },\n { key: 'email', label: 'Email', type: 'email', showInTable: true },\n { key: 'documentNumber', label: 'Tax ID', type: 'text', showInTable: true },\n // No address field: a supplier has as many as the operation needs (the\n // office that invoices, the warehouse the goods leave from). `layout:\n // 'person'` gives the record an \"Addresses\" tab backed by public.addresses,\n // which is the same relation clients and patients already use.\n // Declares the supplier as someone the house pays, which is what keeps\n // the \"Bank accounts\" section on the record.\n { key: 'payeeAccount', label: 'Bank account', type: 'bank', showInTable: false, showInDetail: false },\n { key: 'notes', label: 'Notes', type: 'textarea' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: {\n table: 'people',\n tenantScoped: true,\n filters: { kind: 'supplier' },\n defaults: { kind: 'supplier' },\n },\n}\n\nconst measurementUnitEntity: EntityDef = {\n name: 'Measurement Unit',\n namePlural: 'Measurement Units',\n icon: 'Ruler',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'abbreviation', label: 'Abbreviation', type: 'text', required: true, showInTable: true, group: 'identity' },\n ...recordRailFields({ tagsTable: T.measurementUnits, activeLabel: 'Ativo', unit: false }),\n ],\n data: { table: T.measurementUnits, tenantScoped: true },\n}\n\nconst productCategoryEntity: EntityDef = {\n name: 'Product Category',\n namePlural: 'Product Categories',\n // O botao de criar interpola o SUBSTANTIVO, e `name` e um literal ingles:\n // sem estas chaves o CrudListView omite o nome e escreve so «Adicionar»,\n // enquanto a lista ao lado escreve «Novo Produto». Ver EntityDef.nameKey.\n nameKey: 'inventory.entity.productCategory',\n namePluralKey: 'inventory.entity.productCategory.plural',\n icon: 'Tag',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'parentId', label: 'Parent', type: 'text', showInTable: false, group: 'identity' },\n ...recordRailFields({ tagsTable: T.productCategories, activeLabel: 'Ativo', unit: false }),\n ],\n data: {\n table: T.productCategories,\n schema: 'public',\n tenantScoped: true,\n filters: { kind: PRODUCT_CATEGORY_KIND },\n defaults: { kind: PRODUCT_CATEGORY_KIND },\n },\n}\n\n// Em português porque a tela é: as vizinhas desta lista («Ativo», «Unidade»,\n// «Identificação») já estavam traduzidas, e duas colunas em inglês no meio\n// delas leem como campo de outro sistema.\nconst stockLocationEntity: EntityDef = {\n name: 'Local de Estoque',\n namePlural: 'Locais de Estoque',\n nameKey: 'inventory.entity.stockLocation',\n namePluralKey: 'inventory.entity.stockLocation.plural',\n icon: 'Warehouse',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Nome', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'description', label: 'Descrição', type: 'textarea', showInTable: true, group: 'identity' },\n ...recordRailFields({ tagsTable: T.stockLocations, activeLabel: 'Ativo', unit: true }),\n ],\n data: { table: T.stockLocations, tenantScoped: true },\n}\n\nexport const inventoryRegistries: PluginRegistryDef[] = [\n // --- Editable ---\n {\n id: 'suppliers',\n entity: supplierEntity,\n icon: 'Building2',\n description: 'Manage your product and material suppliers',\n display: 'table',\n },\n {\n id: 'product-categories',\n entity: productCategoryEntity,\n icon: 'Tag',\n description: 'Product categories for organization',\n display: 'table',\n },\n {\n id: 'stock-locations',\n entity: stockLocationEntity,\n icon: 'Warehouse',\n description: 'Onde a mercadoria fica guardada',\n display: 'table',\n },\n // --- Seeded defaults, still editable by the tenant ---\n {\n id: 'measurement-units',\n entity: measurementUnitEntity,\n icon: 'Ruler',\n description: 'Standard units of measure',\n display: 'table',\n seedData: [\n { id: 'mu-unit', name: 'Unit', abbreviation: 'un', isActive: true },\n { id: 'mu-box', name: 'Box', abbreviation: 'box', isActive: true },\n { id: 'mu-kg', name: 'Kilogram', abbreviation: 'kg', isActive: true },\n { id: 'mu-g', name: 'Gram', abbreviation: 'g', isActive: true },\n { id: 'mu-l', name: 'Liter', abbreviation: 'L', isActive: true },\n { id: 'mu-ml', name: 'Milliliter', abbreviation: 'mL', isActive: true },\n ],\n },\n]\n","import type { SetupGuideDef } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Como o Estoque entra em pé.\n//\n// A ordem aqui não é preferência, é dependência dura: unidade de medida →\n// local → produto → saldo. Quem cadastra o produto antes de ter local e\n// unidade acaba com um catálogo bonito e saldo nenhum, e a conclusão errada\n// (\"o estoque não funciona\") é sempre a mesma.\n//\n// A outra coisa que estes guias existem para dizer: o estoque deste produto é\n// um RAZÃO append-only. Nada se apaga; corrigir é lançar a diferença. É a\n// regra que mais surpreende quem vem de planilha.\n// ---------------------------------------------------------------------------\n\nconst SETTINGS = '/settings/inventory'\n\nconst foundations: SetupGuideDef = {\n feature: 'inventory.cadastros-base',\n title: 'Cadastros do Estoque',\n about:\n 'As quatro listas de trás — unidades de medida, locais, categorias e fornecedores — sem as quais o cadastro de produto não tem o que escolher.',\n route: `${SETTINGS}/stock-locations`,\n step: 'inventory.foundations',\n requires: [],\n steps: [\n {\n do: 'Configurações › Estoque › Unidades de medida: confira o que já vem (un, cx, kg, g, L, mL) e acrescente o que a casa usa.',\n route: `${SETTINGS}/measurement-units`,\n },\n {\n do: 'Locais de estoque: cadastre onde as coisas ficam de verdade — \"Sala 2\", \"Depósito\", \"Bancada\".',\n why: 'Saldo é sempre de um produto NUM local. Sem local não existe saldo.',\n route: `${SETTINGS}/stock-locations`,\n },\n { do: 'Categorias: poucas e grandes. Elas são para achar, não para classificar contabilmente.', route: `${SETTINGS}/product-categories` },\n { do: 'Fornecedores: só os que você compra de verdade.', route: `${SETTINGS}/suppliers` },\n ],\n rules: [\n 'Local de estoque não é unidade da rede. Uma unidade pode ter vários locais; um local pertence a uma unidade.',\n ],\n pitfalls: [\n 'Pular os locais e cadastrar produto: o produto existe, o saldo não tem onde morar, e a tela parece quebrada.',\n ],\n answers: [\n 'Por onde eu começo no estoque?',\n 'Onde cadastro os lugares onde guardo as coisas?',\n 'Como crio uma unidade de medida?',\n ],\n next: ['inventory.produtos'],\n}\n\nconst products: SetupGuideDef = {\n feature: 'inventory.produtos',\n title: 'Produtos',\n about:\n 'O catálogo do que a casa guarda, vende e consome. Um produto diz em que unidade ele é contado e quanto custa — e é isso que faz o resto do estoque ter sentido.',\n route: '/inventory/products/list',\n step: 'inventory.catalog',\n requires: [\n {\n title: 'Unidades de medida e categorias',\n feature: 'inventory.cadastros-base',\n route: `${SETTINGS}/measurement-units`,\n check: 'o formulário de produto oferece unidade e categoria para escolher',\n },\n {\n title: 'Locais de estoque',\n feature: 'inventory.cadastros-base',\n route: `${SETTINGS}/stock-locations`,\n check: 'existe pelo menos um local — é onde o saldo vai morar',\n },\n ],\n // O tour navega até o cadastro de produto; os passos sem âncora ficam de\n // briefing (a tela é um CRUD genérico, sem campos ancoráveis por enquanto).\n steps: [\n { do: 'O Estoque mora aqui.', anchor: 'nav./inventory', route: '/inventory' },\n { do: 'Produtos ficam neste menu.', anchor: 'modnav.products', route: '/inventory/products/list' },\n { do: 'Cadastre um produto novo aqui.', anchor: 'action.new-product', route: '/inventory/products/list' },\n {\n do: 'Escolha a unidade em que você CONTA o produto, não a que o fornecedor vende.',\n why: 'Se você conta ampolas e ele vende caixa, o produto é em ampola — a conversão é problema da entrada.',\n },\n { do: 'Defina o estoque mínimo do que não pode faltar; é o que gera aviso.' },\n { do: 'Depois de salvar, dê a entrada inicial para o produto passar a ter saldo.', route: '/inventory/stock/entry' },\n ],\n rules: [\n 'Cadastrar produto NÃO cria saldo. Saldo só nasce de um movimento de entrada.',\n 'Trocar a unidade de medida de um produto que já tem movimento reinterpreta o histórico inteiro. Crie outro produto em vez disso.',\n ],\n answers: [\n 'Como cadastro meus produtos?',\n 'Cadastrei o produto e o estoque está zerado',\n 'Como configuro o estoque mínimo?',\n ],\n next: ['inventory.movimentacoes'],\n}\n\nconst movements: SetupGuideDef = {\n feature: 'inventory.movimentacoes',\n title: 'Entradas e Saídas',\n about:\n 'Tudo que entra e sai, com data, quem fez e por quê. É o razão do estoque: o saldo de hoje é a soma disto, não um número que alguém digita.',\n route: '/inventory/stock/entry',\n requires: [\n {\n title: 'Produtos cadastrados',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'dá para escolher um produto no movimento',\n },\n {\n title: 'Local de estoque',\n feature: 'inventory.cadastros-base',\n route: `${SETTINGS}/stock-locations`,\n check: 'o movimento pede um local e existe opção',\n },\n ],\n // Navega até a tela de entrada; a `practice` deixa a pessoa dar a entrada.\n steps: [\n { do: 'O Estoque mora aqui.', anchor: 'nav./inventory', route: '/inventory' },\n { do: 'Abra Entrada neste menu para lançar a compra que chegou.', anchor: 'modnav.stock-entry', route: '/inventory/stock/entry' },\n { do: 'Saída é para o que foi descartado, perdido ou usado fora de um atendimento.' },\n { do: 'O histórico mostra tudo, inclusive o que o sistema lançou sozinho.' },\n ],\n practice: [\n { anchor: 'inventory.entry-product', label: 'Escolha o produto que chegou' },\n { anchor: 'inventory.entry-save', label: 'Confirme a entrada', final: true },\n ],\n rules: [\n 'O razão é append-only: nada é apagado. Corrigir é lançar o movimento contrário — e o histórico guarda os dois.',\n 'Venda concluída baixa estoque sozinha. O que aparecer no histórico sem ninguém ter lançado veio daí.',\n ],\n pitfalls: [\n 'Ajustar saldo \"editando o produto\". Não existe: saldo só muda por movimento.',\n ],\n answers: [\n 'Como dou entrada numa compra?',\n 'Como corrijo um lançamento errado?',\n 'De onde vieram essas saídas que eu não lancei?',\n ],\n next: ['inventory.contagem', 'inventory.auditoria-de-uso'],\n}\n\nconst usageAudit: SetupGuideDef = {\n feature: 'inventory.auditoria-de-uso',\n title: 'Auditoria de Uso',\n about:\n 'O que os atendimentos consumiram de verdade, lado a lado com o que era o padrão. Serve para achar o consumo que fugiu — e para corrigir a quantidade lançada errada.',\n route: '/inventory/stock/usage/audit',\n requires: [\n {\n title: 'Atendimentos concluídos que consumiram material',\n check: 'a lista traz linhas; vazia quer dizer que nada foi consumido no período, não que a tela esteja quebrada',\n },\n {\n title: 'Produtos com custo preenchido',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'a coluna de custo mostra valor',\n required: false,\n },\n ],\n steps: [\n { do: 'Estoque › Auditoria de uso e escolha o período.', route: '/inventory/stock/usage/audit' },\n { do: 'Compare o consumido com o padrão do serviço; olhe o que está fora da curva.' },\n { do: 'Corrija a linha quando a quantidade tiver sido lançada errada.' },\n ],\n rules: [\n 'Aqui é DEPOIS da baixa, não antes: o atendimento já consumiu. A pergunta é \"foi isso mesmo?\", e a ação é Corrigir.',\n 'Corrigir LANÇA a diferença no razão — não reescreve o movimento antigo.',\n ],\n answers: [\n 'O consumo do salão está alto, onde vejo?',\n 'A quantidade foi lançada errada, dá para arrumar?',\n 'Isto aprova a baixa de estoque?',\n ],\n}\n\nconst counts: SetupGuideDef = {\n feature: 'inventory.contagem',\n title: 'Contagem de Estoque',\n about:\n 'O inventário: conta-se o que existe na prateleira e o sistema lança a diferença contra o que ele achava que tinha.',\n route: '/inventory/stock/counts',\n requires: [\n {\n title: 'Produtos com saldo',\n feature: 'inventory.movimentacoes',\n route: '/inventory/stock/history',\n check: 'os produtos já têm entrada lançada — contar contra saldo zero não mede nada',\n },\n ],\n steps: [\n { do: 'Estoque › Contagens › Nova, escolhendo o local a contar.', route: '/inventory/stock/counts/new' },\n { do: 'Conte de verdade e registre o que achou, item por item.' },\n { do: 'Feche a sessão: a diferença vira movimento de ajuste com o motivo \"contagem\".' },\n ],\n rules: [\n 'A contagem é por LOCAL. Contar meio depósito e fechar a sessão zera o que não foi contado.',\n ],\n answers: [\n 'Como faço inventário?',\n 'Como acerto o estoque com o que tem na prateleira?',\n ],\n}\n\nconst recipes: SetupGuideDef = {\n feature: 'inventory.receitas',\n title: 'Fichas Técnicas',\n about:\n 'A receita de cada produto que a casa produz: os insumos e as quantidades, por componente e estação, com o custo calculado e o CMV contra o preço de venda.',\n route: '/inventory/recipes/list',\n requires: [\n {\n title: 'Insumos cadastrados',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'o campo Insumo da ficha encontra o item ao digitar (produto com Insumo ou Intermediário ligado)',\n },\n {\n title: 'Custo de cada insumo',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'a coluna Custo da linha mostra R$ em vez de —; o lápis da própria ficha resolve',\n },\n {\n title: 'Preço de venda no produto da ficha',\n feature: 'inventory.produtos',\n route: '/inventory/products/list',\n check: 'o CMV da ficha mostra % em vez de —',\n },\n ],\n steps: [\n { do: 'Estoque › Fichas Técnicas › Nova Ficha Técnica, e escolha o produto.', route: '/inventory/recipes/list' },\n { do: 'Confira Rendimento, Unidade e Tipo de rendimento: Porção quando a ficha é 1 unidade vendida, Lote quando ela produz o rendimento.' },\n { do: 'Adicionar Grupo para cada componente (ex.: Preparo da Costela, Montagem) e escolha a estação.' },\n { do: 'Em cada componente, Adicionar Item: insumo, quantidade e unidade. Custo — = clique no lápis e informe o preço.' },\n { do: 'Salvar Ficha Técnica. O custo por unidade vira o custo do produto.' },\n ],\n rules: [\n 'Ter ficha é ser produzido: salvar liga «Produto Produzido» no produto.',\n 'O custo da ficha substitui o custo do produto, e é ele que outra ficha lê quando este produto entra como insumo.',\n 'Saídas da produção: ou todas as aproveitáveis têm %, somando 100, ou todas ficam em branco (rateio pelo valor de mercado).',\n 'A sugestão da IA preenche a tela e não grava nada; ela substitui os componentes que estavam lá.',\n ],\n answers: [\n 'Por que o produto não tem a aba Ficha Técnica?',\n 'Qual a diferença entre rendimento Porção e Lote?',\n 'Por que o insumo aparece com custo —?',\n 'Salvei a ficha e o custo do produto mudou sozinho. É normal?',\n ],\n}\n\nexport const inventorySetupGuides: SetupGuideDef[] = [\n foundations,\n products,\n movements,\n counts,\n usageAudit,\n recipes,\n]\n","import { countByTenant, type OnboardingProgramDef } from '@fayz-ai/core'\nimport { T } from '@fayz-ai/inventory/data/tables'\n\n/**\n * Implantação do Estoque — e a ordem aqui é dependência, não gosto.\n *\n * Local antes de produto, produto antes de saldo. Quem cadastra o catálogo\n * primeiro termina com produto sem lugar onde ter saldo, conclui que \"o\n * estoque não funciona\" e desiste na primeira semana. Este programa existe\n * principalmente para impedir essa sequência.\n */\nexport function buildInventoryOnboarding(): OnboardingProgramDef {\n return {\n id: 'inventory',\n title: 'Seu estoque de pé',\n order: 60,\n role: 'operations',\n instructions: `Você está implantando o ESTOQUE. A ordem é dependência dura, não preferência: local → produto → saldo.\n\n- Comece pelos LOCAIS. Sem local não existe saldo, e produto cadastrado antes disso não tem onde ter quantidade. Se a pessoa quiser pular para produtos, explique isso em uma linha e siga com ela mesmo assim — mas volte.\n- Unidade de medida é a que a casa CONTA, não a que o fornecedor vende. Pergunte assim: \"quando você olha a prateleira, você conta o quê?\".\n- Cadastrar produto não cria saldo. Diga isso ANTES de a pessoa cadastrar dez produtos e estranhar o zero.\n- O razão é append-only: nada é apagado, corrigir é lançar a diferença. É a regra que mais surpreende quem vem de planilha — diga uma vez, quando aparecer a primeira correção.\n- Cada passo tem um guia (\\`readSetupGuide\\`) com as armadilhas. Leia antes de conduzir.`,\n steps: [\n {\n key: 'foundations',\n title: 'Diga onde as coisas ficam',\n description: 'Sala, depósito, bancada — saldo é sempre de um produto NUM lugar.',\n icon: 'Warehouse',\n route: '/settings/inventory/stock-locations',\n priority: 'high',\n agentHint:\n 'Pergunte onde as coisas ficam guardadas de verdade e use as palavras da pessoa. Dois ou três locais bastam para começar.',\n howTo:\n 'Configurações › Estoque › Locais de estoque. Cadastre os lugares reais onde o material fica — \"Sala 2\", \"Depósito\", \"Bancada\". Saldo é sempre de um produto num local: sem isso, o produto existe e a quantidade não tem onde morar.',\n celebrate: 'Cada coisa no seu lugar 📦',\n script: [\n { kind: 'say', text: 'Estoque começa pelo lugar: onde as coisas ficam guardadas.' },\n { kind: 'goto', route: '/settings/inventory/stock-locations' },\n {\n kind: 'ask',\n text: 'Estamos em Locais de estoque. Pergunte onde o material fica guardado na casa e cadastre com as palavras da própria pessoa.',\n },\n ],\n check: async () => (await countByTenant(T.stockLocations)) > 0,\n },\n {\n key: 'catalog',\n title: 'Traga o que você guarda',\n description: 'O catálogo do que a casa usa e vende, na unidade em que você conta.',\n icon: 'Package',\n route: '/inventory/products/list',\n priority: 'high',\n replaces: 'catalog',\n agentHint:\n 'Pergunte onde o catálogo está hoje (planilha, nota do fornecedor, cabeça). Um produto já destrava o resto — não espere pelos duzentos.',\n howTo:\n 'Estoque › Produtos › Novo. Escolha a unidade em que VOCÊ conta o produto (se você conta ampola e o fornecedor vende caixa, é ampola). Defina o estoque mínimo do que não pode faltar. Cadastrar não cria saldo — o saldo vem da entrada, no passo seguinte.',\n celebrate: 'Catálogo no ar 🎉',\n check: async () => (await countByTenant('products')) > 0,\n },\n {\n key: 'first-entry',\n title: 'Dê a primeira entrada',\n description: 'É o movimento que faz o saldo existir.',\n icon: 'ArrowDownToLine',\n route: '/inventory/stock/entry',\n agentHint:\n 'Faça junto com um produto só, para a pessoa VER o saldo aparecer. É o momento em que o módulo deixa de ser abstrato.',\n howTo:\n 'Estoque › Movimentações › Entrada. Escolha o produto, o local e a quantidade que você tem hoje na prateleira. O saldo aparece na hora, e o lançamento fica no histórico com data e autor — nada aqui é apagado depois; corrigir é lançar a diferença.',\n celebrate: 'Saldo na mão 📈',\n script: [\n { kind: 'say', text: 'Agora o que faz o saldo existir: uma entrada.' },\n { kind: 'goto', route: '/inventory/stock/entry' },\n { kind: 'await', text: 'Escolha um produto, o local e a quantidade que tem hoje. Eu vejo daqui quando entrar.' },\n ],\n check: async () => (await countByTenant(T.stockMovements)) > 0,\n },\n ],\n }\n}\n","// inventory.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"inventory.nav.panel\": \"Panel\",\n \"inventory.panel.columnProduct\": \"Product\",\n \"inventory.panel.columnLocation\": \"Location\",\n \"inventory.panel.columnBatch\": \"Batch\",\n \"inventory.panel.columnExpiry\": \"Expiry\",\n \"inventory.panel.columnQuantity\": \"Qty / min\",\n \"inventory.panel.columnValue\": \"Value\",\n \"inventory.panel.empty\": \"No stock position for this selection.\",\n \"inventory.panel.totalLines\": \"Lines\",\n \"inventory.panel.totalValue\": \"Stock value\",\n \"inventory.panel.unsupported\": \"This app does not expose the stock panel.\",\n \"inventory.filters.stockState\": \"Stock status\",\n \"inventory.filters.health.negative\": \"Negative\",\n \"inventory.filters.health.below_min\": \"Below min\",\n \"inventory.filters.health.zero\": \"Zero\",\n \"inventory.filters.health.ok\": \"OK\",\n \"inventory.filters.expiry\": \"Expiry\",\n \"inventory.filters.expiry.all\": \"All\",\n \"inventory.filters.expiry.expired\": \"Expired\",\n \"inventory.filters.expiry.le30\": \"Expires in 30 days\",\n \"inventory.filters.expiry.le60\": \"Expires in 60 days\",\n \"inventory.filters.expiry.le90\": \"Expires in 90 days\",\n \"inventory.filters.expiry.none\": \"No expiry\",\n \"inventory.filters.batchPlaceholder\": \"Batch\",\n \"inventory.filters.productPlaceholder\": \"Search product...\",\n \"inventory.filters.countState\": \"Count state\",\n \"inventory.filters.countAll\": \"All\",\n \"inventory.filters.countPending\": \"To count\",\n \"inventory.filters.countDone\": \"Counted\",\n \"inventory.filters.itemSearchPlaceholder\": \"Search product or code...\",\n \"inventory.filters.title\": \"Filters\",\n \"inventory.filters.apply\": \"Search\",\n \"inventory.filters.pending\": \"Filters changed\",\n \"inventory.filters.pendingHint\": \"The list still shows the previous selection. Click Search to apply.\",\n \"inventory.filters.clear\": \"Clear\",\n \"inventory.filters.more\": \"More filters\",\n \"inventory.filters.less\": \"Fewer filters\",\n \"inventory.filters.from\": \"From\",\n \"inventory.filters.to\": \"To\",\n \"inventory.filters.allTypes\": \"All types\",\n \"inventory.filters.location\": \"Location\",\n \"inventory.filters.allLocations\": \"All locations\",\n \"inventory.filters.category\": \"Category\",\n \"inventory.filters.allCategories\": \"All categories\",\n \"inventory.filters.kind\": \"Item type\",\n \"inventory.filters.allKinds\": \"All\",\n \"inventory.filters.status\": \"Status\",\n \"inventory.filters.allStatuses\": \"All\",\n \"inventory.filters.channel\": \"Sales channel\",\n \"inventory.filters.allChannels\": \"All channels\",\n \"inventory.filters.channelSite\": \"Website (store)\",\n \"inventory.filters.channelDelivery\": \"Delivery\",\n \"inventory.filters.channelPos\": \"POS / counter\",\n \"inventory.stock.pendingRetry\": \"Confirmation is pending. Do not create another entry. Retry the same details before leaving this screen.\",\n \"inventory.stock.refreshAfterCommit\": \"Movement recorded. Refresh the screen to see the balance.\",\n \"inventory.dashboard.activeItems\": \"Active items\",\n \"inventory.dashboard.belowMinimum\": \"Below minimum\",\n \"inventory.dashboard.entries\": \"Entries:\",\n \"inventory.dashboard.exits\": \"Exits:\",\n \"inventory.dashboard.last7Days\": \"Last 7 days\",\n \"inventory.dashboard.lowStock\": \"Low Stock\",\n \"inventory.dashboard.needRestocking\": \"Need restocking\",\n \"inventory.dashboard.outOfStock\": \"Out of Stock\",\n \"inventory.dashboard.quickActions\": \"Quick Actions\",\n \"inventory.dashboard.quickActionsDesc\": \"Use the sidebar to record stock entries, exits, or manage products.\",\n \"inventory.dashboard.recentActivity\": \"Recent Activity\",\n \"inventory.dashboard.stockValue\": \"Stock Value\",\n \"inventory.dashboard.totalProducts\": \"Total Products\",\n \"inventory.dashboard.totalValue\": \"Total inventory value\",\n \"inventory.history.noMovements\": \"No movements recorded\",\n \"inventory.history.columnDate\": \"Date\",\n \"inventory.history.columnProduct\": \"Product\",\n \"inventory.history.columnType\": \"Type\",\n \"inventory.history.columnLocation\": \"Location\",\n \"inventory.history.columnQty\": \"Qty\",\n \"inventory.history.columnTotal\": \"Total\",\n \"inventory.history.newEntry\": \"New entry\",\n \"inventory.history.newExit\": \"Exit\",\n \"inventory.nav.recipes\": \"Recipes\",\n \"inventory.entity.stockLocation\": \"Stock Location\",\n \"inventory.entity.stockLocation.plural\": \"Stock Locations\",\n \"inventory.entity.productCategory\": \"Category\",\n \"inventory.entity.productCategory.plural\": \"Categories\",\n \"registry.suppliers\": \"Suppliers\",\n \"registry.suppliers.description\": \"Who you buy from\",\n \"registry.product-categories\": \"Categories\",\n \"registry.product-categories.description\": \"How the catalogue is grouped\",\n \"registry.stock-locations\": \"Stock locations\",\n \"registry.stock-locations.description\": \"Where stock physically sits — cold room, dry store, freezer\",\n \"registry.measurement-units\": \"Units of measure\",\n \"registry.measurement-units.description\": \"How each item is counted\",\n \"inventory.history.searchPlaceholder\": \"Search movements...\",\n \"inventory.history.subtitle\": \"All stock movements\",\n \"inventory.history.title\": \"Stock History\",\n \"inventory.nav.dashboard\": \"Summary\",\n \"inventory.nav.entry\": \"Entry\",\n \"inventory.nav.exit\": \"Exit\",\n \"inventory.nav.history\": \"History\",\n \"inventory.nav.inventory\": \"Inventory\",\n \"inventory.nav.list\": \"List\",\n \"inventory.nav.new\": \"New\",\n \"inventory.nav.products\": \"Products\",\n \"inventory.nav.stock\": \"Movements\",\n \"inventory.page.newProduct\": \"New Product\",\n \"inventory.page.newProductDesc\": \"Add a product to your catalog\",\n \"inventory.page.settingsSubtitle\": \"Preferences, suppliers, categories, and units\",\n \"inventory.page.settingsTitle\": \"Inventory Settings\",\n \"inventory.page.stockEntry\": \"Stock Entry\",\n \"inventory.page.stockEntryDesc\": \"Record goods received\",\n \"inventory.page.stockExit\": \"Stock Exit\",\n \"inventory.page.stockExitDesc\": \"Record goods used or sold\",\n \"inventory.recipeDetail.active\": \"Active\",\n \"inventory.recipeDetail.backToList\": \"Back to list\",\n \"inventory.recipeDetail.inactive\": \"Inactive\",\n \"inventory.recipeDetail.ingredientCount\": \"Ingredients\",\n \"inventory.recipeDetail.ingredientsTitle\": \"Ingredients\",\n \"inventory.recipeDetail.instructions\": \"Instructions\",\n \"inventory.recipeDetail.noIngredients\": \"No ingredients defined\",\n \"inventory.recipeDetail.notFound\": \"Recipe not found\",\n \"inventory.recipeDetail.prepTime\": \"Prep time\",\n \"inventory.recipeDetail.produces\": \"Produces\",\n \"inventory.recipeDetail.recipes\": \"Recipes\",\n \"inventory.recipeDetail.yield\": \"Yield\",\n \"inventory.recipes.createFirst\": \"Create your first recipe\",\n \"inventory.recipes.ingredients\": \"Ingredients\",\n \"inventory.recipes.newRecipe\": \"New recipe\",\n \"inventory.recipes.noRecipes\": \"No produced products yet\",\n \"inventory.recipes.exporting\": \"Building the recipes spreadsheet…\",\n \"inventory.recipes.exported\": \"Spreadsheet downloaded\",\n \"inventory.sheet.print\": \"Print\",\n \"inventory.sheet.printSaveFirst\": \"Save the sheet before printing\",\n \"inventory.recipes.noCategory\": \"No category\",\n \"inventory.recipes.filterKind\": \"Type\",\n \"inventory.recipes.filterKindAll\": \"All types\",\n \"inventory.recipes.kindSale\": \"Sale\",\n \"inventory.recipes.kindIntermediate\": \"Intermediate\",\n \"inventory.recipes.filterCategory\": \"Category\",\n \"inventory.recipes.filterCategoryAll\": \"All categories\",\n \"inventory.recipes.filterCmv\": \"CMV\",\n \"inventory.recipes.filterCmvAll\": \"Any CMV\",\n \"inventory.recipes.cmvHigh\": \"CMV above {{pct}}%\",\n \"inventory.recipes.cmvGood\": \"Good CMV (below {{pct}}%)\",\n \"inventory.recipes.cmvAttention\": \"CMV watch ({{from}}–{{to}}%)\",\n \"inventory.recipes.cmvNone\": \"No CMV\",\n \"inventory.recipes.produces\": \"Produces:\",\n \"inventory.recipes.productionFormulas\": \"{{count}} production formulas\",\n \"inventory.recipes.recipesDesc\": \"Recipes define how to produce products from ingredients\",\n \"inventory.recipes.title\": \"Recipes\",\n \"inventory.recipes.yield\": \"Yield\",\n \"inventory.stock.additionalDetails\": \"Additional details (optional)\",\n \"inventory.stock.adjustmentDesc\": \"Count correction\",\n \"inventory.stock.adjustmentLabel\": \"Adjustment\",\n \"inventory.stock.back\": \"Back\",\n \"inventory.stock.batchNumber\": \"Batch Number\",\n \"inventory.stock.currentStock\": \"Current Stock\",\n \"inventory.stock.destination\": \"Destination\",\n \"inventory.stock.document\": \"Document\",\n \"inventory.stock.documentNumber\": \"Document Number\",\n \"inventory.stock.entry\": \"Stock Entry\",\n \"inventory.stock.entryDesc\": \"Receiving goods\",\n \"inventory.stock.entryLabel\": \"Entry\",\n \"inventory.stock.exit\": \"Stock Exit\",\n \"inventory.stock.exitDesc\": \"Using or selling\",\n \"inventory.stock.exitLabel\": \"Exit\",\n \"inventory.stock.expirationDate\": \"Expiration Date\",\n \"inventory.stock.fromLocation\": \"From Location\",\n \"inventory.stock.locationLabel\": \"Location\",\n \"inventory.stock.lossDesc\": \"Waste or damage\",\n \"inventory.stock.lossLabel\": \"Loss\",\n \"inventory.stock.movement\": \"Stock Movement\",\n \"inventory.stock.movementDetails\": \"Movement Details\",\n \"inventory.stock.movementType\": \"Movement type\",\n \"inventory.stock.next\": \"Next\",\n \"inventory.stock.notes\": \"Notes\",\n \"inventory.stock.product\": \"Product\",\n \"inventory.stock.quantity\": \"Quantity *\",\n \"inventory.stock.quantityLabel\": \"Quantity\",\n \"inventory.stock.reason\": \"Reason *\",\n \"inventory.stock.reasonLabel\": \"Reason\",\n \"inventory.stock.recordMovement\": \"Record Movement\",\n \"inventory.stock.recorded\": \"Recorded\",\n \"inventory.stock.recording\": \"Recording...\",\n \"inventory.stock.searchProduct\": \"Search by name, SKU, or barcode...\",\n \"inventory.stock.stepOf\": \"Step {{step}} of 3\",\n \"inventory.stock.supplier\": \"Supplier\",\n \"inventory.stock.toLocation\": \"To Location *\",\n \"inventory.stock.total\": \"Total\",\n \"inventory.stock.totalCost\": \"Total Cost\",\n \"inventory.stock.transferDesc\": \"Between locations\",\n \"inventory.stock.transferLabel\": \"Transfer\",\n \"inventory.stock.unitCost\": \"Unit Cost\",\n \"inventory.stock.unitCostLabel\": \"Unit Cost\",\n \"inventory.stock.searchSupplier\": \"Search supplier...\",\n \"inventory.stock.noSuppliers\": \"No supplier registered\",\n \"inventory.productDetail.stockTab\": \"Stock\",\n \"inventory.productDetail.positionsTitle\": \"Stock by location\",\n \"inventory.productDetail.onHand\": \"On hand\",\n \"inventory.productDetail.minimum\": \"Minimum\",\n \"inventory.productDetail.noPositions\": \"No stock in any location\",\n \"inventory.productDetail.historyTitle\": \"Movement history\",\n \"inventory.productDetail.undoLast\": \"Undo last movement\",\n \"inventory.productDetail.undoTitle\": \"Undo the last movement?\",\n \"inventory.productDetail.undoDescription\": \"{{type}} of {{quantity}} on {{date}} leaves the history, and the stock it moved goes back.\",\n \"inventory.productDetail.undoConfirm\": \"Undo\",\n \"inventory.productDetail.undone\": \"Movement undone\",\n \"inventory.productDetail.undoFailed\": \"Could not undo the movement\",\n \"inventory.productDetail.notFound\": \"Product not found\",\n \"inventory.productDetail.backToList\": \"Back to products\",\n \"inventory.onboarding.welcome\": \"Welcome to Inventory\",\n \"inventory.onboarding.description\": \"Track products, manage stock levels, and monitor movements across your business.\",\n \"inventory.onboarding.skip\": \"Skip setup\",\n \"inventory.onboarding.getStarted\": \"Get Started\",\n \"inventory.onboarding.units.title\": \"Measurement Units\",\n \"inventory.onboarding.units.description\": \"Default units (Unit, Box, Kg, L, etc.) are ready. Customize them anytime in Settings.\",\n \"inventory.onboarding.locations.title\": \"Stock Locations\",\n \"inventory.onboarding.locations.description\": \"A default storage location has been created. Add more for multi-location tracking.\",\n \"inventory.onboarding.start\": \"Start using Inventory\",\n \"inventory.onboarding.preparing\": \"Preparing inventory...\",\n \"inventory.onboarding.setupError\": \"We could not prepare the default units and stock location. Try again.\",\n \"inventory.quickActions.newProduct\": \"New Product\",\n \"inventory.quickActions.newProductDesc\": \"Add a product to your catalog\",\n \"inventory.quickActions.stockEntry\": \"Stock Entry\",\n \"inventory.quickActions.stockEntryDesc\": \"Record goods received\",\n \"inventory.quickActions.stockExit\": \"Stock Exit\",\n \"inventory.quickActions.stockExitDesc\": \"Record goods used or sold\",\n \"inventory.settingsPage.title\": \"Inventory Settings\",\n \"inventory.settingsPage.subtitle\": \"Manage units, categories, and stock locations\",\n \"inventory.settings.modules\": \"Modules\",\n \"inventory.settings.modulesDesc\": \"What this house shows inside Inventory\",\n \"inventory.settings.recipes\": \"Recipes\",\n \"inventory.settings.recipesDesc\": \"The bill of materials that says what each product consumes\",\n \"inventory.settings.requisitions\": \"Requisitions\",\n \"inventory.settings.requisitionsDesc\": \"Internal requests for material between areas\",\n \"inventory.settings.usageAuditDesc\": \"What left stock against what was sold\",\n \"inventory.settings.temperature\": \"Temperature\",\n \"inventory.settings.temperatureDesc\": \"Temperature log for refrigerated locations\",\n \"inventory.settings.stockManagement\": \"Stock Management\",\n \"inventory.settings.stockManagementDesc\": \"How stock levels are tracked\",\n \"inventory.settings.lowStockAlerts\": \"Low stock alerts\",\n \"inventory.settings.lowStockAlertsDesc\": \"Show warnings when products fall below minimum quantity\",\n \"inventory.settings.requireReason\": \"Require reason for adjustments\",\n \"inventory.settings.requireReasonDesc\": \"Make reason mandatory for stock adjustments and losses\",\n \"inventory.settings.autoDeduct\": \"Auto-deduct on service\",\n \"inventory.settings.autoDeductDesc\": \"Automatically deduct products when a service is executed\",\n \"inventory.settings.products\": \"Products\",\n \"inventory.settings.productsDesc\": \"Product catalog behavior\",\n \"inventory.settings.requireSku\": \"Require SKU\",\n \"inventory.settings.requireSkuDesc\": \"Make SKU mandatory when creating products\",\n \"inventory.settings.allowNegative\": \"Allow negative stock\",\n \"inventory.settings.allowNegativeDesc\": \"Allow stock quantities to go below zero\",\n \"inventory.settings.notifications\": \"Notifications\",\n \"inventory.settings.notificationsDesc\": \"Alerts and reminders\",\n \"inventory.settings.lowStockEmail\": \"Low stock email alerts\",\n \"inventory.settings.lowStockEmailDesc\": \"Send email when products reach minimum quantity\",\n \"inventory.settings.expiryWarnings\": \"Expiry date warnings\",\n \"inventory.settings.expiryWarningsDesc\": \"Alert before products expire (batch tracking)\",\n // Product fichas — ported from the V1 product form (the per-type tabs).\n \"inventory.productForm.commissionPercent\": \"Commission % (sale)\",\n \"inventory.productForm.commissionPercentHint\": \"What the professional earns when selling this product.\",\n \"inventory.productForm.chartAccount\": \"Chart of accounts\",\n \"inventory.productForm.avgPurchasePrice\": \"Average purchase price\",\n \"inventory.productForm.avgPurchasePriceHint\": \"Rewritten on every stock entry.\",\n \"inventory.productForm.packaging\": \"Packaging and conversions\",\n \"inventory.productForm.packagingDesc\": \"How the house buys, when that differs from how it counts.\",\n \"inventory.productForm.contentPerUnit\": \"Content per unit\",\n \"inventory.productForm.contentPerUnitHint\": \"How much fits in ONE stock unit (a bottle holds 300 ml).\",\n \"inventory.productForm.contentUnit\": \"Content unit\",\n \"inventory.productForm.purchaseUnit\": \"Purchase unit\",\n \"inventory.productForm.conversionFactor\": \"Quantity per package\",\n \"inventory.productForm.conversionFactorHint\": \"How many stock units come in one purchase unit.\",\n \"inventory.productForm.flagIngredient\": \"Ingredient\",\n \"inventory.productForm.flagIngredientHint\": \"Shows up in recipes.\",\n \"inventory.productForm.flagForSale\": \"For sale\",\n \"inventory.productForm.flagForSaleHint\": \"Menu, POS, catalogue.\",\n \"inventory.productForm.flagIntermediate\": \"Intermediate\",\n \"inventory.productForm.flagIntermediateHint\": \"Made to be used later (sauce, dough).\",\n \"inventory.productForm.flagAsset\": \"Asset\",\n \"inventory.productForm.flagAssetHint\": \"Equipment: it goes on the balance sheet, it is not consumed.\",\n \"inventory.productForm.flagProduced\": \"Produced product\",\n \"inventory.productForm.flagProducedHint\": \"Comes from a recipe — enables the recipe sheet.\",\n \"inventory.productForm.flagResale\": \"Resale\",\n \"inventory.productForm.flagResaleHint\": \"Goods meant to be resold to the customer.\",\n \"inventory.productForm.flagTracked\": \"High value / labelled\",\n \"inventory.productForm.flagTrackedHint\": \"Each unit is tracked individually.\",\n \"inventory.productForm.professionalResalePrice\": \"Professional resale price\",\n \"inventory.productForm.professionalResalePriceHint\": \"Charged when the professional resells to the end customer.\",\n \"inventory.productForm.requireBatch\": \"Require batch on entry\",\n \"inventory.productForm.requireBatchHint\": \"Blocks stock entry without a batch number.\",\n \"inventory.productForm.requireExpiry\": \"Require expiry on entry\",\n \"inventory.productForm.requireExpiryHint\": \"Blocks stock entry without an expiry date.\",\n \"inventory.productForm.notes\": \"Notes\",\n \"inventory.productForm.ingredientSection\": \"Ingredient\",\n \"inventory.productForm.ingredientSectionDesc\": \"What purchasing needs to restock in time.\",\n \"inventory.productForm.ingReorderPoint\": \"Reorder point\",\n \"inventory.productForm.ingReorderPointHint\": \"Sits ABOVE the minimum: the warning that still arrives in time to buy.\",\n \"inventory.productForm.ingLeadTime\": \"Lead time (days)\",\n \"inventory.productForm.ingShelfLife\": \"Shelf life (days)\",\n \"inventory.productForm.ingStorageTemp\": \"Storage temperature\",\n \"inventory.productForm.saleSection\": \"Sale\",\n \"inventory.productForm.saleSectionDesc\": \"What the menu and the counter show the customer.\",\n \"inventory.productForm.salePrepTime\": \"Prep time (min)\",\n \"inventory.productForm.saleServes\": \"Serves (people)\",\n \"inventory.productForm.saleCalories\": \"Calories (kcal)\",\n \"inventory.productForm.saleMenuDescription\": \"Menu description\",\n \"inventory.productForm.saleAllergens\": \"Allergens\",\n \"inventory.productForm.saleAllergensPlaceholder\": \"Contains gluten, lactose\",\n \"inventory.productForm.saleSoldByWeight\": \"Sold by weight\",\n \"inventory.productForm.saleHighlightDelivery\": \"Highlight on delivery\",\n \"inventory.productForm.saleAvailableDelivery\": \"Available for delivery\",\n \"inventory.productForm.saleAvailableCounter\": \"Available at the counter\",\n \"inventory.productForm.saleChannelsSection\": \"Channel prices\",\n \"inventory.productForm.saleChannelsSectionDesc\": \"Leave a channel empty to use the base sale price.\",\n \"inventory.productForm.intermediateSection\": \"Intermediate\",\n \"inventory.productForm.intermediateSectionDesc\": \"What production needs to prepare the batch.\",\n \"inventory.productForm.intYield\": \"Yield (%)\",\n \"inventory.productForm.intPrepTime\": \"Prep time (min)\",\n \"inventory.productForm.intShelfLifeHours\": \"Shelf life after prep (h)\",\n \"inventory.productForm.intBatchSize\": \"Batch size\",\n \"inventory.productForm.intBatchUnit\": \"Batch unit\",\n \"inventory.productForm.intStorage\": \"Storage instructions\",\n \"inventory.productForm.assetSection\": \"Asset\",\n \"inventory.productForm.assetSectionDesc\": \"The equipment the house owns, and who answers for it.\",\n \"inventory.productForm.assetValue\": \"Asset value\",\n \"inventory.productForm.assetResidualValue\": \"Residual value\",\n \"inventory.productForm.assetUsefulLife\": \"Useful life (months)\",\n \"inventory.productForm.assetDepreciation\": \"Annual depreciation (%)\",\n \"inventory.productForm.assetSerial\": \"Serial number\",\n \"inventory.productForm.assetAcquisition\": \"Acquisition date\",\n \"inventory.productForm.assetWarranty\": \"Warranty until\",\n \"inventory.productForm.assetStatus\": \"Status\",\n \"inventory.productForm.assetLocation\": \"Location\",\n \"inventory.productForm.assetLocationPlaceholder\": \"Room 2, shelf B\",\n \"inventory.productForm.assetResponsible\": \"Responsible\",\n \"inventory.productForm.assetInsurance\": \"Insurance policy\",\n \"inventory.productForm.assetLastMaintenance\": \"Last maintenance\",\n \"inventory.productForm.assetNextMaintenance\": \"Next maintenance\",\n \"inventory.productForm.taxSection\": \"Tax\",\n \"inventory.productForm.taxSectionDesc\": \"What the invoice must say about this product. Empty means the tax group decides.\",\n \"inventory.productForm.taxGroup\": \"Tax group\",\n \"inventory.productForm.taxGroupHint\": \"Set up under Inventory › Invoices › Tax groups.\",\n \"inventory.productForm.ncmHint\": \"The product's invoice classification. It belongs to the product, never to the group.\",\n \"inventory.productForm.icmsOrigin\": \"ICMS origin\",\n \"inventory.productForm.icmsRate\": \"ICMS rate (%)\",\n \"inventory.productForm.cstHint\": \"CST has 2 digits. CSOSN has 3 and is set on the tax group, for Simples Nacional.\",\n \"inventory.productForm.pisRate\": \"PIS rate (%)\",\n \"inventory.productForm.cofinsRate\": \"COFINS rate (%)\",\n \"inventory.productForm.baseCalcMode\": \"Tax base mode\",\n \"inventory.productForm.benefitCode\": \"Tax benefit code (cBenef)\",\n \"inventory.productForm.povertyFund\": \"Poverty fund (%)\",\n \"inventory.productForm.ibsCbsSituation\": \"IBS and CBS — tax situation\",\n \"inventory.productForm.ibsCbsClassification\": \"IBS and CBS — tax classification\",\n \"inventory.productForm.classificationRequired\": \"Pick at least one classification for the product.\",\n \"inventory.productType.ingredient\": \"Ingredient\",\n \"inventory.productType.sale\": \"For sale\",\n \"inventory.productType.intermediate\": \"Intermediate\",\n \"inventory.productType.asset\": \"Asset\",\n \"inventory.variants.tab\": \"Variants\",\n \"inventory.variants.name\": \"Variant\",\n \"inventory.variants.namePlaceholder\": \"E.g. M, L, XL, Blue\",\n \"inventory.variants.sku\": \"SKU\",\n \"inventory.variants.skuPlaceholder\": \"Optional\",\n \"inventory.variants.default\": \"Default\",\n \"inventory.variants.empty\": \"No variants. The product is sold and stocked as a single item.\",\n \"inventory.variants.duplicate\": \"A variant with this name already exists.\",\n \"inventory.variants.loadFailed\": \"Could not load the variants.\",\n \"inventory.variants.saveFailed\": \"Could not save the variant.\",\n \"inventory.variants.unavailable\": \"Variants are not available in this workspace.\",\n \"inventory.variants.onHand\": \"{{count}} in stock\",\n \"inventory.barcodes.tab\": \"Barcodes\",\n \"inventory.barcodes.code\": \"Barcode\",\n \"inventory.barcodes.codePlaceholder\": \"Type or scan\",\n \"inventory.barcodes.type\": \"Type\",\n \"inventory.barcodes.description\": \"Description\",\n \"inventory.barcodes.descriptionPlaceholder\": \"500 ml pack\",\n \"inventory.barcodes.needCode\": \"Type or scan a code.\",\n \"inventory.barcodes.empty\": \"No barcode registered.\",\n \"inventory.barcodes.duplicate\": \"This code is already in use.\",\n \"inventory.barcodes.isPrimary\": \"Primary — this is what the label prints\",\n \"inventory.barcodes.makePrimary\": \"Make primary\",\n \"inventory.barcodes.removeTitle\": \"Remove this barcode?\",\n \"inventory.barcodes.unavailable\": \"Barcodes are unavailable in this environment.\",\n \"inventory.productRecipe.tab\": \"Recipe\",\n \"inventory.productRecipe.none\": \"This product has no recipe yet.\",\n \"inventory.productRecipe.noneHint\": \"The recipe says what the product is made of — cost and food-cost come from it.\",\n \"inventory.productRecipe.goToRecipes\": \"Go to Recipes\",\n \"inventory.productForm.classificationUnset\": \"Unclassified\",\n \"inventory.productForm.stepIdentity\": \"Identity\",\n \"inventory.productForm.stepClassification\": \"Classification\",\n \"inventory.productForm.stepPricing\": \"Pricing\",\n \"inventory.productForm.stepStock\": \"Stock\",\n \"inventory.productForm.stepInitialEntry\": \"Opening stock\",\n \"inventory.productForm.initialEntrySection\": \"Receive stock\",\n \"inventory.productForm.initialEntrySectionDesc\": \"Optional: record what is already on the shelf. Leave blank to receive later.\",\n \"inventory.productForm.initialQuantity\": \"Quantity on hand\",\n \"inventory.productForm.initialLocation\": \"Location\",\n \"inventory.productForm.initialLocationHint\": \"Blank uses the product's default location.\",\n \"inventory.productForm.initialUnitCost\": \"Unit cost\",\n \"inventory.productForm.initialUnitCostHint\": \"Blank uses the product's cost.\",\n \"inventory.productForm.initialBatch\": \"Batch\",\n \"inventory.productForm.initialExpiry\": \"Expiry date\",\n \"inventory.productForm.initialEntryFailed\": \"Product created, but the stock entry was not recorded. Receive it from the Stock tab.\",\n \"inventory.productForm.newProduct\": \"New Product\",\n \"inventory.productForm.editProduct\": \"Edit Product\",\n \"inventory.productForm.updateDetails\": \"Update product details\",\n \"inventory.productForm.addToCatalog\": \"Add a product to your catalog\",\n \"inventory.productForm.cancel\": \"Cancel\",\n \"inventory.productForm.save\": \"Save\",\n \"inventory.productForm.saving\": \"Saving...\",\n \"inventory.productForm.generalInfo\": \"General Information\",\n \"inventory.productForm.name\": \"Name\",\n \"inventory.productForm.namePlaceholder\": \"Product name\",\n \"inventory.productForm.brand\": \"Brand\",\n \"inventory.productForm.brandPlaceholder\": \"Brand name\",\n \"inventory.productForm.sku\": \"SKU\",\n \"inventory.productForm.skuPlaceholder\": \"Internal code\",\n \"inventory.productForm.barcode\": \"Barcode\",\n \"inventory.productForm.barcodePlaceholder\": \"EAN / UPC\",\n \"inventory.productForm.description\": \"Description\",\n \"inventory.productForm.descriptionPlaceholder\": \"Additional information about the product\",\n \"inventory.productForm.classification\": \"Classification\",\n \"inventory.productForm.classificationDesc\": \"How this product is used in your business\",\n \"inventory.productForm.typeIngredient\": \"Raw material used in production or services\",\n \"inventory.productForm.typeSale\": \"Sold directly to customers\",\n \"inventory.productForm.typeIntermediate\": \"Produced internally from other items\",\n \"inventory.productForm.typeAsset\": \"Fixed asset for patrimony tracking\",\n \"inventory.productForm.pricing\": \"Pricing\",\n \"inventory.productForm.costPrice\": \"Cost Price\",\n \"inventory.productForm.salePrice\": \"Sale Price\",\n \"inventory.productForm.margin\": \"Margin\",\n \"inventory.productForm.stockLevels\": \"Stock Levels\",\n \"inventory.productForm.stockLevelsDesc\": \"Minimum and maximum thresholds for alerts\",\n \"inventory.productForm.minQuantity\": \"Minimum Quantity\",\n \"inventory.productForm.minQuantityHint\": \"Alert when stock falls below this\",\n \"inventory.productForm.maxQuantity\": \"Maximum Quantity\",\n \"inventory.productForm.maxQuantityHint\": \"Max capacity for this product\",\n \"inventory.productForm.optional\": \"Optional\",\n \"inventory.productForm.organization\": \"Organisation\",\n \"inventory.productForm.organizationDesc\": \"Category, unit, supplier and default storage location\",\n \"inventory.productForm.category\": \"Category\",\n \"inventory.productForm.measurementUnit\": \"Unit of measure\",\n \"inventory.productForm.measurementUnitHint\": \"How this item is counted in stock\",\n \"inventory.productForm.supplier\": \"Default supplier\",\n \"inventory.productForm.defaultLocation\": \"Default location\",\n \"inventory.movementType.entry\": \"Entry\",\n \"inventory.movementType.exit\": \"Exit\",\n \"inventory.movementType.adjustment\": \"Adjustment\",\n \"inventory.movementType.transfer\": \"Transfer\",\n \"inventory.movementType.loss\": \"Loss\",\n \"inventory.recipeForm.group\": \"Stage\",\n \"inventory.recipeForm.ungrouped\": \"No stage\",\n \"inventory.productList.bulkActivate\": \"Activate\",\n \"inventory.productList.bulkActivated\": \"{{count}} product(s) activated\",\n \"inventory.productList.bulkDeactivate\": \"Deactivate\",\n \"inventory.productList.bulkDeactivated\": \"{{count}} product(s) deactivated\",\n \"inventory.productList.bulkFailed\": \"{{count}} product(s) could not be updated\",\n \"inventory.productList.bulkNothingToDo\": \"The selected products are already in that state.\",\n \"inventory.productList.filterActive\": \"Active\",\n \"inventory.productList.filterAllStatuses\": \"Active and inactive\",\n \"inventory.productList.filterInactive\": \"Inactive\",\n \"inventory.productList.filterStatus\": \"Status\",\n \"inventory.productList.inactive\": \"Inactive\",\n \"inventory.productList.title\": \"Products\",\n \"inventory.productList.subtitle\": \"{{count}} products\",\n \"inventory.productList.product\": \"Product\",\n \"inventory.productList.type\": \"Type\",\n \"inventory.productList.stock\": \"Stock\",\n \"inventory.productList.cost\": \"Cost\",\n \"inventory.productList.value\": \"Value\",\n \"inventory.productList.searchPlaceholder\": \"Search products...\",\n 'inventory.productList.aiHint': 'Describe the product and I create it.',\n 'inventory.productList.askPlaceholder': 'Describe the product…',\n 'inventory.productList.askPersona': 'Product intake',\n 'inventory.productList.askPitch': 'Tell me the product you want to add.',\n 'inventory.productList.askDescription': 'Name, price, cost, SKU, kind — tell me what you know, however you say it, and I fill in the rest sensibly. You check before it saves.',\n 'inventory.productList.askSuggestion.0': 'Black tee S/M/L, $79, cost $28',\n 'inventory.productList.askSuggestion.1': 'Add 5 sample products so I can test the store',\n 'inventory.productList.askSuggestion.2': 'A bundle of the two best sellers',\n \"inventory.productList.newProduct\": \"New Product\",\n \"inventory.productList.empty\": \"No products yet\",\n \"inventory.productList.createFirst\": \"Create your first product\",\n \"inventory.stock.unknownProduct\": \"Unknown Product\",\n \"inventory.stock.reasonLossPlaceholder\": \"e.g. Expired, damaged\",\n \"inventory.stock.reasonAdjustPlaceholder\": \"e.g. Physical count correction\",\n \"inventory.stock.documentPlaceholder\": \"Invoice, receipt, PO...\",\n \"inventory.stock.batchPlaceholder\": \"e.g. LOT001\",\n \"inventory.stock.notesPlaceholder\": \"Additional notes...\",\n \"inventory.recipeDetail.loading\": \"Loading...\",\n \"inventory.recipeDetail.ingredient\": \"Ingredient\",\n \"inventory.recipeDetail.quantity\": \"Quantity\",\n \"inventory.recipeDetail.unit\": \"Unit\",\n \"inventory.recipeDetail.notes\": \"Notes\",\n \"inventory.recipeDetail.created\": \"Created\",\n \"inventory.recipeDetail.updated\": \"Updated\",\n \"inventory.recipeForm.newRecipe\": \"New Recipe\",\n \"inventory.recipeForm.subtitle\": \"Define a production formula\",\n \"inventory.recipeForm.cancel\": \"Cancel\",\n \"inventory.recipeForm.saveRecipe\": \"Save Recipe\",\n \"inventory.recipeForm.saving\": \"Saving...\",\n \"inventory.recipeForm.recipeDetails\": \"Recipe Details\",\n \"inventory.recipeForm.recipeName\": \"Recipe Name\",\n \"inventory.recipeForm.recipeNamePlaceholder\": \"e.g. Tomato Sauce\",\n \"inventory.recipeForm.description\": \"Description\",\n \"inventory.recipeForm.descriptionPlaceholder\": \"Brief description...\",\n \"inventory.recipeForm.produces\": \"Produces (Product)\",\n \"inventory.recipeForm.searchProduct\": \"Search product...\",\n \"inventory.recipeForm.createProduct\": \"Create product\",\n \"inventory.recipeForm.yieldQuantity\": \"Yield Quantity\",\n \"inventory.recipeForm.prepTime\": \"Prep Time (min)\",\n \"inventory.recipeForm.instructions\": \"Instructions\",\n \"inventory.recipeForm.instructionsPlaceholder\": \"Step-by-step preparation instructions...\",\n \"inventory.recipeForm.ingredients\": \"Ingredients\",\n \"inventory.recipeForm.addIngredient\": \"Add Ingredient\",\n \"inventory.recipeForm.noIngredients\": \"No ingredients added\",\n \"inventory.recipeForm.addFirstIngredient\": \"Add your first ingredient\",\n \"inventory.recipeForm.ingredient\": \"Ingredient\",\n \"inventory.recipeForm.quantity\": \"Quantity\",\n \"inventory.recipeForm.notes\": \"Notes\",\n \"inventory.recipeForm.searchIngredient\": \"Search ingredient...\",\n \"inventory.recipeForm.createIngredient\": \"Create ingredient\",\n \"inventory.recipeForm.notesPlaceholder\": \"e.g. diced, fresh\",\n \"inventory.recipeForm.ingredientsConfigured\": \"{{configured}} of {{total}} ingredients configured\",\n \"inventory.title\": \"Inventory\",\n \"inventory.stock.title\": \"Stock\",\n \"inventory.stock.minStock\": \"Min. Stock\",\n \"inventory.stock.adjust\": \"Adjust Stock\",\n \"inventory.stock.lowStock\": \"Low Stock\",\n \"inventory.products.title\": \"Products\",\n \"inventory.products.create\": \"New Product\",\n \"inventory.recipes.create\": \"New Recipe\",\n \"inventory.recipes.addIngredient\": \"Add Ingredient\",\n \"inventory.recipes.cost\": \"Cost\",\n \"inventory.recipes.loading\": \"Loading...\",\n \"inventory.suppliers.title\": \"Suppliers\",\n \"inventory.suppliers.create\": \"New Supplier\",\n \"inventory.movements.title\": \"Movements\",\n \"inventory.movements.in\": \"Stock In\",\n \"inventory.movements.out\": \"Stock Out\",\n \"inventory.settings.title\": \"Inventory Settings\",\n\n \"inventory.recipeDetail.cost\": \"Cost\",\n \"inventory.recipeDetail.unitCost\": \"Unit cost\",\n \"inventory.recipeDetail.totalCost\": \"Recipe cost\",\n \"inventory.recipeDetail.costPerYield\": \"Cost per unit produced\",\n \"inventory.recipeDetail.salePrice\": \"Sale price\",\n \"inventory.recipeDetail.cmv\": \"Food cost %\",\n \"inventory.recipeDetail.cmvUnknown\": \"No sale price\",\n \"inventory.recipeDetail.cmvHigh\": \"Above {{threshold}}% — this dish is eating the margin.\",\n\n \"inventory.recipeGaps.title\": \"Not linked to your catalogue\",\n \"inventory.recipeGaps.description\": \"The assistant suggested these but could not match them. Pick the equivalent item or create it.\",\n \"inventory.recipeGaps.produces\": \"Produces:\",\n \"inventory.recipeGaps.unnamed\": \"Unnamed ingredient\",\n \"inventory.recipeGaps.linkFailed\": \"Could not link this item\",\n \"inventory.recipeGaps.createFailed\": \"Could not create the product\",\n\n \"inventory.recipes.entity\": \"Recipe\",\n \"inventory.recipes.colProduct\": \"Product\",\n \"inventory.recipes.colIngredients\": \"Ingredients\",\n \"inventory.recipes.colYield\": \"Yield\",\n \"inventory.recipes.colPrep\": \"Prep\",\n \"inventory.recipes.colCost\": \"Cost\",\n \"inventory.recipes.colSale\": \"Sale\",\n \"inventory.recipes.colCmv\": \"Food cost %\",\n \"inventory.recipes.noSheet\": \"No recipe sheet\",\n \"inventory.recipes.searchPlaceholder\": \"Search recipe...\",\n \"inventory.recipes.newByHand\": \"Fill it in by hand\",\n \"inventory.recipes.newByHandHint\": \"Open the form and enter the ingredients yourself\",\n \"inventory.recipes.aiHint\": \"Describe the dish and get the sheet built with your own ingredients\",\n \"inventory.recipes.askPlaceholder\": \"e.g. recipe for smoked hump with cheese, 400g, serves 3\",\n \"inventory.recipes.askPersona\": \"Recipe sheets\",\n \"inventory.recipes.askPitch\": \"Let's cost your menu\",\n \"inventory.recipes.askDescription\": \"Describe the dish and I build the sheet from the ingredients you already have, with cost and food cost %.\",\n \"inventory.recipes.askSuggestion.0\": \"Build the recipe sheet for the smoked hump with cheese\",\n \"inventory.recipes.askSuggestion.1\": \"Which menu items still have no recipe sheet?\",\n \"inventory.recipes.askSuggestion.2\": \"Which dishes are above 35% food cost?\",\n \"inventory.recipes.loadFailed\": \"Could not load recipe sheets\",\n \"inventory.recipes.retry\": \"Try again\",\n \"inventory.recipeDetail.loadFailed\": \"Could not load this recipe sheet\",\n \"inventory.recipeDetail.retry\": \"Try again\",\n\n \"inventory.nav.counts\": \"Counts\",\n \"inventory.counts.title\": \"Stock counts\",\n \"inventory.counts.entity\": \"Stock count\",\n \"inventory.counts.colReference\": \"Count\",\n \"inventory.counts.colOpened\": \"Opened\",\n \"inventory.counts.colStatus\": \"Status\",\n \"inventory.counts.colProgress\": \"Counted\",\n \"inventory.counts.colDivergent\": \"Divergences\",\n \"inventory.counts.status.open\": \"Open\",\n \"inventory.counts.status.counting\": \"Counting\",\n \"inventory.counts.status.closed\": \"Closed\",\n \"inventory.counts.status.cancelled\": \"Cancelled\",\n \"inventory.counts.progress\": \"{{counted}} of {{total}}\",\n \"inventory.counts.newCount\": \"New count\",\n \"inventory.counts.searchPlaceholder\": \"Search counts...\",\n \"inventory.counts.empty\": \"No counts yet\",\n \"inventory.counts.formTitle\": \"Open a count\",\n \"inventory.counts.formSubtitle\": \"What the system believes is frozen the moment you open it — the variance describes the shelf, not the clock.\",\n \"inventory.counts.location\": \"Stock location\",\n \"inventory.counts.pickLocation\": \"Pick a location\",\n \"inventory.counts.category\": \"Category\",\n \"inventory.counts.allCategories\": \"Every category\",\n \"inventory.counts.reference\": \"Name\",\n \"inventory.counts.referencePlaceholder\": \"e.g. Cold room, end of August\",\n \"inventory.counts.blind\": \"Blind count\",\n \"inventory.counts.blindHint\": \"Hides the system quantity while counting, so you write what is on the shelf instead of confirming what is on the screen.\",\n \"inventory.counts.blindLine\": \"Blind — system quantity hidden\",\n \"inventory.counts.notes\": \"Notes\",\n \"inventory.counts.notesPlaceholder\": \"Anything the next person should know\",\n \"inventory.counts.open\": \"Open the count\",\n \"inventory.counts.opening\": \"Opening...\",\n \"inventory.counts.openFailed\": \"Could not open the count\",\n \"inventory.counts.cancel\": \"Cancel\",\n \"inventory.counts.notFound\": \"Count not found\",\n \"inventory.counts.noItems\": \"This count has no products\",\n \"inventory.counts.systemQty\": \"System:\",\n \"inventory.counts.notCounted\": \"Not counted\",\n \"inventory.counts.counted\": \"Counted\",\n \"inventory.counts.divergent\": \"Divergences\",\n \"inventory.counts.varianceValue\": \"Variance\",\n \"inventory.counts.saveFailed\": \"Could not save this line\",\n \"inventory.counts.close\": \"Close the count\",\n \"inventory.counts.closeTitle\": \"Close the count?\",\n \"inventory.counts.closeDescription\": \"{{divergent}} line(s) differ from the system and will get an adjustment.\",\n \"inventory.counts.incomplete\": \"Finish the count before closing\",\n \"inventory.counts.incompleteDescription\": \"{{count}} line(s) are still blank. Enter zero when the item is physically out of stock.\",\n \"inventory.counts.closeConfirm\": \"Close and adjust\",\n \"inventory.counts.closed\": \"Count closed — {{count}} adjustment(s) recorded\",\n \"inventory.counts.alreadyClosed\": \"This count was already closed\",\n \"inventory.counts.closeFailed\": \"Could not close the count\",\n \"inventory.counts.cancelCount\": \"Cancel count\",\n \"inventory.counts.cancelTitle\": \"Cancel this count?\",\n \"inventory.counts.cancelDescription\": \"The count is filed away and nothing is adjusted. What you typed stays on record.\",\n \"inventory.counts.cancelConfirm\": \"Cancel the count\",\n \"inventory.counts.cancelled\": \"Count cancelled\",\n \"inventory.counts.cancelFailed\": \"Could not cancel the count\",\n \"inventory.counts.adjustmentReason\": \"Stock count {{reference}}\",\n 'inventory.productDetail.newMovement': 'Record movement',\n 'inventory.productDetail.movementFailed': 'Could not record the movement',\n \"inventory.nav.usageAudit\": \"Usage Audit\",\n \"inventory.usageAudit.title\": \"Product Usage Audit\",\n \"inventory.usageAudit.subtitle\": \"Review what the appointments consumed and correct a quantity entered wrong.\",\n \"inventory.usageAudit.columnProduct\": \"Product\",\n \"inventory.usageAudit.columnQuantity\": \"Quantity\",\n \"inventory.usageAudit.columnLocation\": \"Position\",\n \"inventory.usageAudit.columnWhen\": \"When\",\n \"inventory.usageAudit.columnPerformedBy\": \"Performed by\",\n \"inventory.usageAudit.columnCustomer\": \"Customer\",\n \"inventory.usageAudit.columnCost\": \"Cost\",\n \"inventory.usageAudit.standard\": \"Standard\",\n \"inventory.usageAudit.badgePosted\": \"Posted\",\n \"inventory.usageAudit.badgeApproved\": \"Approved\",\n \"inventory.usageAudit.batchNoStock\": \"{count} without stock — still queued\",\n \"inventory.usageAudit.corrected\": \"Corrected\",\n \"inventory.usageAudit.noLocation\": \"No position\",\n \"inventory.usageAudit.unnamedProduct\": \"Unnamed product\",\n \"inventory.usageAudit.reason\": \"Audit notes\",\n \"inventory.usageAudit.cancel\": \"Cancel\",\n \"inventory.usageAudit.loadFailed\": \"Could not load the audit\",\n \"inventory.usageAudit.searchPlaceholder\": \"Search by product, customer, professional…\",\n \"inventory.usageAudit.periodLabel\": \"Period\",\n \"inventory.usageAudit.period30\": \"30 days\",\n \"inventory.usageAudit.period90\": \"90 days\",\n \"inventory.usageAudit.periodAll\": \"All time\",\n \"inventory.usageAudit.filterPending\": \"Pending\",\n \"inventory.usageAudit.emptyPending\": \"No usage waiting for review in this period.\",\n \"inventory.usageAudit.columnActions\": \"Actions\",\n \"inventory.usageAudit.post\": \"Post\",\n \"inventory.usageAudit.approve\": \"Approve\",\n \"inventory.usageAudit.postHint\": \"Accepts the usage AND deducts stock\",\n \"inventory.usageAudit.approveHint\": \"Accepts the usage without touching stock\",\n \"inventory.usageAudit.posted\": \"{{count}} line(s) posted to stock\",\n \"inventory.usageAudit.approved\": \"{{count}} line(s) approved\",\n \"inventory.usageAudit.approveFailed\": \"Could not accept the usage\",\n \"inventory.usageAudit.noStock\": \"No stock to post — receive the product or use Approve\",\n \"inventory.usageAudit.filtersLabel\": \"Filters\",\n \"inventory.usageAudit.filterLabel\": \"Review\",\n \"inventory.usageAudit.filterAll\": \"All\",\n \"inventory.usageAudit.filterDivergent\": \"Off standard\",\n \"inventory.usageAudit.empty\": \"No usage posted by appointments yet\",\n \"inventory.usageAudit.columnCounted\": \"Counted\",\n \"inventory.usageAudit.draftOne\": \"1 quantity changed\",\n \"inventory.usageAudit.draftMany\": \"{{count}} quantities changed\",\n \"inventory.usageAudit.draftCheck\": \"Check the quantities you typed\",\n \"inventory.usageAudit.draftHint\": \"Applying posts one adjustment per line, all under the same note.\",\n \"inventory.usageAudit.draftCost\": \"Consumption cost difference: {{value}}\",\n \"inventory.usageAudit.draftInvalid\": \"{{count}} line(s) hold a quantity that is not a number\",\n \"inventory.usageAudit.draftNothing\": \"No quantity has changed yet\",\n \"inventory.usageAudit.discard\": \"Discard\",\n \"inventory.usageAudit.apply\": \"Apply {{count}}\",\n \"inventory.usageAudit.applyTitle\": \"Apply {{count}} corrections\",\n \"inventory.usageAudit.applyDescription\": \"One ledger adjustment per line, all under the same note. Nothing is rewritten: the difference is posted.\",\n \"inventory.usageAudit.applyConfirm\": \"Apply\",\n \"inventory.usageAudit.batchReasonPlaceholder\": \"Why these quantities changed\\u2026\",\n \"inventory.usageAudit.batchReasonHint\": \"It covers the whole batch \\u2014 this note stays on every movement.\",\n \"inventory.usageAudit.batchApplied\": \"{{count}} corrections posted to the ledger\",\n \"inventory.usageAudit.batchFailed\": \"Could not apply the conference\",\n \"inventory.usageAudit.applyTitleOne\": \"Apply 1 correction\",\n \"inventory.usageAudit.batchReasonRequired\": \"Say why before applying — the note is required.\",\n \"inventory.usageAudit.batchAppliedOne\": \"1 correction posted to the ledger\",\n \"inventory.usageAudit.emptyDivergent\": \"No usage off the standard\",\n \"inventory.recipes.edit\": \"Edit\",\n \"inventory.recipes.print\": \"Print recipe\",\n \"inventory.recipes.printNoSheet\": \"No recipe to print\",\n \"inventory.recipes.pickTitle\": \"Select product\",\n \"inventory.recipes.pickHint\": \"Choose the product this recipe belongs to.\",\n \"inventory.recipes.pickPlaceholder\": \"Search product...\",\n \"inventory.recipes.pickContinue\": \"Continue\",\n \"inventory.sheet.name\": \"Recipe name\",\n \"inventory.sheet.namePlaceholder\": \"E.g. Grilled picanha\",\n \"inventory.sheet.nameRequired\": \"The recipe name is required.\",\n \"inventory.sheet.yield\": \"Yield\",\n \"inventory.sheet.yieldUnit\": \"Yield unit\",\n \"inventory.sheet.none\": \"None\",\n \"inventory.sheet.yieldMode\": \"Yield type\",\n \"inventory.sheet.yieldMode.portion\": \"Portion (the recipe is 1 unit sold)\",\n \"inventory.sheet.yieldMode.batch\": \"Batch (the recipe produces the yield)\",\n \"inventory.sheet.yieldMode.portionHint\": \"The yield only describes the plate («serves 4», «6 pieces», «400 g»). The product cost is the recipe total.\",\n \"inventory.sheet.yieldMode.batchHint\": \"The recipe produces the yield (e.g. 2.4 kg of sauce). The product cost is the recipe total ÷ the yield, in the product's unit.\",\n \"inventory.sheet.prepTime\": \"Prep time (min)\",\n \"inventory.sheet.description\": \"Description\",\n \"inventory.sheet.descriptionPlaceholder\": \"General description of the recipe\",\n \"inventory.sheet.costPrice\": \"Cost price\",\n \"inventory.sheet.per\": \"per\",\n \"inventory.sheet.batchCost\": \"Batch\",\n \"inventory.sheet.salePrice\": \"Sale price\",\n \"inventory.sheet.cmv\": \"Food cost\",\n \"inventory.sheet.components\": \"Recipe components (by station)\",\n \"inventory.sheet.suggestAi\": \"Suggest with AI\",\n \"inventory.sheet.addGroup\": \"Add group\",\n \"inventory.sheet.noComponents\": \"No components yet. Click \\\"Add group\\\" or use \\\"Suggest with AI\\\".\",\n \"inventory.sheet.componentName\": \"Component name\",\n \"inventory.sheet.componentNamePlaceholder\": \"E.g. Fried strips\",\n \"inventory.sheet.station\": \"Production station\",\n \"inventory.sheet.stationPlaceholder\": \"Select the station\",\n \"inventory.sheet.noStations\": \"No stations registered\",\n \"inventory.sheet.estimatedMinutes\": \"Estimated time (min)\",\n \"inventory.sheet.estimatedMinutesPlaceholder\": \"E.g. 20\",\n \"inventory.sheet.componentMenu\": \"More component actions\",\n \"inventory.sheet.transform\": \"Turn into intermediate product\",\n \"inventory.sheet.deleteComponent\": \"Delete component\",\n \"inventory.sheet.transformNeedsLines\": \"Add at least one ingredient to this component.\",\n \"inventory.sheet.noLines\": \"No ingredients. Click \\\"Add item\\\".\",\n \"inventory.sheet.ingredient\": \"Ingredient\",\n \"inventory.sheet.quantity\": \"Quantity\",\n \"inventory.sheet.notes\": \"Notes\",\n \"inventory.sheet.cost\": \"Cost\",\n \"inventory.sheet.unit\": \"Unit\",\n \"inventory.sheet.searchIngredient\": \"Search ingredient...\",\n \"inventory.sheet.createIngredient\": \"Create ingredient\",\n \"inventory.sheet.ingredientCreated\": \"Ingredient \\\"{{name}}\\\" created\",\n \"inventory.sheet.ingredientCreateFailed\": \"Could not create the ingredient.\",\n \"inventory.sheet.aiHint\": \"Suggested by AI\",\n \"inventory.sheet.create\": \"Create\",\n \"inventory.sheet.updateCost\": \"Update cost\",\n \"inventory.sheet.updateCostCurrent\": \"Update cost (now: {{price}}{{unit}})\",\n \"inventory.sheet.setCost\": \"Set the ingredient's cost\",\n \"inventory.sheet.removeLine\": \"Remove ingredient\",\n \"inventory.sheet.addLine\": \"Add item\",\n \"inventory.sheet.componentPrep\": \"How to prepare this component\",\n \"inventory.sheet.componentPrepPlaceholder\": \"How this component is prepared at the station\",\n \"inventory.sheet.outputs\": \"Production outputs (optional)\",\n \"inventory.sheet.outputsHint\": \"When this recipe yields more than one product (e.g. fillet + trimmings + skin). With no lines, production delivers only the main product. The order cost is split by each output's %; left blank, by market value. Waste carries no cost.\",\n \"inventory.sheet.addOutput\": \"Add output\",\n \"inventory.sheet.product\": \"Product\",\n \"inventory.sheet.outputType\": \"Type\",\n \"inventory.sheet.expectedQty\": \"Expected qty\",\n \"inventory.sheet.costShare\": \"% of cost\",\n \"inventory.sheet.auto\": \"auto\",\n \"inventory.sheet.removeOutput\": \"Remove output\",\n \"inventory.sheet.outputType.main\": \"Main\",\n \"inventory.sheet.outputType.coproduct\": \"Co-product\",\n \"inventory.sheet.outputType.byproduct\": \"By-product\",\n \"inventory.sheet.outputType.waste\": \"Waste\",\n \"inventory.sheet.outputShareTitle\": \"Check the outputs' % of cost\",\n \"inventory.sheet.outputShareHint\": \"Fill the % on every usable output, adding up to 100% — or leave them all blank to split by market value.\",\n \"inventory.sheet.instructions\": \"Assembly instructions (optional)\",\n \"inventory.sheet.instructionsPlaceholder\": \"How to assemble and finish the dish once the components are ready...\",\n \"inventory.sheet.save\": \"Save recipe\",\n \"inventory.sheet.saving\": \"Saving...\",\n \"inventory.sheet.saved\": \"Recipe saved\",\n \"inventory.sheet.saveFailed\": \"Could not save.\",\n \"inventory.sheet.loadFailed\": \"Could not load the recipe.\",\n \"inventory.sheet.costDialogTitle\": \"Update cost\",\n \"inventory.sheet.costDialogHint\": \"Set it by hand or ask the AI for a market estimate.\",\n \"inventory.sheet.costAppliesEverywhere\": \"The cost applies to every recipe that uses this ingredient.\",\n \"inventory.sheet.costInvalid\": \"Enter a value above zero.\",\n \"inventory.sheet.costUpdated\": \"{{name}} now costs {{price}}\",\n \"inventory.sheet.aiNoPrice\": \"The AI returned no price.\",\n \"inventory.sheet.aiFailed\": \"The AI did not answer. Try again.\",\n \"inventory.sheet.aiUnitMismatch\": \"The AI priced it per {{ai}}; this ingredient is counted in {{unit}}. Check before saving.\",\n \"inventory.sheet.aiTitle\": \"Suggest recipe with AI\",\n \"inventory.sheet.aiPhotos\": \"Product photos\",\n \"inventory.sheet.aiPhotosHint\": \"The more angles of the dish, the better the suggestion.\",\n \"inventory.sheet.aiProductName\": \"Product name\",\n \"inventory.sheet.aiStations\": \"Stations available to the AI:\",\n \"inventory.sheet.aiNoStations\": \"No stations registered — add stations so the AI can group correctly.\",\n \"inventory.sheet.aiInstructions\": \"Extra instructions for the AI (optional)\",\n \"inventory.sheet.aiInstructionsPlaceholder\": \"E.g. serves 2, gluten-free, use clarified butter, keep the sauce at the cold station...\",\n \"inventory.sheet.aiReplaces\": \"The suggestion replaces the components on the recipe. Nothing is saved until you save.\",\n \"inventory.sheet.aiGenerate\": \"Generate suggestion\",\n \"inventory.sheet.aiGenerating\": \"Generating...\",\n \"inventory.sheet.aiApplied\": \"Suggestion applied — review and save.\",\n \"inventory.sheet.uploadFailed\": \"Could not upload the image.\",\n \"inventory.sheet.addPhoto\": \"Add photo\",\n \"inventory.sheet.removePhoto\": \"Remove photo\",\n \"inventory.sheet.transformHint\": \"A new intermediate product is created with this block as its recipe. The block leaves this recipe — you can then add the intermediate as an item anywhere.\",\n \"inventory.sheet.transformName\": \"Intermediate product name\",\n \"inventory.sheet.transformNamePlaceholder\": \"E.g. White rice portion\",\n \"inventory.sheet.transformUnitPlaceholder\": \"Select (g, kg, ml, L, un...)\",\n \"inventory.sheet.transformNameRequired\": \"Enter the intermediate product's name.\",\n \"inventory.sheet.transformYieldRequired\": \"Enter the yield.\",\n \"inventory.sheet.transformUnitRequired\": \"Select the yield unit.\",\n \"inventory.sheet.transformDuplicate\": \"A product with this name already exists.\",\n \"inventory.sheet.transformCreate\": \"Create intermediate\",\n \"inventory.sheet.transformCreating\": \"Creating...\",\n \"inventory.sheet.transformDone\": \"\\\"{{name}}\\\" was created. You can now add it as an item to any component of this recipe.\",\n \"inventory.sheet.transformFailed\": \"Could not create the intermediate.\",\n \"inventory.complements.tab\": \"Add-ons\",\n \"inventory.complements.title\": \"Add-ons and choices\",\n \"inventory.complements.hint\": \"Set up flavours, doneness and extras. Use 0.00 when a choice costs nothing extra.\",\n \"inventory.complements.newGroup\": \"New group\",\n \"inventory.complements.empty\": \"This product has no add-ons yet.\",\n \"inventory.complements.emptyHint\": \"Create a group to start, like “Doneness” or “Whipped cream”.\",\n \"inventory.complements.groupName\": \"Group name\",\n \"inventory.complements.groupNamePlaceholder\": \"E.g. Doneness\",\n \"inventory.complements.active\": \"Active\",\n \"inventory.complements.moveUp\": \"Move group up\",\n \"inventory.complements.moveDown\": \"Move group down\",\n \"inventory.complements.deleteGroup\": \"Delete group\",\n \"inventory.complements.required\": \"Required choice\",\n \"inventory.complements.min\": \"Minimum\",\n \"inventory.complements.max\": \"Maximum\",\n \"inventory.complements.option\": \"Option\",\n \"inventory.complements.price\": \"Extra charge\",\n \"inventory.complements.optionActive\": \"Active\",\n \"inventory.complements.optionPlaceholder\": \"E.g. With whipped cream\",\n \"inventory.complements.deleteOption\": \"Delete option\",\n \"inventory.complements.addOption\": \"Add option\",\n \"inventory.complements.save\": \"Save add-ons\",\n \"inventory.complements.saved\": \"Add-ons saved\",\n \"inventory.complements.saveFailed\": \"Could not save\",\n \"inventory.complements.review\": \"Review the add-ons\",\n \"inventory.complements.loadFailed\": \"Could not load the add-ons\",\n \"inventory.photoAi.title\": \"Generate photo with AI\",\n \"inventory.photoAi.product\": \"Product\",\n \"inventory.photoAi.category\": \"Category\",\n \"inventory.photoAi.usesSheet\": \"The recipe's ingredients go into the photo's description.\",\n \"inventory.photoAi.references\": \"Reference images (optional)\",\n \"inventory.photoAi.useCurrent\": \"Use the current photo as reference\",\n \"inventory.photoAi.add\": \"Add\",\n \"inventory.photoAi.instructionsPlaceholder\": \"E.g. wooden table, late-afternoon light, served on a white plate...\",\n \"inventory.photoAi.generate\": \"Generate photo\",\n \"inventory.photoAi.again\": \"Generate another\",\n \"inventory.photoAi.generating\": \"Generating the photo…\",\n \"inventory.photoAi.apply\": \"Apply photo\",\n \"inventory.photoAi.applied\": \"Photo applied to the product\",\n \"inventory.photoAi.failed\": \"Could not generate the photo\",\n \"inventory.sheet.quickTitle\": \"New ingredient\",\n \"inventory.sheet.quickHint\": \"Registers the product as an ingredient and puts it on this line.\",\n \"inventory.sheet.quickName\": \"Name\",\n \"inventory.sheet.quickUnit\": \"Stock unit\",\n \"inventory.sheet.quickUnitHint\": \"Base unit used in recipes, stock and sales (e.g. un, ml, g).\",\n \"inventory.sheet.quickNameRequired\": \"Enter the ingredient's name.\",\n \"inventory.sheet.quickUnitRequired\": \"Choose the unit the ingredient is counted in.\",\n \"inventory.sheet.quickCreate\": \"Create ingredient\",\n \"inventory.recipes.pickEmpty\": \"No sold or intermediate product found.\",\n \"inventory.recipes.kind.sale\": \"Sold\",\n \"inventory.recipes.kind.intermediate\": \"Intermediate\",\n \"inventory.recipes.kind.produced\": \"Produced\",\n \"inventory.recipes.kind.all\": \"All\",\n \"inventory.recipes.hasSheet\": \"Has recipe\",\n \"inventory.recipes.noSheetShort\": \"No recipe\",\n}\n","// inventory.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"inventory.nav.panel\": \"Painel\",\n \"inventory.panel.columnProduct\": \"Produto\",\n \"inventory.panel.columnLocation\": \"Local\",\n \"inventory.panel.columnBatch\": \"Lote\",\n \"inventory.panel.columnExpiry\": \"Validade\",\n \"inventory.panel.columnQuantity\": \"Qtd / mín.\",\n \"inventory.panel.columnValue\": \"Valor\",\n \"inventory.panel.empty\": \"Nenhuma posição de estoque para este recorte.\",\n \"inventory.panel.totalLines\": \"Linhas\",\n \"inventory.panel.totalValue\": \"Valor em estoque\",\n \"inventory.panel.unsupported\": \"Este aplicativo não expõe o painel de estoque.\",\n \"inventory.filters.stockState\": \"Status do estoque\",\n \"inventory.filters.health.negative\": \"Negativo\",\n \"inventory.filters.health.below_min\": \"Abaixo do mín.\",\n \"inventory.filters.health.zero\": \"Zerado\",\n \"inventory.filters.health.ok\": \"OK\",\n \"inventory.filters.expiry\": \"Validade\",\n \"inventory.filters.expiry.all\": \"Todas\",\n \"inventory.filters.expiry.expired\": \"Vencidos\",\n \"inventory.filters.expiry.le30\": \"Vence em 30 dias\",\n \"inventory.filters.expiry.le60\": \"Vence em 60 dias\",\n \"inventory.filters.expiry.le90\": \"Vence em 90 dias\",\n \"inventory.filters.expiry.none\": \"Sem validade\",\n \"inventory.filters.batchPlaceholder\": \"Lote\",\n \"inventory.filters.productPlaceholder\": \"Buscar produto...\",\n \"inventory.filters.countState\": \"Situação da contagem\",\n \"inventory.filters.countAll\": \"Todas\",\n \"inventory.filters.countPending\": \"A contar\",\n \"inventory.filters.countDone\": \"Contadas\",\n \"inventory.filters.itemSearchPlaceholder\": \"Buscar produto ou código...\",\n \"inventory.filters.title\": \"Filtros\",\n \"inventory.filters.apply\": \"Buscar\",\n \"inventory.filters.pending\": \"Filtros alterados\",\n \"inventory.filters.pendingHint\": \"A lista ainda mostra o recorte anterior. Clique em Buscar para aplicar.\",\n \"inventory.filters.clear\": \"Limpar\",\n \"inventory.filters.more\": \"Mais filtros\",\n \"inventory.filters.less\": \"Menos filtros\",\n \"inventory.filters.from\": \"De\",\n \"inventory.filters.to\": \"Até\",\n \"inventory.filters.allTypes\": \"Todos os tipos\",\n \"inventory.filters.location\": \"Local\",\n \"inventory.filters.allLocations\": \"Todos os locais\",\n \"inventory.filters.category\": \"Categoria\",\n \"inventory.filters.allCategories\": \"Todas as categorias\",\n \"inventory.filters.kind\": \"Tipo de item\",\n \"inventory.filters.allKinds\": \"Todos\",\n \"inventory.filters.status\": \"Situação\",\n \"inventory.filters.allStatuses\": \"Todas\",\n \"inventory.filters.channel\": \"Canal de venda\",\n \"inventory.filters.allChannels\": \"Todos os canais\",\n \"inventory.filters.channelSite\": \"Site (loja)\",\n \"inventory.filters.channelDelivery\": \"Delivery\",\n \"inventory.filters.channelPos\": \"PDV / balcão\",\n \"inventory.stock.pendingRetry\": \"A confirmação ainda está pendente. Não faça outro lançamento. Tente novamente com os mesmos dados antes de sair desta tela.\",\n \"inventory.stock.refreshAfterCommit\": \"Movimento registrado. Atualize a tela para consultar o saldo.\",\n \"inventory.dashboard.activeItems\": \"Itens ativos\",\n \"inventory.dashboard.belowMinimum\": \"Abaixo do mínimo\",\n \"inventory.dashboard.entries\": \"Entradas:\",\n \"inventory.dashboard.exits\": \"Saídas:\",\n \"inventory.dashboard.last7Days\": \"Últimos 7 dias\",\n \"inventory.dashboard.lowStock\": \"Estoque Baixo\",\n \"inventory.dashboard.needRestocking\": \"Precisam reposição\",\n \"inventory.dashboard.outOfStock\": \"Sem Estoque\",\n \"inventory.dashboard.quickActions\": \"Ações Rápidas\",\n \"inventory.dashboard.quickActionsDesc\": \"Use a barra lateral para registrar entradas, saídas ou gerenciar produtos.\",\n \"inventory.dashboard.recentActivity\": \"Atividade Recente\",\n \"inventory.dashboard.stockValue\": \"Valor do Estoque\",\n \"inventory.dashboard.totalProducts\": \"Total de Produtos\",\n \"inventory.dashboard.totalValue\": \"Valor total do estoque\",\n \"inventory.history.noMovements\": \"Nenhuma movimentação registrada\",\n \"inventory.history.columnDate\": \"Data\",\n \"inventory.history.columnProduct\": \"Produto\",\n \"inventory.history.columnType\": \"Tipo\",\n \"inventory.history.columnLocation\": \"Local\",\n \"inventory.history.columnQty\": \"Qtd\",\n \"inventory.history.columnTotal\": \"Total\",\n \"inventory.history.newEntry\": \"Nova entrada\",\n \"inventory.history.newExit\": \"Saída\",\n \"inventory.nav.recipes\": \"Fichas Técnicas\",\n \"inventory.entity.stockLocation\": \"Local de Estoque\",\n \"inventory.entity.stockLocation.plural\": \"Locais de Estoque\",\n \"inventory.entity.productCategory\": \"Categoria\",\n \"inventory.entity.productCategory.plural\": \"Categorias\",\n \"registry.suppliers\": \"Fornecedores\",\n \"registry.suppliers.description\": \"De quem você compra\",\n \"registry.product-categories\": \"Categorias\",\n \"registry.product-categories.description\": \"Como o catálogo é agrupado\",\n \"registry.stock-locations\": \"Locais de estoque\",\n \"registry.stock-locations.description\": \"Onde o estoque fica de fato — câmara fria, estoque seco, freezer\",\n \"registry.measurement-units\": \"Unidades de medida\",\n \"registry.measurement-units.description\": \"Como cada item é contado\",\n \"inventory.history.searchPlaceholder\": \"Buscar movimentações...\",\n \"inventory.history.subtitle\": \"Todas as movimentações de estoque\",\n \"inventory.history.title\": \"Histórico de Estoque\",\n \"inventory.nav.dashboard\": \"Resumo\",\n \"inventory.nav.entry\": \"Entrada\",\n \"inventory.nav.exit\": \"Saída\",\n \"inventory.nav.history\": \"Histórico\",\n \"inventory.nav.inventory\": \"Inventário\",\n \"inventory.nav.list\": \"Lista\",\n \"inventory.nav.new\": \"Novo\",\n \"inventory.nav.products\": \"Produtos\",\n \"inventory.nav.stock\": \"Movimentações\",\n \"inventory.page.newProduct\": \"Novo Produto\",\n \"inventory.page.newProductDesc\": \"Adicionar um produto ao seu catálogo\",\n \"inventory.page.settingsSubtitle\": \"Preferências, fornecedores, categorias e unidades\",\n \"inventory.page.settingsTitle\": \"Configurações de Estoque\",\n \"inventory.page.stockEntry\": \"Entrada de Estoque\",\n \"inventory.page.stockEntryDesc\": \"Registrar mercadorias recebidas\",\n \"inventory.page.stockExit\": \"Saída de Estoque\",\n \"inventory.page.stockExitDesc\": \"Registrar mercadorias usadas ou vendidas\",\n \"inventory.recipeDetail.active\": \"Ativa\",\n \"inventory.recipeDetail.backToList\": \"Voltar à lista\",\n \"inventory.recipeDetail.inactive\": \"Inativa\",\n \"inventory.recipeDetail.ingredientCount\": \"Ingredientes\",\n \"inventory.recipeDetail.ingredientsTitle\": \"Ingredientes\",\n \"inventory.recipeDetail.instructions\": \"Instruções\",\n \"inventory.recipeDetail.noIngredients\": \"Nenhum ingrediente definido\",\n \"inventory.recipeDetail.notFound\": \"Receita não encontrada\",\n \"inventory.recipeDetail.prepTime\": \"Tempo de preparo\",\n \"inventory.recipeDetail.produces\": \"Produz\",\n \"inventory.recipeDetail.recipes\": \"Receitas\",\n \"inventory.recipeDetail.yield\": \"Rendimento\",\n \"inventory.recipes.createFirst\": \"Crie sua primeira receita\",\n \"inventory.recipes.ingredients\": \"Ingredientes\",\n \"inventory.recipes.newRecipe\": \"Nova Ficha Técnica\",\n \"inventory.recipes.noRecipes\": \"Nenhum produto produzido ainda\",\n \"inventory.recipes.exporting\": \"Gerando a planilha das fichas…\",\n \"inventory.recipes.exported\": \"Planilha baixada\",\n \"inventory.sheet.print\": \"Imprimir\",\n \"inventory.sheet.printSaveFirst\": \"Salve a ficha antes de imprimir\",\n \"inventory.recipes.noCategory\": \"Sem categoria\",\n \"inventory.recipes.filterKind\": \"Tipo\",\n \"inventory.recipes.filterKindAll\": \"Todos os tipos\",\n \"inventory.recipes.kindSale\": \"Venda\",\n \"inventory.recipes.kindIntermediate\": \"Intermediário\",\n \"inventory.recipes.filterCategory\": \"Categoria\",\n \"inventory.recipes.filterCategoryAll\": \"Todas as categorias\",\n \"inventory.recipes.filterCmv\": \"CMV\",\n \"inventory.recipes.filterCmvAll\": \"Todo CMV\",\n \"inventory.recipes.cmvHigh\": \"CMV acima de {{pct}}%\",\n \"inventory.recipes.cmvGood\": \"CMV bom (abaixo de {{pct}}%)\",\n \"inventory.recipes.cmvAttention\": \"CMV atenção ({{from}}–{{to}}%)\",\n \"inventory.recipes.cmvNone\": \"Sem CMV\",\n \"inventory.recipes.produces\": \"Produz:\",\n \"inventory.recipes.productionFormulas\": \"{{count}} fórmulas de produção\",\n \"inventory.recipes.recipesDesc\": \"Receitas definem como produzir produtos a partir de ingredientes\",\n \"inventory.recipes.title\": \"Fichas Técnicas\",\n \"inventory.recipes.yield\": \"Rendimento\",\n \"inventory.stock.additionalDetails\": \"Detalhes adicionais (opcional)\",\n \"inventory.stock.adjustmentDesc\": \"Correção de contagem\",\n \"inventory.stock.adjustmentLabel\": \"Ajuste\",\n \"inventory.stock.back\": \"Voltar\",\n \"inventory.stock.batchNumber\": \"Número do Lote\",\n \"inventory.stock.currentStock\": \"Estoque Atual\",\n \"inventory.stock.destination\": \"Destino\",\n \"inventory.stock.document\": \"Documento\",\n \"inventory.stock.documentNumber\": \"Número do Documento\",\n \"inventory.stock.entry\": \"Entrada de Estoque\",\n \"inventory.stock.entryDesc\": \"Recebimento de mercadorias\",\n \"inventory.stock.entryLabel\": \"Entrada\",\n \"inventory.stock.exit\": \"Saída de Estoque\",\n \"inventory.stock.exitDesc\": \"Uso ou venda\",\n \"inventory.stock.exitLabel\": \"Saída\",\n \"inventory.stock.expirationDate\": \"Data de Validade\",\n \"inventory.stock.fromLocation\": \"Local de Origem\",\n \"inventory.stock.locationLabel\": \"Local\",\n \"inventory.stock.lossDesc\": \"Desperdício ou dano\",\n \"inventory.stock.lossLabel\": \"Perda\",\n \"inventory.stock.movement\": \"Movimentação de Estoque\",\n \"inventory.stock.movementDetails\": \"Detalhes da Movimentação\",\n \"inventory.stock.movementType\": \"Tipo de movimentação\",\n \"inventory.stock.next\": \"Próximo\",\n \"inventory.stock.notes\": \"Observações\",\n \"inventory.stock.product\": \"Produto\",\n \"inventory.stock.quantity\": \"Quantidade *\",\n \"inventory.stock.quantityLabel\": \"Quantidade\",\n \"inventory.stock.reason\": \"Motivo *\",\n \"inventory.stock.reasonLabel\": \"Motivo\",\n \"inventory.stock.recordMovement\": \"Registrar Movimentação\",\n \"inventory.stock.recorded\": \"Registrado\",\n \"inventory.stock.recording\": \"Registrando...\",\n \"inventory.stock.searchProduct\": \"Buscar por nome, SKU ou código de barras...\",\n \"inventory.stock.stepOf\": \"Etapa {{step}} de 3\",\n \"inventory.stock.supplier\": \"Fornecedor\",\n \"inventory.stock.toLocation\": \"Local de Destino *\",\n \"inventory.stock.total\": \"Total\",\n \"inventory.stock.totalCost\": \"Custo Total\",\n \"inventory.stock.transferDesc\": \"Entre locais\",\n \"inventory.stock.transferLabel\": \"Transferência\",\n \"inventory.stock.unitCost\": \"Custo Unitário\",\n \"inventory.stock.unitCostLabel\": \"Custo Unitário\",\n \"inventory.stock.searchSupplier\": \"Buscar fornecedor...\",\n \"inventory.stock.noSuppliers\": \"Nenhum fornecedor cadastrado\",\n \"inventory.productDetail.stockTab\": \"Estoque\",\n \"inventory.productDetail.positionsTitle\": \"Estoque por local\",\n \"inventory.productDetail.onHand\": \"Em estoque\",\n \"inventory.productDetail.minimum\": \"Mínimo\",\n \"inventory.productDetail.noPositions\": \"Sem estoque em nenhum local\",\n \"inventory.productDetail.historyTitle\": \"Movimentação\",\n \"inventory.productDetail.undoLast\": \"Desfazer último movimento\",\n \"inventory.productDetail.undoTitle\": \"Desfazer o último movimento?\",\n \"inventory.productDetail.undoDescription\": \"{{type}} de {{quantity}} em {{date}} sai do histórico, e o estoque que ele moveu volta.\",\n \"inventory.productDetail.undoConfirm\": \"Desfazer\",\n \"inventory.productDetail.undone\": \"Movimento desfeito\",\n \"inventory.productDetail.undoFailed\": \"Não foi possível desfazer o movimento\",\n \"inventory.productDetail.notFound\": \"Produto não encontrado\",\n \"inventory.productDetail.backToList\": \"Voltar para produtos\",\n \"inventory.onboarding.welcome\": \"Bem-vindo ao Estoque\",\n \"inventory.onboarding.description\": \"Acompanhe produtos, gerencie níveis de estoque e monitore movimentações do seu negócio.\",\n \"inventory.onboarding.skip\": \"Pular configuração\",\n \"inventory.onboarding.getStarted\": \"Começar\",\n \"inventory.onboarding.units.title\": \"Unidades de Medida\",\n \"inventory.onboarding.units.description\": \"Unidades padrão (Unidade, Caixa, Kg, L, etc.) estão prontas. Personalize-as a qualquer momento em Configurações.\",\n \"inventory.onboarding.locations.title\": \"Locais de Estoque\",\n \"inventory.onboarding.locations.description\": \"Um local de armazenamento padrão foi criado. Adicione mais para controle multi-local.\",\n \"inventory.onboarding.start\": \"Começar a usar Estoque\",\n \"inventory.onboarding.preparing\": \"Preparando estoque...\",\n \"inventory.onboarding.setupError\": \"Não foi possível preparar as unidades e o local padrão. Tente novamente.\",\n \"inventory.quickActions.newProduct\": \"Novo Produto\",\n \"inventory.quickActions.newProductDesc\": \"Adicionar um produto ao catálogo\",\n \"inventory.quickActions.stockEntry\": \"Entrada de Estoque\",\n \"inventory.quickActions.stockEntryDesc\": \"Registrar mercadorias recebidas\",\n \"inventory.quickActions.stockExit\": \"Saída de Estoque\",\n \"inventory.quickActions.stockExitDesc\": \"Registrar mercadorias usadas ou vendidas\",\n \"inventory.settingsPage.title\": \"Configurações de Estoque\",\n \"inventory.settingsPage.subtitle\": \"Gerenciar unidades, categorias e locais de estoque\",\n \"inventory.settings.modules\": \"Módulos\",\n \"inventory.settings.modulesDesc\": \"O que desta casa aparece no Estoque\",\n \"inventory.settings.recipes\": \"Receitas\",\n \"inventory.settings.recipesDesc\": \"A ficha técnica que diz quanto cada produto consome\",\n \"inventory.settings.requisitions\": \"Requisições\",\n \"inventory.settings.requisitionsDesc\": \"Pedidos internos de material entre setores\",\n \"inventory.settings.usageAuditDesc\": \"O que saiu do estoque contra o que foi vendido\",\n \"inventory.settings.temperature\": \"Temperatura\",\n \"inventory.settings.temperatureDesc\": \"Registro de temperatura dos locais refrigerados\",\n \"inventory.settings.stockManagement\": \"Gestão de Estoque\",\n \"inventory.settings.stockManagementDesc\": \"Como os níveis de estoque são rastreados\",\n \"inventory.settings.lowStockAlerts\": \"Alertas de estoque baixo\",\n \"inventory.settings.lowStockAlertsDesc\": \"Mostrar avisos quando produtos ficarem abaixo da quantidade mínima\",\n \"inventory.settings.requireReason\": \"Exigir motivo para ajustes\",\n \"inventory.settings.requireReasonDesc\": \"Tornar obrigatório o motivo para ajustes e perdas de estoque\",\n \"inventory.settings.autoDeduct\": \"Auto-deduzir no serviço\",\n \"inventory.settings.autoDeductDesc\": \"Deduzir automaticamente produtos quando um serviço é executado\",\n \"inventory.settings.products\": \"Produtos\",\n \"inventory.settings.productsDesc\": \"Comportamento do catálogo de produtos\",\n \"inventory.settings.requireSku\": \"Exigir SKU\",\n \"inventory.settings.requireSkuDesc\": \"Tornar SKU obrigatório ao criar produtos\",\n \"inventory.settings.allowNegative\": \"Permitir estoque negativo\",\n \"inventory.settings.allowNegativeDesc\": \"Permitir que quantidades de estoque fiquem abaixo de zero\",\n \"inventory.settings.notifications\": \"Notificações\",\n \"inventory.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"inventory.settings.lowStockEmail\": \"Alertas de estoque baixo por e-mail\",\n \"inventory.settings.lowStockEmailDesc\": \"Enviar e-mail quando produtos atingirem a quantidade mínima\",\n \"inventory.settings.expiryWarnings\": \"Avisos de validade\",\n \"inventory.settings.expiryWarningsDesc\": \"Alertar antes de produtos vencerem (rastreamento de lotes)\",\n // As fichas do produto — portadas do cadastro do V1 (as abas por tipo).\n \"inventory.productForm.commissionPercent\": \"% Comissão (venda)\",\n \"inventory.productForm.commissionPercentHint\": \"Quanto o profissional ganha ao vender este produto.\",\n \"inventory.productForm.chartAccount\": \"Plano de Contas\",\n \"inventory.productForm.avgPurchasePrice\": \"Preço médio de compra\",\n \"inventory.productForm.avgPurchasePriceHint\": \"Atualizado a cada entrada de estoque.\",\n \"inventory.productForm.packaging\": \"Embalagem e Conversões\",\n \"inventory.productForm.packagingDesc\": \"Como a casa compra, quando é diferente de como ela conta.\",\n \"inventory.productForm.contentPerUnit\": \"Conteúdo por Unidade\",\n \"inventory.productForm.contentPerUnitHint\": \"Quanto cabe em UMA unidade de estoque (um frasco contém 300 ml).\",\n \"inventory.productForm.contentUnit\": \"Unidade de Conteúdo\",\n \"inventory.productForm.purchaseUnit\": \"Unidade de Compra\",\n \"inventory.productForm.conversionFactor\": \"Quantidade por Embalagem\",\n \"inventory.productForm.conversionFactorHint\": \"Quantas unidades de estoque vêm em uma unidade de compra.\",\n \"inventory.productForm.flagIngredient\": \"Insumo\",\n \"inventory.productForm.flagIngredientHint\": \"Aparece nas fichas técnicas.\",\n \"inventory.productForm.flagForSale\": \"Venda\",\n \"inventory.productForm.flagForSaleHint\": \"Cardápio, PDV, catálogo.\",\n \"inventory.productForm.flagIntermediate\": \"Intermediário\",\n \"inventory.productForm.flagIntermediateHint\": \"Produzido para consumir depois (molho, massa).\",\n \"inventory.productForm.flagAsset\": \"Patrimônio\",\n \"inventory.productForm.flagAssetHint\": \"Equipamento: entra no balanço, não se consome.\",\n \"inventory.productForm.flagProduced\": \"Produto produzido\",\n \"inventory.productForm.flagProducedHint\": \"Nasce de uma receita — habilita a ficha técnica.\",\n \"inventory.productForm.flagResale\": \"Revenda\",\n \"inventory.productForm.flagResaleHint\": \"Mercadoria destinada à revenda ao cliente.\",\n \"inventory.productForm.flagTracked\": \"Alto custo / etiquetado\",\n \"inventory.productForm.flagTrackedHint\": \"Cada unidade é acompanhada individualmente.\",\n \"inventory.productForm.professionalResalePrice\": \"Preço de revenda profissional\",\n \"inventory.productForm.professionalResalePriceHint\": \"Preço cobrado quando o profissional revende ao cliente final.\",\n \"inventory.productForm.requireBatch\": \"Exigir lote na entrada\",\n \"inventory.productForm.requireBatchHint\": \"Bloqueia entrada de estoque sem número de lote.\",\n \"inventory.productForm.requireExpiry\": \"Exigir validade na entrada\",\n \"inventory.productForm.requireExpiryHint\": \"Bloqueia entrada de estoque sem data de validade.\",\n \"inventory.productForm.notes\": \"Observações\",\n \"inventory.productForm.ingredientSection\": \"Insumo\",\n \"inventory.productForm.ingredientSectionDesc\": \"O que a compra precisa saber para repor na hora certa.\",\n \"inventory.productForm.ingReorderPoint\": \"Ponto de reposição\",\n \"inventory.productForm.ingReorderPointHint\": \"Fica ACIMA do mínimo: é o aviso que ainda chega a tempo de comprar.\",\n \"inventory.productForm.ingLeadTime\": \"Prazo de entrega (dias)\",\n \"inventory.productForm.ingShelfLife\": \"Validade (dias)\",\n \"inventory.productForm.ingStorageTemp\": \"Temperatura de armazenamento\",\n \"inventory.productForm.saleSection\": \"Venda\",\n \"inventory.productForm.saleSectionDesc\": \"O que o cardápio e o balcão mostram ao cliente.\",\n \"inventory.productForm.salePrepTime\": \"Tempo de preparo (min)\",\n \"inventory.productForm.saleServes\": \"Serve (pessoas)\",\n \"inventory.productForm.saleCalories\": \"Calorias (kcal)\",\n \"inventory.productForm.saleMenuDescription\": \"Descrição no cardápio\",\n \"inventory.productForm.saleAllergens\": \"Alergênicos\",\n \"inventory.productForm.saleAllergensPlaceholder\": \"Contém glúten, lactose\",\n \"inventory.productForm.saleSoldByWeight\": \"Vendido por peso\",\n \"inventory.productForm.saleHighlightDelivery\": \"Destacar no delivery\",\n \"inventory.productForm.saleAvailableDelivery\": \"Disponível no delivery\",\n \"inventory.productForm.saleAvailableCounter\": \"Disponível no balcão\",\n \"inventory.productForm.saleChannelsSection\": \"Preços por canal\",\n \"inventory.productForm.saleChannelsSectionDesc\": \"Deixe vazio o canal que usa o preço de venda base.\",\n \"inventory.productForm.intermediateSection\": \"Intermediário\",\n \"inventory.productForm.intermediateSectionDesc\": \"O que a produção precisa saber para preparar o lote.\",\n \"inventory.productForm.intYield\": \"Rendimento (%)\",\n \"inventory.productForm.intPrepTime\": \"Tempo de preparo (min)\",\n \"inventory.productForm.intShelfLifeHours\": \"Validade após preparo (h)\",\n \"inventory.productForm.intBatchSize\": \"Tamanho do lote\",\n \"inventory.productForm.intBatchUnit\": \"Unidade do lote\",\n \"inventory.productForm.intStorage\": \"Instruções de armazenamento\",\n \"inventory.productForm.assetSection\": \"Patrimônio\",\n \"inventory.productForm.assetSectionDesc\": \"O equipamento que a casa possui, e quem responde por ele.\",\n \"inventory.productForm.assetValue\": \"Valor do ativo\",\n \"inventory.productForm.assetResidualValue\": \"Valor residual\",\n \"inventory.productForm.assetUsefulLife\": \"Vida útil (meses)\",\n \"inventory.productForm.assetDepreciation\": \"Depreciação anual (%)\",\n \"inventory.productForm.assetSerial\": \"Número de série\",\n \"inventory.productForm.assetAcquisition\": \"Data de aquisição\",\n \"inventory.productForm.assetWarranty\": \"Garantia até\",\n \"inventory.productForm.assetStatus\": \"Situação\",\n \"inventory.productForm.assetLocation\": \"Localização\",\n \"inventory.productForm.assetLocationPlaceholder\": \"Sala 2, prateleira B\",\n \"inventory.productForm.assetResponsible\": \"Responsável\",\n \"inventory.productForm.assetInsurance\": \"Apólice de seguro\",\n \"inventory.productForm.assetLastMaintenance\": \"Última manutenção\",\n \"inventory.productForm.assetNextMaintenance\": \"Próxima manutenção\",\n \"inventory.productForm.taxSection\": \"Fiscal\",\n \"inventory.productForm.taxSectionDesc\": \"O que a nota precisa dizer sobre este produto. Em branco vale o que o grupo fiscal diz.\",\n \"inventory.productForm.taxGroup\": \"Grupo fiscal\",\n \"inventory.productForm.taxGroupHint\": \"Cadastre em Estoque › Notas Fiscais › Grupos Fiscais.\",\n \"inventory.productForm.ncmHint\": \"Classificação do produto na nota. É do produto, nunca do grupo.\",\n \"inventory.productForm.icmsOrigin\": \"ICMS de origem\",\n \"inventory.productForm.icmsRate\": \"Alíquota ICMS (%)\",\n \"inventory.productForm.cstHint\": \"CST tem 2 dígitos. CSOSN tem 3 e se configura no grupo fiscal, para o Simples Nacional.\",\n \"inventory.productForm.pisRate\": \"Alíquota PIS (%)\",\n \"inventory.productForm.cofinsRate\": \"Alíquota COFINS (%)\",\n \"inventory.productForm.baseCalcMode\": \"Modalidade de base de cálculo\",\n \"inventory.productForm.benefitCode\": \"Código de benefícios fiscais (cBenef)\",\n \"inventory.productForm.povertyFund\": \"Fundo de combate à pobreza (%)\",\n \"inventory.productForm.ibsCbsSituation\": \"IBS e CBS — situação tributária\",\n \"inventory.productForm.ibsCbsClassification\": \"IBS e CBS — classificação tributária\",\n \"inventory.productForm.classificationRequired\": \"Escolha ao menos uma classificação para o produto.\",\n \"inventory.productType.ingredient\": \"Insumo\",\n \"inventory.productType.sale\": \"Venda\",\n \"inventory.productType.intermediate\": \"Intermediário\",\n \"inventory.productType.asset\": \"Patrimônio\",\n \"inventory.variants.tab\": \"Variações\",\n \"inventory.variants.name\": \"Variação\",\n \"inventory.variants.namePlaceholder\": \"Ex.: M, G, GG, Azul\",\n \"inventory.variants.sku\": \"SKU\",\n \"inventory.variants.skuPlaceholder\": \"Opcional\",\n \"inventory.variants.default\": \"Padrão\",\n \"inventory.variants.empty\": \"Nenhuma variação. O produto é vendido e estocado como um item só.\",\n \"inventory.variants.duplicate\": \"Já existe uma variação com esse nome.\",\n \"inventory.variants.loadFailed\": \"Não foi possível carregar as variações.\",\n \"inventory.variants.saveFailed\": \"Não foi possível salvar a variação.\",\n \"inventory.variants.unavailable\": \"Variações não estão disponíveis nesta conta.\",\n \"inventory.variants.onHand\": \"{{count}} em estoque\",\n \"inventory.barcodes.tab\": \"Códigos de Barras\",\n \"inventory.barcodes.code\": \"Código de barras\",\n \"inventory.barcodes.codePlaceholder\": \"Digite ou bipe\",\n \"inventory.barcodes.type\": \"Tipo\",\n \"inventory.barcodes.description\": \"Descrição\",\n \"inventory.barcodes.descriptionPlaceholder\": \"Embalagem 500 ml\",\n \"inventory.barcodes.needCode\": \"Digite ou bipe um código.\",\n \"inventory.barcodes.empty\": \"Nenhum código de barras cadastrado.\",\n \"inventory.barcodes.duplicate\": \"Este código já está em uso.\",\n \"inventory.barcodes.isPrimary\": \"Principal — é o que a etiqueta imprime\",\n \"inventory.barcodes.makePrimary\": \"Tornar principal\",\n \"inventory.barcodes.removeTitle\": \"Remover este código de barras?\",\n \"inventory.barcodes.unavailable\": \"Códigos de barras indisponíveis neste ambiente.\",\n \"inventory.productRecipe.tab\": \"Ficha Técnica\",\n \"inventory.productRecipe.none\": \"Este produto ainda não tem ficha técnica.\",\n \"inventory.productRecipe.noneHint\": \"A ficha técnica diz de que o produto é feito — é dela que saem o custo e o CMV.\",\n \"inventory.productRecipe.goToRecipes\": \"Ir para Receitas\",\n \"inventory.productForm.classificationUnset\": \"Sem classificação\",\n \"inventory.productForm.stepIdentity\": \"Identificação\",\n \"inventory.productForm.stepClassification\": \"Classificação\",\n \"inventory.productForm.stepPricing\": \"Preço\",\n \"inventory.productForm.stepStock\": \"Estoque\",\n \"inventory.productForm.stepInitialEntry\": \"Entrada inicial\",\n \"inventory.productForm.initialEntrySection\": \"Dar entrada no estoque\",\n \"inventory.productForm.initialEntrySectionDesc\": \"Opcional: registre o que já está na prateleira. Deixe em branco para dar entrada depois.\",\n \"inventory.productForm.initialQuantity\": \"Quantidade em estoque\",\n \"inventory.productForm.initialLocation\": \"Local\",\n \"inventory.productForm.initialLocationHint\": \"Em branco usa o local padrão do produto.\",\n \"inventory.productForm.initialUnitCost\": \"Custo unitário\",\n \"inventory.productForm.initialUnitCostHint\": \"Em branco usa o custo do produto.\",\n \"inventory.productForm.initialBatch\": \"Lote\",\n \"inventory.productForm.initialExpiry\": \"Validade\",\n \"inventory.productForm.initialEntryFailed\": \"Produto criado, mas a entrada de estoque não foi registrada. Dê entrada pela aba Estoque.\",\n \"inventory.productForm.newProduct\": \"Novo Produto\",\n \"inventory.productForm.editProduct\": \"Editar Produto\",\n \"inventory.productForm.updateDetails\": \"Atualizar detalhes do produto\",\n \"inventory.productForm.addToCatalog\": \"Adicionar um produto ao seu catálogo\",\n \"inventory.productForm.cancel\": \"Cancelar\",\n \"inventory.productForm.save\": \"Salvar\",\n \"inventory.productForm.saving\": \"Salvando...\",\n \"inventory.productForm.generalInfo\": \"Informações Gerais\",\n \"inventory.productForm.name\": \"Nome\",\n \"inventory.productForm.namePlaceholder\": \"Nome do produto\",\n \"inventory.productForm.brand\": \"Marca\",\n \"inventory.productForm.brandPlaceholder\": \"Nome da marca\",\n \"inventory.productForm.sku\": \"SKU\",\n \"inventory.productForm.skuPlaceholder\": \"Código interno\",\n \"inventory.productForm.barcode\": \"Código de Barras\",\n \"inventory.productForm.barcodePlaceholder\": \"EAN / UPC\",\n \"inventory.productForm.description\": \"Descrição\",\n \"inventory.productForm.descriptionPlaceholder\": \"Informações adicionais sobre o produto\",\n \"inventory.productForm.classification\": \"Classificação\",\n \"inventory.productForm.classificationDesc\": \"Como este produto é usado no seu negócio\",\n \"inventory.productForm.typeIngredient\": \"Matéria-prima usada na produção ou serviços\",\n \"inventory.productForm.typeSale\": \"Vendido diretamente aos clientes\",\n \"inventory.productForm.typeIntermediate\": \"Produzido internamente a partir de outros itens\",\n \"inventory.productForm.typeAsset\": \"Ativo fixo para controle patrimonial\",\n \"inventory.productForm.pricing\": \"Preços\",\n \"inventory.productForm.costPrice\": \"Preço de Custo\",\n \"inventory.productForm.salePrice\": \"Preço de Venda\",\n \"inventory.productForm.margin\": \"Margem\",\n \"inventory.productForm.stockLevels\": \"Níveis de Estoque\",\n \"inventory.productForm.stockLevelsDesc\": \"Limites mínimo e máximo para alertas\",\n \"inventory.productForm.minQuantity\": \"Quantidade Mínima\",\n \"inventory.productForm.minQuantityHint\": \"Alertar quando o estoque ficar abaixo deste valor\",\n \"inventory.productForm.maxQuantity\": \"Quantidade Máxima\",\n \"inventory.productForm.maxQuantityHint\": \"Capacidade máxima para este produto\",\n \"inventory.productForm.optional\": \"Opcional\",\n \"inventory.productForm.organization\": \"Organização\",\n \"inventory.productForm.organizationDesc\": \"Categoria, unidade, fornecedor e local padrão de estoque\",\n \"inventory.productForm.category\": \"Categoria\",\n \"inventory.productForm.measurementUnit\": \"Unidade de medida\",\n \"inventory.productForm.measurementUnitHint\": \"Como este item é contado no estoque\",\n \"inventory.productForm.supplier\": \"Fornecedor padrão\",\n \"inventory.productForm.defaultLocation\": \"Local padrão\",\n \"inventory.movementType.entry\": \"Entrada\",\n \"inventory.movementType.exit\": \"Saída\",\n \"inventory.movementType.adjustment\": \"Ajuste\",\n \"inventory.movementType.transfer\": \"Transferência\",\n \"inventory.movementType.loss\": \"Perda\",\n \"inventory.recipeForm.group\": \"Etapa\",\n \"inventory.recipeForm.ungrouped\": \"Sem etapa\",\n \"inventory.productList.bulkActivate\": \"Ativar\",\n \"inventory.productList.bulkActivated\": \"{{count}} produto(s) ativado(s)\",\n \"inventory.productList.bulkDeactivate\": \"Desativar\",\n \"inventory.productList.bulkDeactivated\": \"{{count}} produto(s) desativado(s)\",\n \"inventory.productList.bulkFailed\": \"{{count}} produto(s) não puderam ser atualizados\",\n \"inventory.productList.bulkNothingToDo\": \"Os produtos selecionados já estão nesse estado.\",\n \"inventory.productList.filterActive\": \"Ativos\",\n \"inventory.productList.filterAllStatuses\": \"Ativos e inativos\",\n \"inventory.productList.filterInactive\": \"Inativos\",\n \"inventory.productList.filterStatus\": \"Situação\",\n \"inventory.productList.inactive\": \"Inativo\",\n \"inventory.productList.title\": \"Produtos\",\n \"inventory.productList.subtitle\": \"{{count}} produtos\",\n \"inventory.productList.product\": \"Produto\",\n \"inventory.productList.type\": \"Tipo\",\n \"inventory.productList.stock\": \"Estoque\",\n \"inventory.productList.cost\": \"Custo\",\n \"inventory.productList.value\": \"Valor\",\n \"inventory.productList.searchPlaceholder\": \"Buscar produtos...\",\n 'inventory.productList.aiHint': 'Descreva o produto e eu cadastro.',\n 'inventory.productList.askPlaceholder': 'Descreva o produto…',\n 'inventory.productList.askPersona': 'Cadastro de produtos',\n 'inventory.productList.askPitch': 'Diga o produto que você quer cadastrar.',\n 'inventory.productList.askDescription': 'Nome, preço, custo, SKU, tipo — diga o que souber, do jeito que falar, e eu preencho o resto com o que faz sentido. Você confere antes de salvar.',\n 'inventory.productList.askSuggestion.0': 'Camiseta preta P/M/G, R$ 79, custo R$ 28',\n 'inventory.productList.askSuggestion.1': 'Cadastre 5 produtos de exemplo para eu testar a loja',\n 'inventory.productList.askSuggestion.2': 'Um combo com os dois itens mais vendidos',\n \"inventory.productList.newProduct\": \"Novo Produto\",\n \"inventory.productList.empty\": \"Nenhum produto ainda\",\n \"inventory.productList.createFirst\": \"Crie seu primeiro produto\",\n \"inventory.stock.unknownProduct\": \"Produto Desconhecido\",\n \"inventory.stock.reasonLossPlaceholder\": \"ex. Vencido, danificado\",\n \"inventory.stock.reasonAdjustPlaceholder\": \"ex. Correção de contagem física\",\n \"inventory.stock.documentPlaceholder\": \"Nota fiscal, recibo, PO...\",\n \"inventory.stock.batchPlaceholder\": \"ex. LOT001\",\n \"inventory.stock.notesPlaceholder\": \"Observações adicionais...\",\n \"inventory.recipeDetail.loading\": \"Carregando...\",\n \"inventory.recipeDetail.ingredient\": \"Ingrediente\",\n \"inventory.recipeDetail.quantity\": \"Quantidade\",\n \"inventory.recipeDetail.unit\": \"Unidade\",\n \"inventory.recipeDetail.notes\": \"Observações\",\n \"inventory.recipeDetail.created\": \"Criado\",\n \"inventory.recipeDetail.updated\": \"Atualizado\",\n \"inventory.recipeForm.newRecipe\": \"Nova Receita\",\n \"inventory.recipeForm.subtitle\": \"Definir uma fórmula de produção\",\n \"inventory.recipeForm.cancel\": \"Cancelar\",\n \"inventory.recipeForm.saveRecipe\": \"Salvar Receita\",\n \"inventory.recipeForm.saving\": \"Salvando...\",\n \"inventory.recipeForm.recipeDetails\": \"Detalhes da Receita\",\n \"inventory.recipeForm.recipeName\": \"Nome da Receita\",\n \"inventory.recipeForm.recipeNamePlaceholder\": \"ex. Molho de Tomate\",\n \"inventory.recipeForm.description\": \"Descrição\",\n \"inventory.recipeForm.descriptionPlaceholder\": \"Breve descrição...\",\n \"inventory.recipeForm.produces\": \"Produz (Produto)\",\n \"inventory.recipeForm.searchProduct\": \"Buscar produto...\",\n \"inventory.recipeForm.createProduct\": \"Criar produto\",\n \"inventory.recipeForm.yieldQuantity\": \"Quantidade de Rendimento\",\n \"inventory.recipeForm.prepTime\": \"Tempo de Preparo (min)\",\n \"inventory.recipeForm.instructions\": \"Instruções\",\n \"inventory.recipeForm.instructionsPlaceholder\": \"Instruções de preparo passo a passo...\",\n \"inventory.recipeForm.ingredients\": \"Ingredientes\",\n \"inventory.recipeForm.addIngredient\": \"Adicionar Ingrediente\",\n \"inventory.recipeForm.noIngredients\": \"Nenhum ingrediente adicionado\",\n \"inventory.recipeForm.addFirstIngredient\": \"Adicione seu primeiro ingrediente\",\n \"inventory.recipeForm.ingredient\": \"Ingrediente\",\n \"inventory.recipeForm.quantity\": \"Quantidade\",\n \"inventory.recipeForm.notes\": \"Observações\",\n \"inventory.recipeForm.searchIngredient\": \"Buscar ingrediente...\",\n \"inventory.recipeForm.createIngredient\": \"Criar ingrediente\",\n \"inventory.recipeForm.notesPlaceholder\": \"ex. picado, fresco\",\n \"inventory.recipeForm.ingredientsConfigured\": \"{{configured}} de {{total}} ingredientes configurados\",\n \"inventory.title\": \"Estoque\",\n \"inventory.stock.title\": \"Estoque\",\n \"inventory.stock.minStock\": \"Estoque Mín.\",\n \"inventory.stock.adjust\": \"Ajustar Estoque\",\n \"inventory.stock.lowStock\": \"Estoque Baixo\",\n \"inventory.products.title\": \"Produtos\",\n \"inventory.products.create\": \"Novo Produto\",\n \"inventory.recipes.create\": \"Nova Receita\",\n \"inventory.recipes.addIngredient\": \"Adicionar Ingrediente\",\n \"inventory.recipes.cost\": \"Custo\",\n \"inventory.recipes.loading\": \"Carregando...\",\n \"inventory.suppliers.title\": \"Fornecedores\",\n \"inventory.suppliers.create\": \"Novo Fornecedor\",\n \"inventory.movements.title\": \"Movimentações\",\n \"inventory.movements.in\": \"Entrada\",\n \"inventory.movements.out\": \"Saída\",\n \"inventory.settings.title\": \"Configurações de Estoque\",\n\n \"inventory.recipeDetail.cost\": \"Custo\",\n \"inventory.recipeDetail.unitCost\": \"Custo unitário\",\n \"inventory.recipeDetail.totalCost\": \"Custo da ficha\",\n \"inventory.recipeDetail.costPerYield\": \"Custo por unidade produzida\",\n \"inventory.recipeDetail.salePrice\": \"Preço de venda\",\n \"inventory.recipeDetail.cmv\": \"CMV\",\n \"inventory.recipeDetail.cmvUnknown\": \"Sem preço de venda\",\n \"inventory.recipeDetail.cmvHigh\": \"Acima de {{threshold}}% — este prato está comendo a margem.\",\n\n \"inventory.recipeGaps.title\": \"Falta ligar ao seu catálogo\",\n \"inventory.recipeGaps.description\": \"A assistente sugeriu estes itens mas não achou equivalente. Escolha o insumo certo ou cadastre.\",\n \"inventory.recipeGaps.produces\": \"Produz:\",\n \"inventory.recipeGaps.unnamed\": \"Ingrediente sem nome\",\n \"inventory.recipeGaps.linkFailed\": \"Não foi possível ligar este item\",\n \"inventory.recipeGaps.createFailed\": \"Não foi possível cadastrar o produto\",\n\n \"inventory.recipes.entity\": \"Ficha técnica\",\n \"inventory.recipes.colProduct\": \"Produto\",\n \"inventory.recipes.colIngredients\": \"Insumos\",\n \"inventory.recipes.colYield\": \"Rendimento\",\n \"inventory.recipes.colPrep\": \"Preparo\",\n \"inventory.recipes.colCost\": \"Custo\",\n \"inventory.recipes.colSale\": \"Venda\",\n \"inventory.recipes.colCmv\": \"CMV\",\n \"inventory.recipes.noSheet\": \"Sem ficha técnica\",\n \"inventory.recipes.searchPlaceholder\": \"Buscar receita...\",\n \"inventory.recipes.newByHand\": \"Preencher à mão\",\n \"inventory.recipes.newByHandHint\": \"Abrir o formulário e lançar os insumos você mesmo\",\n \"inventory.recipes.aiHint\": \"Descreva o prato e receba a ficha montada com os seus insumos\",\n \"inventory.recipes.askPlaceholder\": \"ex. ficha técnica do cupim defumado com queijo, 400g, serve 3\",\n \"inventory.recipes.askPersona\": \"Fichas técnicas\",\n \"inventory.recipes.askPitch\": \"Vamos custear o seu cardápio\",\n \"inventory.recipes.askDescription\": \"Descreva o prato que eu monto a ficha com os insumos que você já tem, com custo e CMV.\",\n \"inventory.recipes.askSuggestion.0\": \"Monte a ficha técnica do cupim defumado com queijo\",\n \"inventory.recipes.askSuggestion.1\": \"Quais itens do cardápio ainda não têm ficha técnica?\",\n \"inventory.recipes.askSuggestion.2\": \"Quais pratos estão acima de 35% de CMV?\",\n \"inventory.recipes.loadFailed\": \"Não foi possível carregar as fichas técnicas\",\n \"inventory.recipes.retry\": \"Tentar novamente\",\n \"inventory.recipeDetail.loadFailed\": \"Não foi possível carregar esta ficha técnica\",\n \"inventory.recipeDetail.retry\": \"Tentar novamente\",\n\n \"inventory.nav.counts\": \"Contagens\",\n \"inventory.counts.title\": \"Contagens de estoque\",\n \"inventory.counts.entity\": \"Contagem\",\n \"inventory.counts.colReference\": \"Contagem\",\n \"inventory.counts.colOpened\": \"Aberta em\",\n \"inventory.counts.colStatus\": \"Situação\",\n \"inventory.counts.colProgress\": \"Contados\",\n \"inventory.counts.colDivergent\": \"Divergências\",\n \"inventory.counts.status.open\": \"Aberta\",\n \"inventory.counts.status.counting\": \"Contando\",\n \"inventory.counts.status.closed\": \"Fechada\",\n \"inventory.counts.status.cancelled\": \"Cancelada\",\n \"inventory.counts.progress\": \"{{counted}} de {{total}}\",\n \"inventory.counts.newCount\": \"Nova contagem\",\n \"inventory.counts.searchPlaceholder\": \"Buscar contagem...\",\n \"inventory.counts.empty\": \"Nenhuma contagem ainda\",\n \"inventory.counts.formTitle\": \"Abrir uma contagem\",\n \"inventory.counts.formSubtitle\": \"O que o sistema acredita é congelado na hora em que você abre — a variação fala da prateleira, não do relógio.\",\n \"inventory.counts.location\": \"Local de estoque\",\n \"inventory.counts.pickLocation\": \"Escolha um local\",\n \"inventory.counts.category\": \"Categoria\",\n \"inventory.counts.allCategories\": \"Todas as categorias\",\n \"inventory.counts.reference\": \"Nome\",\n \"inventory.counts.referencePlaceholder\": \"ex. Câmara fria, fim de agosto\",\n \"inventory.counts.blind\": \"Contagem cega\",\n \"inventory.counts.blindHint\": \"Esconde a quantidade do sistema enquanto você conta, para escrever o que está na prateleira em vez de confirmar o que está na tela.\",\n \"inventory.counts.blindLine\": \"Cega — quantidade do sistema oculta\",\n \"inventory.counts.notes\": \"Observações\",\n \"inventory.counts.notesPlaceholder\": \"O que a próxima pessoa precisa saber\",\n \"inventory.counts.open\": \"Abrir a contagem\",\n \"inventory.counts.opening\": \"Abrindo...\",\n \"inventory.counts.openFailed\": \"Não foi possível abrir a contagem\",\n \"inventory.counts.cancel\": \"Cancelar\",\n \"inventory.counts.notFound\": \"Contagem não encontrada\",\n \"inventory.counts.noItems\": \"Esta contagem não tem produtos\",\n \"inventory.counts.systemQty\": \"Sistema:\",\n \"inventory.counts.notCounted\": \"Não contado\",\n \"inventory.counts.counted\": \"Contados\",\n \"inventory.counts.divergent\": \"Divergências\",\n \"inventory.counts.varianceValue\": \"Variação\",\n \"inventory.counts.saveFailed\": \"Não foi possível salvar esta linha\",\n \"inventory.counts.close\": \"Fechar a contagem\",\n \"inventory.counts.closeTitle\": \"Fechar a contagem?\",\n \"inventory.counts.closeDescription\": \"{{divergent}} linha(s) divergem do sistema e vão receber um ajuste.\",\n \"inventory.counts.incomplete\": \"Finalize a contagem antes de fechar\",\n \"inventory.counts.incompleteDescription\": \"Ainda existem {{count}} linha(s) em branco. Informe zero quando o item acabou fisicamente.\",\n \"inventory.counts.closeConfirm\": \"Fechar e ajustar\",\n \"inventory.counts.closed\": \"Contagem fechada — {{count}} ajuste(s) lançado(s)\",\n \"inventory.counts.alreadyClosed\": \"Esta contagem já estava fechada\",\n \"inventory.counts.closeFailed\": \"Não foi possível fechar a contagem\",\n \"inventory.counts.cancelCount\": \"Cancelar contagem\",\n \"inventory.counts.cancelTitle\": \"Cancelar esta contagem?\",\n \"inventory.counts.cancelDescription\": \"A contagem é arquivada e nada é ajustado. O que você digitou fica registrado.\",\n \"inventory.counts.cancelConfirm\": \"Cancelar a contagem\",\n \"inventory.counts.cancelled\": \"Contagem cancelada\",\n \"inventory.counts.cancelFailed\": \"Não foi possível cancelar a contagem\",\n \"inventory.counts.adjustmentReason\": \"Contagem de estoque {{reference}}\",\n 'inventory.productDetail.newMovement': 'Lançar movimento',\n 'inventory.productDetail.movementFailed': 'Não foi possível lançar o movimento',\n \"inventory.nav.usageAudit\": \"Auditoria de Uso\",\n \"inventory.usageAudit.title\": \"Auditoria de Uso de Produtos\",\n \"inventory.usageAudit.subtitle\": \"Confira o que os atendimentos consumiram e corrija a quantidade lançada errada.\",\n \"inventory.usageAudit.columnProduct\": \"Produto\",\n \"inventory.usageAudit.columnQuantity\": \"Quantidade\",\n \"inventory.usageAudit.columnLocation\": \"Posição\",\n \"inventory.usageAudit.columnWhen\": \"Quando\",\n \"inventory.usageAudit.columnPerformedBy\": \"Profissional\",\n \"inventory.usageAudit.columnCustomer\": \"Cliente\",\n \"inventory.usageAudit.columnCost\": \"Custo\",\n \"inventory.usageAudit.standard\": \"Padrão\",\n \"inventory.usageAudit.badgePosted\": \"Baixado\",\n \"inventory.usageAudit.badgeApproved\": \"Aprovado\",\n \"inventory.usageAudit.batchNoStock\": \"{count} sem saldo — seguem na fila\",\n \"inventory.usageAudit.corrected\": \"Corrigido\",\n \"inventory.usageAudit.noLocation\": \"Sem posição\",\n \"inventory.usageAudit.unnamedProduct\": \"Produto sem nome\",\n \"inventory.usageAudit.reason\": \"Observações da auditoria\",\n \"inventory.usageAudit.cancel\": \"Cancelar\",\n \"inventory.usageAudit.loadFailed\": \"Não foi possível carregar a auditoria\",\n \"inventory.usageAudit.searchPlaceholder\": \"Buscar por produto, cliente, profissional…\",\n \"inventory.usageAudit.periodLabel\": \"Período\",\n \"inventory.usageAudit.period30\": \"30 dias\",\n \"inventory.usageAudit.period90\": \"90 dias\",\n \"inventory.usageAudit.periodAll\": \"Todo o período\",\n \"inventory.usageAudit.filterPending\": \"Pendentes\",\n \"inventory.usageAudit.emptyPending\": \"Nenhum consumo esperando conferência neste período.\",\n \"inventory.usageAudit.columnActions\": \"Ações\",\n \"inventory.usageAudit.post\": \"Baixar\",\n \"inventory.usageAudit.approve\": \"Aprovar\",\n \"inventory.usageAudit.postHint\": \"Aceita o consumo E desconta do saldo\",\n \"inventory.usageAudit.approveHint\": \"Aceita o consumo sem mexer no saldo\",\n \"inventory.usageAudit.posted\": \"{{count}} linha(s) baixada(s) do estoque\",\n \"inventory.usageAudit.approved\": \"{{count}} linha(s) aprovada(s)\",\n \"inventory.usageAudit.approveFailed\": \"Não foi possível aceitar o consumo\",\n \"inventory.usageAudit.noStock\": \"Sem saldo para baixar — dê entrada no produto ou use Aprovar\",\n \"inventory.usageAudit.filtersLabel\": \"Filtros\",\n \"inventory.usageAudit.filterLabel\": \"Conferência\",\n \"inventory.usageAudit.filterAll\": \"Tudo\",\n \"inventory.usageAudit.filterDivergent\": \"Fora do padrão\",\n \"inventory.usageAudit.empty\": \"Nenhum consumo lançado pelos atendimentos ainda\",\n \"inventory.usageAudit.columnCounted\": \"Conferido\",\n \"inventory.usageAudit.draftOne\": \"1 quantidade alterada\",\n \"inventory.usageAudit.draftMany\": \"{{count}} quantidades alteradas\",\n \"inventory.usageAudit.draftCheck\": \"Confira as quantidades digitadas\",\n \"inventory.usageAudit.draftHint\": \"Aplicar lan\\u00e7a um ajuste por linha, todos com a mesma observa\\u00e7\\u00e3o.\",\n \"inventory.usageAudit.draftCost\": \"Diferen\\u00e7a de custo do consumo: {{value}}\",\n \"inventory.usageAudit.draftInvalid\": \"{{count}} linha(s) com quantidade que n\\u00e3o \\u00e9 um n\\u00famero\",\n \"inventory.usageAudit.draftNothing\": \"Nenhuma quantidade mudou ainda\",\n \"inventory.usageAudit.discard\": \"Descartar\",\n \"inventory.usageAudit.apply\": \"Aplicar {{count}}\",\n \"inventory.usageAudit.applyTitle\": \"Aplicar {{count}} correções\",\n \"inventory.usageAudit.applyDescription\": \"Um ajuste por linha no raz\\u00e3o, todos com a mesma observa\\u00e7\\u00e3o. Nada \\u00e9 reescrito: a diferen\\u00e7a \\u00e9 lan\\u00e7ada.\",\n \"inventory.usageAudit.applyConfirm\": \"Aplicar\",\n \"inventory.usageAudit.batchReasonPlaceholder\": \"Por que estas quantidades mudaram\\u2026\",\n \"inventory.usageAudit.batchReasonHint\": \"Vale para o lote inteiro \\u2014 \\u00e9 a observa\\u00e7\\u00e3o que ficar\\u00e1 em cada movimento.\",\n \"inventory.usageAudit.batchApplied\": \"{{count}} correções lançadas no razão\",\n \"inventory.usageAudit.batchFailed\": \"N\\u00e3o foi poss\\u00edvel aplicar a confer\\u00eancia\",\n \"inventory.usageAudit.applyTitleOne\": \"Aplicar 1 correção\",\n \"inventory.usageAudit.batchReasonRequired\": \"Escreva por que, antes de aplicar — a observação é obrigatória.\",\n \"inventory.usageAudit.batchAppliedOne\": \"1 correção lançada no razão\",\n \"inventory.usageAudit.emptyDivergent\": \"Nenhum consumo fora do padrão\",\n \"inventory.recipes.edit\": \"Editar\",\n \"inventory.recipes.print\": \"Imprimir ficha técnica\",\n \"inventory.recipes.printNoSheet\": \"Sem ficha técnica para imprimir\",\n \"inventory.recipes.pickTitle\": \"Selecionar Produto\",\n \"inventory.recipes.pickHint\": \"Escolha o produto ao qual esta ficha técnica será associada.\",\n \"inventory.recipes.pickPlaceholder\": \"Buscar produto...\",\n \"inventory.recipes.pickContinue\": \"Continuar\",\n \"inventory.sheet.name\": \"Nome da Ficha Técnica\",\n \"inventory.sheet.namePlaceholder\": \"Ex: Picanha na Chapa\",\n \"inventory.sheet.nameRequired\": \"O nome da ficha técnica é obrigatório.\",\n \"inventory.sheet.yield\": \"Rendimento\",\n \"inventory.sheet.yieldUnit\": \"Unidade Rendimento\",\n \"inventory.sheet.none\": \"Nenhuma\",\n \"inventory.sheet.yieldMode\": \"Tipo de rendimento\",\n \"inventory.sheet.yieldMode.portion\": \"Porção (a ficha é 1 unidade vendida)\",\n \"inventory.sheet.yieldMode.batch\": \"Lote (a ficha produz o rendimento)\",\n \"inventory.sheet.yieldMode.portionHint\": \"O rendimento só descreve o que vai no prato («para 4 pessoas», «6 unidades», «400 g»). O custo do produto é a soma da ficha.\",\n \"inventory.sheet.yieldMode.batchHint\": \"A ficha produz o rendimento informado (ex.: 2,4 kg de molho). O custo do produto é a soma da ficha ÷ o rendimento, na unidade do produto.\",\n \"inventory.sheet.prepTime\": \"Tempo Preparo (min)\",\n \"inventory.sheet.description\": \"Descrição Geral\",\n \"inventory.sheet.descriptionPlaceholder\": \"Descrição geral da ficha técnica\",\n \"inventory.sheet.costPrice\": \"Preço de Custo\",\n \"inventory.sheet.per\": \"por\",\n \"inventory.sheet.batchCost\": \"Lote\",\n \"inventory.sheet.salePrice\": \"Preço de Venda\",\n \"inventory.sheet.cmv\": \"CMV\",\n \"inventory.sheet.components\": \"Componentes da Ficha Técnica (por estação)\",\n \"inventory.sheet.suggestAi\": \"Sugerir com IA\",\n \"inventory.sheet.addGroup\": \"Adicionar Grupo\",\n \"inventory.sheet.noComponents\": \"Nenhum componente adicionado. Clique em \\\"Adicionar Grupo\\\" ou use \\\"Sugerir com IA\\\".\",\n \"inventory.sheet.componentName\": \"Nome do Componente\",\n \"inventory.sheet.componentNamePlaceholder\": \"Ex: Porção de Iscas\",\n \"inventory.sheet.station\": \"Estação de Produção\",\n \"inventory.sheet.stationPlaceholder\": \"Selecione a estação\",\n \"inventory.sheet.noStations\": \"Nenhuma estação cadastrada\",\n \"inventory.sheet.estimatedMinutes\": \"Tempo estimado (min)\",\n \"inventory.sheet.estimatedMinutesPlaceholder\": \"Ex: 20\",\n \"inventory.sheet.componentMenu\": \"Mais ações do componente\",\n \"inventory.sheet.transform\": \"Transformar em produto intermediário\",\n \"inventory.sheet.deleteComponent\": \"Excluir componente\",\n \"inventory.sheet.transformNeedsLines\": \"Adicione ao menos um insumo neste componente.\",\n \"inventory.sheet.noLines\": \"Nenhum insumo. Clique em \\\"Adicionar Item\\\".\",\n \"inventory.sheet.ingredient\": \"Insumo\",\n \"inventory.sheet.quantity\": \"Quantidade\",\n \"inventory.sheet.notes\": \"Obs\",\n \"inventory.sheet.cost\": \"Custo\",\n \"inventory.sheet.unit\": \"Unidade\",\n \"inventory.sheet.searchIngredient\": \"Buscar insumo...\",\n \"inventory.sheet.createIngredient\": \"Criar insumo\",\n \"inventory.sheet.ingredientCreated\": \"Insumo \\\"{{name}}\\\" criado\",\n \"inventory.sheet.ingredientCreateFailed\": \"Não foi possível criar o insumo.\",\n \"inventory.sheet.aiHint\": \"Sugerido pela IA\",\n \"inventory.sheet.create\": \"Criar\",\n \"inventory.sheet.updateCost\": \"Atualizar custo\",\n \"inventory.sheet.updateCostCurrent\": \"Atualizar custo (atual: {{price}}{{unit}})\",\n \"inventory.sheet.setCost\": \"Definir preço de custo do insumo\",\n \"inventory.sheet.removeLine\": \"Remover insumo\",\n \"inventory.sheet.addLine\": \"Adicionar Item\",\n \"inventory.sheet.componentPrep\": \"Modo de Preparo deste Componente\",\n \"inventory.sheet.componentPrepPlaceholder\": \"Como preparar este componente na estação\",\n \"inventory.sheet.outputs\": \"Saídas da produção (opcional)\",\n \"inventory.sheet.outputsHint\": \"Quando esta ficha gera mais de um produto (ex.: filé + aparas + pele). Sem linhas aqui, a produção entrega apenas o produto principal com o rendimento da ficha. O custo da OP é dividido pelo % de cada saída; em branco, pelo valor de mercado (preço médio de compra × quantidade). Rejeito não leva custo.\",\n \"inventory.sheet.addOutput\": \"Adicionar saída\",\n \"inventory.sheet.product\": \"Produto\",\n \"inventory.sheet.outputType\": \"Tipo\",\n \"inventory.sheet.expectedQty\": \"Qtd esperada\",\n \"inventory.sheet.costShare\": \"% do custo\",\n \"inventory.sheet.auto\": \"auto\",\n \"inventory.sheet.removeOutput\": \"Remover saída\",\n \"inventory.sheet.outputType.main\": \"Principal\",\n \"inventory.sheet.outputType.coproduct\": \"Coproduto\",\n \"inventory.sheet.outputType.byproduct\": \"Subproduto\",\n \"inventory.sheet.outputType.waste\": \"Descarte\",\n \"inventory.sheet.outputShareTitle\": \"Confira o % do custo das saídas\",\n \"inventory.sheet.outputShareHint\": \"Preencha o % em todas as saídas aproveitáveis, somando 100% — ou deixe todas em branco para ratear pelo valor de mercado.\",\n \"inventory.sheet.instructions\": \"Modo de Preparo Geral / Montagem (opcional)\",\n \"inventory.sheet.instructionsPlaceholder\": \"Como montar e finalizar o prato após os componentes prontos...\",\n \"inventory.sheet.save\": \"Salvar Ficha Técnica\",\n \"inventory.sheet.saving\": \"Salvando...\",\n \"inventory.sheet.saved\": \"Ficha técnica salva\",\n \"inventory.sheet.saveFailed\": \"Não foi possível salvar.\",\n \"inventory.sheet.loadFailed\": \"Não foi possível carregar a ficha técnica.\",\n \"inventory.sheet.costDialogTitle\": \"Atualizar custo\",\n \"inventory.sheet.costDialogHint\": \"Defina manualmente ou peça uma sugestão à IA com base no mercado.\",\n \"inventory.sheet.costAppliesEverywhere\": \"O custo vale para todas as fichas que usam este insumo.\",\n \"inventory.sheet.costInvalid\": \"Informe um valor maior que zero.\",\n \"inventory.sheet.costUpdated\": \"{{name}} agora custa {{price}}\",\n \"inventory.sheet.aiNoPrice\": \"A IA não retornou um preço.\",\n \"inventory.sheet.aiFailed\": \"A IA não respondeu. Tente novamente.\",\n \"inventory.sheet.aiUnitMismatch\": \"A IA deu o preço por {{ai}}; este insumo é contado em {{unit}}. Confira antes de salvar.\",\n \"inventory.sheet.aiTitle\": \"Sugerir Ficha Técnica com IA\",\n \"inventory.sheet.aiPhotos\": \"Fotos do produto\",\n \"inventory.sheet.aiPhotosHint\": \"Quanto mais ângulos do prato, melhor a sugestão.\",\n \"inventory.sheet.aiProductName\": \"Nome do produto\",\n \"inventory.sheet.aiStations\": \"Estações disponíveis para a IA:\",\n \"inventory.sheet.aiNoStations\": \"Nenhuma estação cadastrada — cadastre estações para a IA agrupar corretamente.\",\n \"inventory.sheet.aiInstructions\": \"Instruções adicionais para a IA (opcional)\",\n \"inventory.sheet.aiInstructionsPlaceholder\": \"Ex.: Porção para 2 pessoas, sem glúten, usar manteiga clarificada, separar molho em estação fria...\",\n \"inventory.sheet.aiReplaces\": \"A sugestão substitui os componentes que estão na ficha. Nada é gravado até você salvar.\",\n \"inventory.sheet.aiGenerate\": \"Gerar sugestão\",\n \"inventory.sheet.aiGenerating\": \"Gerando...\",\n \"inventory.sheet.aiApplied\": \"Sugestão aplicada — confira e salve.\",\n \"inventory.sheet.uploadFailed\": \"Não foi possível enviar a imagem.\",\n \"inventory.sheet.addPhoto\": \"Adicionar foto\",\n \"inventory.sheet.removePhoto\": \"Remover foto\",\n \"inventory.sheet.transformHint\": \"Será criado um novo produto do tipo intermediário com esta ficha técnica (ingredientes e modo de preparo). O bloco atual será removido daqui — depois você pode adicionar este intermediário em qualquer etapa.\",\n \"inventory.sheet.transformName\": \"Nome do Produto Intermediário\",\n \"inventory.sheet.transformNamePlaceholder\": \"Ex: Arroz Branco Porção\",\n \"inventory.sheet.transformUnitPlaceholder\": \"Selecione (g, kg, ml, L, un...)\",\n \"inventory.sheet.transformNameRequired\": \"Informe o nome do produto intermediário.\",\n \"inventory.sheet.transformYieldRequired\": \"Informe o rendimento.\",\n \"inventory.sheet.transformUnitRequired\": \"Selecione a unidade de medida do rendimento.\",\n \"inventory.sheet.transformDuplicate\": \"Já existe um produto com este nome.\",\n \"inventory.sheet.transformCreate\": \"Criar Intermediário\",\n \"inventory.sheet.transformCreating\": \"Criando...\",\n \"inventory.sheet.transformDone\": \"\\\"{{name}}\\\" foi cadastrado. Agora você pode adicioná-lo como item em qualquer componente desta ficha técnica.\",\n \"inventory.sheet.transformFailed\": \"Falha ao transformar em intermediário.\",\n \"inventory.complements.tab\": \"Complementos\",\n \"inventory.complements.title\": \"Complementos e escolhas\",\n \"inventory.complements.hint\": \"Configure sabores, pontos de preparo e adicionais. Use R$ 0,00 quando a escolha não tiver acréscimo.\",\n \"inventory.complements.newGroup\": \"Novo grupo\",\n \"inventory.complements.empty\": \"Este produto ainda não possui complementos.\",\n \"inventory.complements.emptyHint\": \"Crie um grupo para começar, como “Ponto da carne” ou “Chantilly”.\",\n \"inventory.complements.groupName\": \"Nome do grupo\",\n \"inventory.complements.groupNamePlaceholder\": \"Ex: Ponto da carne\",\n \"inventory.complements.active\": \"Ativo\",\n \"inventory.complements.moveUp\": \"Mover grupo para cima\",\n \"inventory.complements.moveDown\": \"Mover grupo para baixo\",\n \"inventory.complements.deleteGroup\": \"Excluir grupo\",\n \"inventory.complements.required\": \"Escolha obrigatória\",\n \"inventory.complements.min\": \"Mínimo\",\n \"inventory.complements.max\": \"Máximo\",\n \"inventory.complements.option\": \"Opção\",\n \"inventory.complements.price\": \"Acréscimo\",\n \"inventory.complements.optionActive\": \"Ativa\",\n \"inventory.complements.optionPlaceholder\": \"Ex: Com chantilly\",\n \"inventory.complements.deleteOption\": \"Excluir opção\",\n \"inventory.complements.addOption\": \"Adicionar opção\",\n \"inventory.complements.save\": \"Salvar complementos\",\n \"inventory.complements.saved\": \"Complementos salvos\",\n \"inventory.complements.saveFailed\": \"Não foi possível salvar\",\n \"inventory.complements.review\": \"Revise os complementos\",\n \"inventory.complements.loadFailed\": \"Não foi possível carregar os complementos\",\n \"inventory.photoAi.title\": \"Gerar foto com IA\",\n \"inventory.photoAi.product\": \"Produto\",\n \"inventory.photoAi.category\": \"Categoria\",\n \"inventory.photoAi.usesSheet\": \"Os insumos da ficha técnica entram na descrição da foto.\",\n \"inventory.photoAi.references\": \"Imagens de referência (opcional)\",\n \"inventory.photoAi.useCurrent\": \"Usar foto atual do produto como referência\",\n \"inventory.photoAi.add\": \"Adicionar\",\n \"inventory.photoAi.instructionsPlaceholder\": \"Ex.: fundo de madeira, luz de fim de tarde, porção servida em prato branco...\",\n \"inventory.photoAi.generate\": \"Gerar foto\",\n \"inventory.photoAi.again\": \"Gerar outra\",\n \"inventory.photoAi.generating\": \"Gerando a foto…\",\n \"inventory.photoAi.apply\": \"Aplicar foto\",\n \"inventory.photoAi.applied\": \"Foto aplicada ao produto\",\n \"inventory.photoAi.failed\": \"Não foi possível gerar a foto\",\n \"inventory.sheet.quickTitle\": \"Novo insumo\",\n \"inventory.sheet.quickHint\": \"Cadastra o produto como Insumo e o coloca nesta linha.\",\n \"inventory.sheet.quickName\": \"Nome\",\n \"inventory.sheet.quickUnit\": \"Unidade de Estoque\",\n \"inventory.sheet.quickUnitHint\": \"Unidade base usada em ficha técnica, estoque e vendas (ex: un, ml, g).\",\n \"inventory.sheet.quickNameRequired\": \"Informe o nome do insumo.\",\n \"inventory.sheet.quickUnitRequired\": \"Escolha a unidade em que o insumo é contado.\",\n \"inventory.sheet.quickCreate\": \"Criar insumo\",\n \"inventory.recipes.pickEmpty\": \"Nenhum produto de venda ou intermediário encontrado.\",\n \"inventory.recipes.kind.sale\": \"Venda\",\n \"inventory.recipes.kind.intermediate\": \"Intermediário\",\n \"inventory.recipes.kind.produced\": \"Produzido\",\n \"inventory.recipes.kind.all\": \"Todos\",\n \"inventory.recipes.hasSheet\": \"Com ficha\",\n \"inventory.recipes.noSheetShort\": \"Sem ficha\",\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const inventoryLocales: Record<string, Record<string, string>> = {\n en,\n 'pt-BR': ptBR,\n}\n","import React from 'react'\nimport type { DetailTab, PluginManifest, PluginScope, VerticalId } from '@fayz-ai/core'\nimport { UNIT_DETAIL_ZONES } from '@fayz-ai/admin'\nimport { createInventoryDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedInventoryConfig } from './context'\nimport type { InventoryDataProvider } from '@fayz-ai/inventory/data/provider'\nimport type { StockMovement } from '@fayz-ai/inventory/domain/movement'\nimport { lazyComponent, registerTranslations } from '@fayz-ai/core'\nimport { PluginSettingsPanel } from '@fayz-ai/admin'\nimport { createInventoryDataProvider, createInventoryStore } from '@fayz-ai/inventory/store'\nimport { inventoryRegistries } from './data/registries'\nimport { inventorySetupGuides } from './lib/setup-guides'\nimport { buildInventoryOnboarding } from './lib/onboarding'\nimport { inventoryLocales } from './locales'\nimport { upsertRecipeTool } from './lib/agent-tools'\nimport { MIGRATIONS } from './migrations'\n\n// Code loads when it is first drawn, not with the app. Pages use React.lazy\n// (the shell's route boundary shows the page skeleton); anything that may\n// render elsewhere uses lazyComponent, which carries its own boundary.\nconst InventoryPage = React.lazy(() => import('./views/InventoryPage').then((m) => ({ default: m.InventoryPage })))\nconst UnitStockLocationsWidget = lazyComponent(() => import('./views/UnitStockLocationsWidget').then((m) => m.UnitStockLocationsWidget))\nconst InventoryGeneralSettings = lazyComponent(() => import('./components/InventoryGeneralSettings').then((m) => m.InventoryGeneralSettings))\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface InventoryPluginLabels {\n pageTitle: string\n pageSubtitle: string\n dashboard: string\n products: string\n productsNew: string\n productsList: string\n stock: string\n stockEntry: string\n stockExit: string\n stockHistory: string\n recipes: string\n recipesNew: string\n recipesList: string\n}\n\n/** Uma tela que outro plugin empresta ao Estoque. */\nexport interface InventoryExtraView {\n /** Vira o segmento da URL: `/inventory/<id>`. Em inglês, como toda rota do V2. */\n id: string\n label: string\n icon?: string\n render: () => React.ReactNode\n /**\n * Telas irmãs sob a mesma aba, como o V1 agrupa cinco sob «Notas Fiscais».\n * Sem isto, quatro telas de nota virariam quatro abas no Estoque e afogariam\n * Produtos e Movimentações.\n */\n children?: Array<{ id: string; label: string; render: () => React.ReactNode }>\n /**\n * O nome da PRÓPRIA tela quando ela entra como primeiro filho do grupo. Sem\n * isto o Estoque chamava toda tela emprestada de «Entrada», que era o nome de\n * uma delas — e o grupo de notas quis o nome do V1, «Manifesto de Notas».\n */\n defaultChildLabel?: string\n}\n\nexport interface InventoryNavShortcut {\n /** The inner view id; the entry routes to `/inventory/<view>`. */\n view: string\n label: string\n icon?: string\n /** Defaults to inventory read. A borrowed view (fiscal notes) passes its own. */\n permission?: { feature: string; action: 'read' }\n}\n\nexport interface InventoryPluginOptions {\n modules?: {\n recipes?: boolean\n stockLocations?: boolean\n batchTracking?: boolean\n /**\n * The product catalogue screens (list + form). Defaults on. Turn OFF when the\n * host already owns product registration elsewhere — an e-commerce app\n * manages products in the shop plugin, and two competing product CRUDs is\n * how the same product ends up entered twice, differently.\n * Stock entry/exit/history stay available either way.\n */\n products?: boolean\n }\n labels?: Partial<InventoryPluginLabels>\n productTypes?: Array<{ value: string; label: string }>\n currency?: { code?: string; locale?: string; symbol?: string }\n navPosition?: number\n navSection?: 'main' | 'secondary'\n /**\n * Telas que OUTRO plugin contribui para dentro do Estoque, como abas irmãs de\n * Produtos, Movimentações e Contagens.\n *\n * Existe porque «Entrada de Notas» é assunto de estoque e não assunto do rail:\n * no V1 o caminho é `Estoque → Notas Fiscais → Entrada de Notas`, e montá-la\n * como linha solta no menu quebra o mapa mental de quem vem do V1 — a pessoa\n * procura dentro do Estoque e não acha. Quem dá entrada de nota é o\n * `plugin-fiscal-br`, que não pode reivindicar uma aba do Estoque sem esta\n * porta.\n *\n * A ordem na faixa é a ordem deste array, depois das abas próprias.\n */\n extraViews?: InventoryExtraView[]\n /**\n * Inner views the app also wants as direct rail entries under Estoque\n * (e.g. `products-list`, `inbound-notes`). Opt-in: without it the module is\n * one rail row and every screen lives in its own tab strip.\n */\n navShortcuts?: InventoryNavShortcut[]\n /**\n * Tabs another plugin contributes to the product record — the shop's photos,\n * say. The catalog product is this plugin's; what else is known about it is\n * not, so the app composes it here instead of this plugin importing theirs.\n * Shown after the plugin's own tabs.\n */\n productDetailTabs?: DetailTab[]\n /**\n * O documento que originou um movimento de estoque — a nota de entrada, hoje —\n * desenhado dentro do modal que o Estoque abre. Ver `ResolvedInventoryConfig`.\n */\n documentModal?: (movement: StockMovement, close: () => void) => React.ReactNode\n scope?: PluginScope\n /**\n * Como o Estoque desenha a PRÓPRIA navegação (Produtos, Movimentações,\n * Contagens, Receitas).\n *\n * O padrão vem do shell, e num app cujo default é `sidebar` esse padrão diz\n * \"o rail lista as minhas sub-telas\" — promessa que ninguém cumpre por este\n * módulo: no rail ele é UMA linha, e o que tem dentro é tela irmã, não\n * assunto novo. O resultado era o Estoque abrindo sem faixa de abas nenhuma.\n *\n * Mesma porta que `crm`, `marketing` e `financial` já usam.\n */\n moduleNav?: 'rail' | 'tabs' | 'sidebar'\n verticalId?: VerticalId\n dataProvider?: InventoryDataProvider\n locations?: Array<{ id: string; name: string; isHQ?: boolean }>\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_LABELS: InventoryPluginLabels = {\n pageTitle: 'Inventory',\n pageSubtitle: 'Product catalog and stock management',\n dashboard: 'Dashboard',\n products: 'Products',\n productsNew: 'New',\n productsList: 'List',\n stock: 'Stock',\n stockEntry: 'Entry',\n stockExit: 'Exit',\n stockHistory: 'History',\n recipes: 'Recipes',\n recipesNew: 'New',\n recipesList: 'List',\n}\n\nconst DEFAULT_CURRENCY = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\nconst DEFAULT_PRODUCT_TYPES = [\n { value: 'ingredient', label: 'Ingredient', labelKey: 'inventory.productType.ingredient' },\n { value: 'sale', label: 'For Sale', labelKey: 'inventory.productType.sale' },\n { value: 'intermediate', label: 'Intermediate', labelKey: 'inventory.productType.intermediate' },\n { value: 'asset', label: 'Asset', labelKey: 'inventory.productType.asset' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: InventoryPluginOptions): ResolvedInventoryConfig {\n return {\n modules: {\n products: options?.modules?.products !== false,\n recipes: options?.modules?.recipes !== false,\n stockLocations: options?.modules?.stockLocations !== false,\n batchTracking: options?.modules?.batchTracking ?? false,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n productTypes: options?.productTypes ?? DEFAULT_PRODUCT_TYPES,\n locations: options?.locations ?? [],\n moduleNav: options?.moduleNav,\n extraViews: options?.extraViews ?? [],\n productDetailTabs: options?.productDetailTabs ?? [],\n documentModal: options?.documentModal,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createInventoryPlugin(options?: InventoryPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(inventoryLocales)\n const provider = options?.dataProvider ?? createInventoryDataProvider()\n const store = createInventoryStore(provider)\n const dashboardWidgets = createInventoryDashboardWidgets({ config, provider, store })\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(InventoryPage, { config, provider, store, registries: inventoryRegistries })\n\n return {\n id: 'inventory',\n // Como esta conta refaz o módulo com as opções DELA. Ver PluginRebuild:\n // a fábrica roda no carregamento do aplicativo, muito antes de a\n // configuração da conta existir, e sem isto `app.tenant_plugins.config`\n // não tinha como chegar aqui. A fusão é RASA e por bloco — a conta troca\n // `modules` inteiro ou não o troca —, que é o mesmo contrato que a chamada\n // do aplicativo já tem.\n rebuild: (tenantConfig) =>\n createInventoryPlugin({ ...options, ...(tenantConfig as InventoryPluginOptions) }),\n defaultAgentRole: 'operations',\n name: config.labels.pageTitle,\n icon: 'Package',\n version: '1.0.0',\n scope: options?.scope ?? 'universal',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n // The parts a plan can permit separately (#281, ADR 0025). Counting what\n // you have is the plugin; costing it and forecasting it are what a growing\n // operation pays for.\n facets: [\n { id: 'stock', label: 'Estoque', description: 'Saldo, movimentos e contagem.', includedWithPlugin: true },\n { id: 'costing', label: 'Custo médio e margem', description: 'Custo móvel por lote e a margem que sai dele.' },\n { id: 'purchasing', label: 'Compras e reposição', description: 'Ponto de pedido, sugestão de compra e recebimento.' },\n ],\n dependencies: [],\n // Business effects cross plugin boundaries through the durable event log.\n // Completion consumes the active recipe (or the sold product itself).\n // Cancelled sales never complete, so the app never coordinates a stock effect.\n subscribesTo: [\n {\n event: 'order.completed',\n handler: 'plg_inventory_on_order_completed',\n description: 'A completed Venda consumes its active recipe or the sold product, except the lines a delivery already covered',\n maxAttempts: 5,\n },\n {\n // The delivery is the movement wherever a delivery exists (PRD 05): the\n // quantity comes from the DELIVERY line, so an order of two that\n // delivers one moves the balance by one.\n event: 'fulfillment.completed',\n handler: 'plg_inventory_on_fulfillment_completed',\n description: 'A completed delivery takes its own quantity out of the balance',\n maxAttempts: 5,\n },\n ],\n // The plugin owns ALL of its SQL and says so: what installing it provisions\n // is this list, byte-for-byte the files under src/migrations (embed barrel).\n // Loose SQL was the standing contract violation (DECISIONS 2026-07-06).\n migrations: MIGRATIONS.map((m) => ({\n id: `inventory-${m.id}`,\n version: '1.0.0',\n sql: m.sql,\n description: m.id,\n })),\n declaredFeatures: [\n { id: 'inventory', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.recipes ? [{ id: 'inventory.recipes', label: config.labels.recipes ?? 'Recipes', group: config.labels.pageTitle }] : []),\n ],\n queryEntities: [\n {\n key: 'inventory:products',\n writable: true,\n entity: {\n name: 'Product',\n namePlural: 'Products',\n icon: 'Package',\n limitKey: 'products',\n permission: { feature: 'inventory', action: 'read' },\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, searchable: true },\n { key: 'kind', label: 'Kind (sale/ingredient/asset)', type: 'text' },\n { key: 'price', label: 'Price', type: 'number' },\n { key: 'cost', label: 'Cost', type: 'number' },\n { key: 'sku', label: 'SKU', type: 'text', searchable: true },\n { key: 'isActive', label: 'Active', type: 'boolean' },\n { key: 'createdAt', label: 'Created at', type: 'text' },\n ],\n data: {\n table: 'products',\n tenantScoped: true,\n archetype: 'product',\n archetypeKind: 'sale',\n searchColumns: ['name', 'sku'],\n defaults: { kind: 'sale', status: 'active', is_active: true },\n },\n },\n },\n ],\n declaredLimits: [\n { key: 'products', label: 'Products', table: 'products' },\n ...(config.modules.recipes ? [{ key: 'recipes', label: config.labels.recipes ?? 'Recipes', table: 'plg_inventory_recipes' }] : []),\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 4,\n label: config.labels.pageTitle,\n route: '/inventory',\n icon: 'Package',\n permission: { feature: 'inventory', action: 'read' as const },\n },\n // The shell nests these under `/inventory` by route prefix, and only when\n // the parent sorts first — a lower position would leave them top-level.\n ...(options?.navShortcuts ?? []).map((shortcut, i) => ({\n section: options?.navSection ?? 'main',\n position: (options?.navPosition ?? 4) + (i + 1) / 100,\n label: shortcut.label,\n route: `/inventory/${shortcut.view}`,\n icon: shortcut.icon,\n permission: shortcut.permission ?? { feature: 'inventory', action: 'read' as const },\n })),\n ],\n routes: [\n {\n path: '/inventory',\n component: PageComponent,\n permission: { feature: 'inventory', action: 'read' as const },\n // Products live on this hand-built page, not a CRUD route, so nothing\n // would register them and a product the assistant just created would\n // resolve to no page at all.\n entityRoutes: ['product:sale', 'product'],\n },\n ],\n widgets: [\n {\n id: 'inventory-unit-stock-locations',\n zone: UNIT_DETAIL_ZONES.stockLocations,\n component: UnitStockLocationsWidget as unknown as React.ComponentType<unknown>,\n order: 0,\n },\n ],\n dashboardWidgets,\n aiTools: [\n {\n id: 'inventory.low-stock',\n name: 'getLowStock',\n description: 'Lists products with stock below minimum threshold.',\n icon: 'AlertTriangle',\n mode: 'read' as const,\n category: 'Inventory',\n parameters: {\n type: 'object' as const,\n properties: {\n threshold: { type: 'number' as const, description: 'Custom stock threshold' },\n },\n },\n suggestions: [\n { label: 'Quais produtos estão com estoque baixo?' },\n { label: 'Quais insumos precisam de reposição?', verticalId: 'food' as const },\n { label: 'Mostre um resumo do estoque' },\n { label: 'Quais são os produtos mais usados?' },\n ],\n permission: { feature: 'inventory', action: 'read' as const },\n },\n // `role: 'finance'` is on the tool itself — the plugin defaults to\n // 'operations' and cost per dish belongs to the finance colleague.\n ...(config.modules.recipes ? [upsertRecipeTool] : []),\n ],\n declaredRpcs: [\n ...(config.modules.recipes ? [{\n name: 'agent_inventory_upsert_recipe',\n kind: 'write' as const,\n description:\n 'Guarded recipe upsert: agent_guard (role→plan→recipes cap), ingredient names resolved to products.id inside SQL, unmatched ones returned and stored for the screen to recover, audited.',\n audits: true,\n }] : []),\n ],\n registries: inventoryRegistries,\n settings: [\n {\n id: 'inventory',\n label: 'Inventory',\n icon: 'Package',\n // PluginSettingsPanel, not the toggles component directly. Declaring\n // `registries` does nothing for settings on its own — the panel is the\n // only thing that turns them into screens, which is why Stock Locations,\n // Categories, Units and Suppliers all existed in code and appeared\n // nowhere. financial and crm already render through it.\n component: (() => {\n const Tab: React.FC = () => React.createElement(PluginSettingsPanel, {\n title: config.labels.pageTitle,\n generalSettings: React.createElement(InventoryGeneralSettings, { config }),\n registries: inventoryRegistries,\n hostPluginId: 'inventory',\n routeBase: '/settings/inventory',\n })\n Tab.displayName = 'InventorySettingsTab'\n return Tab\n })() as unknown as React.ComponentType<unknown>,\n order: 11,\n permission: { feature: 'inventory', action: 'read' as const },\n },\n ],\n // Como cada tela do Estoque entra em pé — lido pelo assistente.\n onboarding: { program: buildInventoryOnboarding() },\n setupGuides: inventorySetupGuides,\n locales: inventoryLocales,\n }\n}\n\nexport { createInventoryDataProvider }\nexport type { InventoryDataProvider } from '@fayz-ai/inventory/data/provider'\nexport type { ResolvedInventoryConfig } from './context'\n\nexport {\n MOVEMENT_TYPES,\n MOVEMENT_TYPE_VALUES,\n LEGACY_PT_MOVEMENT_TYPE,\n movementTypeSpec,\n normalizeMovementType,\n} from '@fayz-ai/inventory/domain/movement'\nexport type { MovementType, MovementTypeSpec } from '@fayz-ai/inventory/domain/movement'\nexport type {\n ConsumeRecipeForSourceInput,\n ReverseRecipeConsumptionInput,\n InventoryConsumptionResult,\n InventoryConsumptionStatus,\n InventoryConsumptionSkipReason,\n} from '@fayz-ai/inventory/domain/consumption'\n"]}