@fayz-ai/plugin-fiscal-br 0.13.3 → 0.13.5
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/GapScreens-RDPPFZMG.js +3 -0
- package/dist/GapScreens-RDPPFZMG.js.map +1 -0
- package/dist/InboundNotesPage-R72EC5E4.js +5 -0
- package/dist/InboundNotesPage-R72EC5E4.js.map +1 -0
- package/dist/InvoiceNotesButton-3SMNHWMQ.js +5 -0
- package/dist/InvoiceNotesButton-3SMNHWMQ.js.map +1 -0
- package/dist/NoteReconcileView-3KVXZLCG.js +4 -0
- package/dist/NoteReconcileView-3KVXZLCG.js.map +1 -0
- package/dist/OrderNoteCard-H6P66R4J.js +5 -0
- package/dist/OrderNoteCard-H6P66R4J.js.map +1 -0
- package/dist/UnitFiscalWidgets-KCHSISBS.js +503 -0
- package/dist/UnitFiscalWidgets-KCHSISBS.js.map +1 -0
- package/dist/chunk-2GHTB3Z2.js +66 -0
- package/dist/chunk-2GHTB3Z2.js.map +1 -0
- package/dist/chunk-7NW3EBOQ.js +101 -0
- package/dist/chunk-7NW3EBOQ.js.map +1 -0
- package/dist/chunk-G7T5YMNY.js +241 -0
- package/dist/chunk-G7T5YMNY.js.map +1 -0
- package/dist/chunk-JRP5AZFJ.js +64 -0
- package/dist/chunk-JRP5AZFJ.js.map +1 -0
- package/dist/chunk-OGXYHL3Z.js +590 -0
- package/dist/chunk-OGXYHL3Z.js.map +1 -0
- package/dist/chunk-RZT2BO6E.js +64 -0
- package/dist/chunk-RZT2BO6E.js.map +1 -0
- package/dist/chunk-UYGGBJCR.js +2314 -0
- package/dist/chunk-UYGGBJCR.js.map +1 -0
- package/dist/chunk-WID54RUV.js +498 -0
- package/dist/chunk-WID54RUV.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +146 -9251
- package/dist/index.js.map +1 -1
- package/dist/migrations/index.d.ts +2 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/main.browser.js +39 -0
- package/dist/migrations/main.browser.js.map +1 -0
- package/dist/migrations/main.js +4912 -0
- package/dist/migrations/main.js.map +1 -0
- package/dist/views/InboundNotesPage.d.ts.map +1 -1
- package/dist/views/inventoryView.d.ts.map +1 -1
- package/package.json +11 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/views/InboundNotesView.tsx","../src/views/InboundNotesPage.tsx"],"names":["useState","useCallback","useEffect","jsxs","jsx"],"mappings":"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","file":"chunk-OGXYHL3Z.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Manifesto de Notas — a lista das notas de compra, e a área onde o XML entra.\n// ---------------------------------------------------------------------------\n// Duas colunas de estado, e a diferença entre elas é o coração da tela:\n//\n// Conciliação quantos itens já sabem a que produto correspondem — 0/1, 1/1, 0/6\n// Estoque se a entrada aconteceu — Pendente / Estocado\n//\n// No V1 havia 55 notas conciliadas e nunca estocadas. Uma coluna de \"status\" só\n// teria escondido as 55, e a pergunta \"por que o estoque não mudou?\" não teria\n// resposta na tela.\n// ---------------------------------------------------------------------------\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Eye, FileCode2, FileDown, FileText, Inbox, KeyRound, ListChecks, Loader2, RefreshCw, Trash2, UploadCloud } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport {\n Button, Card, ChevronPager, DataTable, FilterPanel, FilterPanelField, PageHeaderActions, SearchField,\n RowActions, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Tooltip, TooltipContent,\n TooltipProvider, TooltipTrigger, useFilterDraft,\n} from '@fayz-ai/ui'\nimport { PageActions, adminNavigateTo, useUnitFilter } from '@fayz-ai/admin'\nimport { formatCurrency } from '@fayz-ai/core'\nimport { getInboxIntakeHealth, getInboxNotePdf, getInboxNoteXml, listInboxNotes, stageNoteFromXml, rejectNote, syncNewNotes, type InboxIntakeHealth } from '../data/inbox'\nimport type { InboxNote, InboxStatusFilter } from '../types'\nimport { PullByKeyDialog } from './PullByKeyDialog'\n\nconst money = (value: number) => formatCurrency(value || 0, 'BRL')\n\nconst day = (iso: string | null) => (iso ? iso.slice(0, 10).split('-').reverse().join('/') : '—')\n\nconst cnpj = (digits: string | null) => {\n const d = (digits ?? '').replace(/\\D/g, '')\n if (d.length !== 14) return digits ?? '—'\n return `${d.slice(0, 2)}.${d.slice(2, 5)}.${d.slice(5, 8)}/${d.slice(8, 12)}-${d.slice(12)}`\n}\n\n// Same box as SelectTrigger: the date filters sit beside it and must read as one row.\nconst CAMPO = 'h-9 w-full rounded-input border border-input bg-background px-3 text-sm shadow-sm focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2'\n\n/** O recorte, como ele vai para a consulta. */\ninterface Recorte {\n filter: InboxStatusFilter\n unitId: string\n from: string\n to: string\n}\n\nconst STATE_OPTIONS: Array<{ value: InboxStatusFilter; label: string }> = [\n { value: 'all', label: 'Todos' },\n { value: 'pending', label: 'Estoque pendente' },\n { value: 'stocked', label: 'Estocado' },\n { value: 'manifest_error', label: 'Manifestação com erro' },\n { value: 'rejected', label: 'Recusada' },\n]\n\nconst isoDay = (d: Date) => d.toISOString().slice(0, 10)\nconst SYNC_KEY = 'fiscalbr.inbox.lastSefazSync'\n\n/** O resultado de arrastar um lote: o que entrou, o que o de-para já resolveu, o que recusou. */\ninterface DropReport {\n ok: Array<{ file: string; number: string; items: number; matched: number; repeated: boolean }>\n failed: Array<{ file: string; message: string }>\n}\n\nexport interface InboundNotesViewProps {\n /** Abre a conciliação da nota. A rota é do host — esta tela não sabe navegar. */\n onOpenNote: (noteId: string) => void\n}\n\nexport function InboundNotesView({ onOpenNote }: InboundNotesViewProps) {\n const [notes, setNotes] = useState<InboxNote[]>([])\n const [loading, setLoading] = useState(true)\n const [search, setSearch] = useState('')\n const [busy, setBusy] = useState(false)\n const [report, setReport] = useState<DropReport | null>(null)\n const [dragging, setDragging] = useState(false)\n const [pullOpen, setPullOpen] = useState(false)\n const fileInput = useRef<HTMLInputElement>(null)\n\n // A unidade é o ALCANCE de quem olha: a lista abre na unidade em que a pessoa\n // está e só oferece as que ela alcança.\n const unidades = useUnitFilter({ scope: 'list' })\n\n // ── Rascunho e aplicado ─────────────────────────────────────────────────\n // O MESMO motor de recorte da conciliação bancária (FilterPanel): os campos\n // escrevem num rascunho e a lista só muda no «Buscar». Mexer em unidade,\n // estado e nas duas pontas do período seria quatro consultas no caminho, três\n // das quais ninguém pediu — e a terceira pode voltar depois da quarta e\n // pintar a tela com o recorte errado.\n const { draft, applied, patch, setDraft, dirty, apply, reset } = useFilterDraft<Recorte>({\n filter: 'all',\n unitId: unidades.value ?? '',\n // Sem período por padrão: o V1 abre em «Todos os registros», e uma janela\n // de 30 dias esconderia justamente a nota velha que nunca foi estocada.\n from: '',\n to: '',\n })\n\n // Trocar de unidade na casca re-ancora a lista, como no V1 quando a unidade\n // corrente mudava — e aplica na hora, porque uma lista presa ao recorte\n // anterior mostraria dados de outra unidade até alguém clicar em buscar.\n const ancora = unidades.value ?? ''\n const ancoraAnterior = useRef(ancora)\n useEffect(() => {\n if (ancoraAnterior.current === ancora) return\n ancoraAnterior.current = ancora\n setDraft((atual) => ({ ...atual, unitId: ancora }))\n apply()\n }, [ancora, setDraft, apply])\n const reload = useCallback(async () => {\n setLoading(true)\n try {\n setNotes(await listInboxNotes({\n filter: applied.filter,\n unitId: applied.unitId || undefined,\n from: applied.from || undefined,\n to: applied.to || undefined,\n // The list pages on screen; the default 200 would silently drop the rest.\n limit: 5000,\n }))\n } finally {\n setLoading(false)\n }\n }, [applied])\n\n useEffect(() => { void reload() }, [reload])\n\n const [intake, setIntake] = useState<InboxIntakeHealth | null>(null)\n const [syncing, setSyncing] = useState(false)\n const [syncNote, setSyncNote] = useState<string | null>(null)\n const refreshIntake = useCallback(() => { getInboxIntakeHealth().then(setIntake).catch(() => setIntake(null)) }, [])\n\n const syncNow = useCallback(async (quiet: boolean) => {\n setSyncing(true)\n if (!quiet) setSyncNote(null)\n try {\n const r = await syncNewNotes()\n try { localStorage.setItem(SYNC_KEY, String(Date.now())) } catch { /* private mode */ }\n if (r.added) void reload()\n const parts = [\n r.added ? `${r.added} ${r.added === 1 ? 'nota nova' : 'notas novas'}` : null,\n r.waiting ? `${r.waiting} ainda sem o XML completo na SEFAZ` : null,\n r.failed ? `${r.failed} com erro` : null,\n ].filter(Boolean)\n if (!quiet || parts.length) setSyncNote(parts.length ? `SEFAZ: ${parts.join(' · ')}.` : 'SEFAZ: nenhuma nota nova.')\n } catch (e) {\n if (!quiet) setSyncNote(e instanceof Error ? e.message : String(e))\n } finally {\n setSyncing(false)\n refreshIntake()\n }\n }, [reload, refreshIntake])\n\n // Opening the list is when someone wants to see what arrived; at most every 30 minutes.\n useEffect(() => {\n refreshIntake()\n let last = 0\n try { last = Number(localStorage.getItem(SYNC_KEY) ?? 0) } catch { /* private mode */ }\n if (Date.now() - last > 30 * 60_000) void syncNow(true)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // One file at a time, sequentially. The staging RPC is idempotent on the access\n // key, so a repeated file is not an error — but firing 20 of them in parallel\n // would race on the same de-para rows for the same supplier.\n const ingest = useCallback(async (files: File[]) => {\n const xmls = files.filter((f) => /\\.xml$/i.test(f.name))\n if (xmls.length === 0) {\n setReport({ ok: [], failed: [{ file: '—', message: 'Nenhum arquivo .xml no que foi solto.' }] })\n return\n }\n setBusy(true)\n const next: DropReport = { ok: [], failed: [] }\n for (const file of xmls) {\n try {\n const res = await stageNoteFromXml(await file.text())\n next.ok.push({\n file: file.name,\n number: res.parsed.nfeNumber,\n items: res.itemCount,\n matched: res.matchedCount,\n repeated: res.alreadyAccepted,\n })\n } catch (error) {\n next.failed.push({ file: file.name, message: error instanceof Error ? error.message : String(error) })\n }\n }\n setBusy(false)\n setReport(next)\n await reload()\n }, [reload])\n\n const [rowError, setRowError] = useState<string | null>(null)\n\n const downloadXml = useCallback(async (note: InboxNote) => {\n setRowError(null)\n try {\n const xml = await getInboxNoteXml(note.id)\n if (!xml) { setRowError(`O XML da nota ${note.number} não está guardado.`); return }\n const url = URL.createObjectURL(new Blob([xml], { type: 'application/xml' }))\n const a = document.createElement('a')\n a.href = url\n a.download = `${note.accessKey || note.number || 'nfe'}.xml`\n a.click()\n URL.revokeObjectURL(url)\n } catch (e) {\n setRowError(e instanceof Error ? e.message : String(e))\n }\n }, [])\n\n const openPdf = useCallback(async (note: InboxNote) => {\n setRowError(null)\n // Opened before the await: a tab opened after it is a popup the browser blocks.\n const tab = window.open('', '_blank')\n try {\n const pdf = await getInboxNotePdf(note.accessKey ?? '')\n if (tab) tab.location.href = URL.createObjectURL(pdf)\n } catch (e) {\n tab?.close()\n setRowError(e instanceof Error ? e.message : String(e))\n }\n }, [])\n\n const remove = useCallback(async (note: InboxNote) => {\n // Recusar, não apagar: a nota é documento fiscal e continua legível.\n await rejectNote(note.id, 'Recusada na lista de entrada')\n await reload()\n }, [reload])\n\n const activeCount = (applied.filter === 'all' ? 0 : 1)\n + (applied.unitId ? 1 : 0)\n + (applied.from || applied.to ? 1 : 0)\n\n const limpar = useCallback(() => {\n reset({ filter: 'all', unitId: ancora, from: '', to: '' })\n }, [reset, ancora])\n\n /** As duas pontas nunca ficam invertidas: mexer numa arrasta a outra. */\n const setFrom = (from: string) => patch({ from, to: draft.to && from > draft.to ? from : draft.to })\n const setTo = (to: string) => patch({ to, from: draft.from && to < draft.from ? to : draft.from })\n\n // Local search: the list already arrives whole, so a round trip per keystroke buys nothing.\n const query = search.trim().toLowerCase()\n const shown = useMemo(() => {\n if (!query) return notes\n // CNPJ, access key and date match on digits, so punctuation never matters.\n const digits = query.replace(/\\D/g, '')\n return notes.filter((note) => {\n if (`${note.number} ${note.series} ${note.supplierName}`.toLowerCase().includes(query)) return true\n if (digits.length < 2) return false\n if ((note.supplierCnpj ?? '').replace(/\\D/g, '').includes(digits)) return true\n if ((note.accessKey ?? '').includes(digits)) return true\n return day(note.issueDate).replace(/\\D/g, '').includes(digits)\n })\n }, [notes, query])\n\n const [page, setPage] = useState(1)\n useEffect(() => { setPage(1) }, [notes, query])\n const pageRows = useMemo(() => shown.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE), [shown, page])\n\n const columns = useMemo<ColumnDef<InboxNote, unknown>[]>(() => [\n {\n id: 'issueDate',\n header: 'Emissão',\n accessorFn: (note) => note.issueDate ?? '',\n cell: ({ row }) => <span className=\"tabular-nums text-muted-foreground\">{day(row.original.issueDate)}</span>,\n },\n {\n id: 'number',\n header: 'Nº',\n accessorFn: (note) => Number(note.number) || note.number,\n cell: ({ row }) => <span className=\"tabular-nums font-medium\">{row.original.number}</span>,\n },\n {\n id: 'supplier',\n header: 'Fornecedor',\n accessorFn: (note) => note.supplierName,\n meta: { truncate: true, mobile: 'title' },\n cell: ({ row }) => (\n <div>\n <p className=\"font-medium leading-tight\">{row.original.supplierName || '—'}</p>\n <p className=\"text-xs text-muted-foreground tabular-nums\">{cnpj(row.original.supplierCnpj)}</p>\n </div>\n ),\n },\n {\n id: 'reconciled',\n header: () => <span className=\"block text-center\">Conciliação</span>,\n accessorFn: (note) => (note.itemCount > 0 ? note.reconciledCount / note.itemCount : -1),\n cell: ({ row }) => (\n <div className=\"text-center\">\n <ReconcileBadge done={row.original.reconciledCount} total={row.original.itemCount} />\n </div>\n ),\n },\n {\n id: 'total',\n header: () => <span className=\"block text-right\">Valor</span>,\n accessorFn: (note) => note.total,\n cell: ({ row }) => {\n const note = row.original\n return (\n <div className=\"text-right tabular-nums\">\n {money(note.total)}\n {/* O título nasce com a soma das PARCELAS. Quando ela difere do\n total da nota, a tela mostra as duas — é a divergência que a\n conciliação passaria o mês procurando. */}\n {note.instalmentCount > 0 && Math.abs(note.instalmentTotal - note.total) > 0.01 && (\n <p className=\"text-[11px] text-warning-soft-foreground\">\n parcelas: {money(note.instalmentTotal)}\n </p>\n )}\n </div>\n )\n },\n },\n {\n id: 'stock',\n header: () => <span className=\"block text-center\">Estoque</span>,\n accessorFn: (note) => (note.stockedAt ? 2 : note.status === 'rejected' ? 0 : 1),\n cell: ({ row }) => (\n <div className=\"text-center\">\n <StockBadge stockedAt={row.original.stockedAt} status={row.original.status} />\n </div>\n ),\n },\n {\n id: 'actions',\n header: () => <span className=\"block text-right\">Ações</span>,\n enableSorting: false,\n cell: ({ row }) => {\n const note = row.original\n const done = !!note.stockedAt || note.status === 'rejected'\n return (\n // The row itself opens the note; the buttons must not fire it a second time.\n <div className=\"flex justify-end gap-1\" onClick={(e) => e.stopPropagation()}>\n <ActionIcon label={done ? 'Ver nota' : 'Conciliar'}>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n aria-label={done ? `Ver a nota ${note.number}` : `Conciliar a nota ${note.number}`}\n className={done ? '' : 'bg-foreground text-background hover:bg-foreground/85 hover:text-background'}\n onClick={() => onOpenNote(note.id)}\n >\n {done ? <Eye className=\"h-4 w-4\" /> : <ListChecks className=\"h-4 w-4\" />}\n </Button>\n </ActionIcon>\n <RowActions\n inlineLimit={0}\n actions={[\n { id: 'xml', label: 'Baixar XML', icon: FileCode2, onSelect: () => downloadXml(note) },\n { id: 'pdf', label: 'Abrir PDF', icon: FileText, onSelect: () => openPdf(note), hidden: !note.accessKey },\n {\n id: 'reject', label: 'Recusar nota', icon: Trash2, intent: 'danger',\n onSelect: () => remove(note), hidden: done || !!note.invoiceId,\n },\n ]}\n />\n </div>\n )\n },\n },\n ], [onOpenNote, remove, downloadXml, openPdf])\n\n // Empty-by-search and empty-by-no-notes have different fixes.\n const emptyMessage = query || activeCount > 0 ? (\n <div>\n <Inbox className=\"mx-auto h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"mt-2 text-sm font-medium\">Nenhuma nota encontrada</p>\n <p className=\"text-xs text-muted-foreground\">Tente outro número, fornecedor ou CNPJ.</p>\n </div>\n ) : (\n <div>\n <Inbox className=\"mx-auto h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"mt-2 text-sm font-medium\">Nenhuma nota de entrada</p>\n <p className=\"text-xs text-muted-foreground\">\n As notas chegam da SEFAZ sozinhas, ou você arrasta o XML aqui.\n </p>\n </div>\n )\n\n return (\n <div className=\"space-y-4\">\n <PageHeaderActions>\n <PageActions\n actions={[\n {\n // Picking an XML off a filesystem is a desk job.\n id: 'import-xml', label: 'Importar XML', icon: busy ? Loader2 : UploadCloud,\n intent: 'primary', creates: true, desktopOnly: true, disabled: busy,\n onSelect: () => fileInput.current?.click(),\n },\n {\n id: 'sync-sefaz', label: syncing ? 'Buscando na SEFAZ…' : 'Buscar notas novas', icon: syncing ? Loader2 : RefreshCw,\n disabled: syncing, testId: 'sync-sefaz', onSelect: () => { void syncNow(false) },\n },\n {\n id: 'pull-by-key', label: 'Puxar por chave', icon: KeyRound, creates: true,\n testId: 'pull-by-key', onSelect: () => setPullOpen(true),\n },\n ]}\n />\n </PageHeaderActions>\n\n {syncNote && <p className=\"text-xs text-muted-foreground\" data-testid=\"sync-note\">{syncNote}</p>}\n\n {intake && (\n <Card className=\"border-warning bg-warning-soft p-4\" data-testid=\"intake-stalled\">\n <p className=\"text-sm font-medium text-warning-soft-foreground\">\n {intake.certificateExpiredAt\n ? `As notas da SEFAZ não estão chegando: o certificado digital venceu em ${day(intake.certificateExpiredAt)}.`\n : `As notas da SEFAZ não estão chegando${intake.since ? ` desde ${day(intake.since)}` : ''}.`}\n </p>\n <p className=\"mt-1 text-xs text-warning-soft-foreground\">\n {intake.certificateExpiredAt\n ? 'Renove o certificado A1 do CNPJ e envie o arquivo novo. As notas que ficaram para trás chegam sozinhas depois disso.'\n : intake.error ?? 'A busca automática parou. Enquanto isso, dá para importar o XML ou puxar a nota pela chave.'}\n {intake.stalled > 1 ? ` (${intake.stalled} CNPJs afetados)` : ''}\n </p>\n {intake.unitId && (intake.certificateExpiredAt || intake.error) && (\n <Button size=\"sm\" variant=\"outline\" className=\"mt-3\" data-testid=\"intake-update-certificate\"\n onClick={() => adminNavigateTo(`/settings/locations/${intake.unitId}/fields:tax`)}>\n Atualizar certificado\n </Button>\n )}\n </Card>\n )}\n\n {/* A área de arrastar é a porta de entrada, e o texto é o do V1: a entrada\n nasce do XML, não da digitação. */}\n <Card\n className={`hidden border-dashed p-6 text-center transition-colors md:block ${dragging ? 'border-primary bg-primary/5' : ''}`}\n onDragOver={(e: React.DragEvent) => { e.preventDefault(); setDragging(true) }}\n onDragLeave={() => setDragging(false)}\n onDrop={(e: React.DragEvent) => {\n e.preventDefault()\n setDragging(false)\n void ingest(Array.from(e.dataTransfer.files))\n }}\n >\n <UploadCloud className=\"mx-auto h-8 w-8 text-muted-foreground\" aria-hidden />\n <p className=\"mt-2 text-sm font-medium\">Arraste arquivos XML aqui ou clique para selecionar</p>\n <p className=\"text-xs text-muted-foreground\">\n Suporta múltiplos arquivos XML de NF-e. O XML do fornecedor dá entrada no estoque e cria a conta a pagar.\n </p>\n <input\n ref={fileInput}\n type=\"file\"\n accept=\".xml,text/xml,application/xml\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n void ingest(Array.from(e.target.files ?? []))\n e.target.value = ''\n }}\n />\n </Card>\n\n <PullByKeyDialog\n open={pullOpen}\n onOpenChange={setPullOpen}\n unitId={applied.unitId || null}\n onPulled={(r) => {\n setReport({\n ok: [{ file: 'chave', number: r.parsed.nfeNumber, items: r.itemCount, matched: r.matchedCount, repeated: r.alreadyAccepted }],\n failed: [],\n })\n void reload()\n }}\n />\n\n {report && (\n <Card className=\"p-4 space-y-2\">\n {report.ok.map((r) => (\n <p key={r.file} className=\"text-sm\">\n <span className=\"font-medium\">NF-e {r.number}</span>{' '}\n <span className=\"text-muted-foreground\">\n {r.repeated\n ? '— já tinha sido aceita, nada mudou'\n // O número que diz se o de-para está trabalhando. Sem ele, o\n // operador não sabe se importar XML economizou algo.\n : `— ${r.items} ${r.items === 1 ? 'item' : 'itens'}, ${r.matched} já ${r.matched === 1 ? 'vinculado' : 'vinculados'}`}\n </span>\n </p>\n ))}\n {report.failed.map((r) => (\n <p key={r.file} className=\"text-sm text-destructive\">\n <span className=\"font-medium\">{r.file}</span> — {r.message}\n </p>\n ))}\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setReport(null)}>Fechar</Button>\n </Card>\n )}\n\n {/* ── O painel de filtros ──────────────────────────────────────────── */}\n {/* O MESMO FilterPanel da conciliação bancária: unidade, estado e as duas\n pontas do período definem O QUE se busca, e «Buscar» é que aplica.\n A BUSCA não entra aqui — ela é a barra da lista: quem digita está\n procurando UMA nota entre as que já estão na tela, não redefinindo a\n consulta. */}\n <FilterPanel\n title=\"Filtros\"\n dirty={dirty}\n onApply={apply}\n applyLabel=\"Buscar\"\n pendingTitle=\"Filtros não aplicados\"\n pendingHint=\"A lista ainda mostra o recorte anterior.\"\n onClear={activeCount > 0 ? limpar : undefined}\n clearLabel=\"Limpar\"\n busy={loading}\n >\n {unidades.visible && (\n <FilterPanelField label={unidades.label}>\n <Select\n value={draft.unitId || '__all__'}\n onValueChange={(v) => patch({ unitId: v === '__all__' ? '' : v })}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__all__\">{unidades.allLabel}</SelectItem>\n {unidades.options.map((u) => <SelectItem key={u.id} value={u.id}>{u.name}</SelectItem>)}\n </SelectContent>\n </Select>\n </FilterPanelField>\n )}\n\n <FilterPanelField label=\"Estado\">\n <Select value={draft.filter} onValueChange={(v) => patch({ filter: v as InboxStatusFilter })}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {STATE_OPTIONS.map((o) => <SelectItem key={o.value} value={o.value}>{o.label}</SelectItem>)}\n </SelectContent>\n </Select>\n </FilterPanelField>\n\n <FilterPanelField label=\"Emissão de\">\n <input type=\"date\" value={draft.from} max={isoDay(new Date())} onChange={(e) => setFrom(e.target.value)} className={CAMPO} />\n </FilterPanelField>\n <FilterPanelField label=\"Emissão até\">\n <input type=\"date\" value={draft.to} max={isoDay(new Date())} onChange={(e) => setTo(e.target.value)} className={CAMPO} />\n </FilterPanelField>\n </FilterPanel>\n\n {rowError && (\n <p className=\"rounded-md bg-destructive/10 px-3 py-2 text-sm text-destructive\" role=\"alert\">{rowError}</p>\n )}\n\n {/* Search and table are one surface — they act on the same rows. `clip`, as\n in CrudListView: `hidden` makes a scroll box that swallows the sticky header. */}\n <Card style={{ overflow: 'clip' }}>\n <div className=\"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2\">\n <div className=\"min-w-[10rem] flex-1\">\n <SearchField\n value={search}\n onChange={setSearch}\n placeholder=\"Buscar por número, fornecedor, CNPJ…\"\n data-testid=\"inbound-notes-search\"\n />\n </div>\n </div>\n <TooltipProvider delayDuration={200}>\n <DataTable\n variant=\"bare\"\n columns={columns}\n data={loading ? [] : pageRows}\n loading={loading}\n getRowId={(note) => note.id}\n onRowClick={(note) => onOpenNote(note.id)}\n emptyMessage={emptyMessage}\n mobileLayout=\"cards\"\n />\n </TooltipProvider>\n {!loading && shown.length > 0 && (\n <ChevronPager page={page} pageSize={PAGE_SIZE} total={shown.length} onPageChange={setPage} noun=\"notas\" />\n )}\n </Card>\n </div>\n )\n}\n\nconst PAGE_SIZE = 50\n\nfunction ActionIcon({ label, children }: { label: string; children: React.ReactElement }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n )\n}\n\nfunction ReconcileBadge({ done, total }: { done: number; total: number }) {\n const full = total > 0 && done === total\n return (\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium tabular-nums ${\n full ? 'bg-success-soft text-success-soft-foreground' : 'bg-muted text-muted-foreground'\n }`}\n >\n {done}/{total}\n </span>\n )\n}\n\nfunction StockBadge({ stockedAt, status }: { stockedAt: string | null; status: string }) {\n if (status === 'rejected') {\n return <span className=\"inline-flex items-center rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground line-through\">Recusada</span>\n }\n return stockedAt ? (\n <span className=\"inline-flex items-center rounded-full bg-success-soft px-2 py-0.5 text-[11px] font-medium text-success-soft-foreground\">\n <FileDown className=\"mr-1 h-3 w-3\" aria-hidden />\n Estocado\n </span>\n ) : (\n <span className=\"inline-flex items-center rounded-full bg-warning-soft px-2 py-0.5 text-[11px] font-medium text-warning-soft-foreground\">\n Pendente\n </span>\n )\n}\n","// ---------------------------------------------------------------------------\n// A página de notas de compra: lista, conciliação e fila da SEFAZ numa moldura.\n// ---------------------------------------------------------------------------\n// As vistas trocam por ESTADO LOCAL, não por rota. Trocar de rota remonta a\n// página e rebusca tudo — a lista pisca, a posição de rolagem se perde, e voltar\n// da conciliação recarrega 200 notas para mostrar a mesma coisa.\n//\n// A CONCILIAÇÃO É MODAL, e a lista FICA MONTADA ATRÁS DELA. Era subpágina, e\n// subpágina desmonta: quem conciliava a quinta nota de um recorte de 200 voltava\n// para a lista no estado inicial — sem o filtro, sem a busca, no topo. O trabalho\n// é «abrir, decidir, fechar, abrir a próxima», e o custo era pago uma vez por\n// nota. Com o modal a lista nunca é desfeita, então fechar devolve exatamente o\n// que estava na tela.\n//\n// O ENDEREÇO EMPILHA NA DESCIDA. `pushState` não dispara `hashchange`, então o\n// roteador do anfitrião continua sem remontar nada — mas a conciliação passa a\n// existir como um degrau no histórico. Com `replaceState` ela não existia, e o\n// «voltar» do cabeçalho (que anda pelo histórico quando a pessoa veio de outro\n// módulo) saltava a lista inteira e caía no Painel. Subir é desempilhar.\n// ---------------------------------------------------------------------------\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { Modal, ModalContent } from '@fayz-ai/ui'\nimport { findInboxNoteByOperation } from '../data/inbox'\nimport { InboundNotesView } from './InboundNotesView'\nimport { NoteReconcileView } from './NoteReconcileView'\nimport { navigateApp, currentAppPath, appHref, onAppPathChange } from '@fayz-ai/core'\n\ntype View =\n | { kind: 'list' }\n | { kind: 'note'; id: string }\n\nconst ROUTE_PREFIX = '/inbound-notes'\n\nfunction viewFromLocation(): View {\n if (typeof window === 'undefined') return { kind: 'list' }\n const hash = currentAppPath()\n const note = hash.match(/\\/inbound-notes\\/note\\/([0-9a-f-]{36})/i)\n if (note) return { kind: 'note', id: note[1] }\n return { kind: 'list' }\n}\n\nconst pathOf = (view: View) =>\n view.kind === 'note' ? `${ROUTE_PREFIX}/note/${view.id}` : ROUTE_PREFIX\n\nexport interface InboundNotesPageProps {\n /** Onde o título a pagar vive no app anfitrião. Sem isto o botão não aparece. */\n payableRoute?: (invoiceId: string) => string\n}\n\n/** Marca as entradas que ESTA página empilhou, para só elas serem desempilhadas. */\nconst STACK_MARK = { inboundNotes: true }\n\nexport function InboundNotesPage({ payableRoute = (id) => `/financial/payables/${id}` }: InboundNotesPageProps = {}) {\n const [view, setView] = useState<View>(viewFromLocation)\n\n const go = useCallback((next: View) => {\n setView(next)\n if (typeof window === 'undefined') return\n const path = pathOf(next)\n if (currentAppPath() === path) return\n const empilhado = (window.history.state as { inboundNotes?: boolean } | null)?.inboundNotes\n if (next.kind !== 'note' && empilhado) {\n // Desempilha de verdade: trocar a URL à mão deixaria a conciliação no\n // histórico e o «voltar» do navegador entraria nela outra vez.\n window.history.back()\n return\n }\n if (next.kind === 'list') window.history.replaceState(null, '', appHref(path))\n else window.history.pushState(STACK_MARK, '', appHref(path))\n }, [])\n\n // O «voltar» do navegador é um gesto legítimo aqui: quem entrou na conciliação\n // por um deep link espera sair dela com ele.\n useEffect(() => {\n if (typeof window === 'undefined') return\n const onPop = () => {\n const next = viewFromLocation()\n setView(next)\n }\n window.addEventListener('popstate', onPop)\n const off = onAppPathChange(onPop)\n return () => {\n window.removeEventListener('popstate', onPop)\n off()\n }\n }, [])\n\n const fecharNota = useCallback(() => go({ kind: 'list' }), [go])\n\n // ENTRAR PELA OPERAÇÃO DE ESTOQUE. A linha de Movimentações sabe de que\n // OPERAÇÃO ela veio, não de que nota — o id da nota só o banco tem. Então o\n // link chega como `?operation=…` e esta página resolve, em vez de obrigar o\n // Estoque a consultar uma tabela do fiscal para desenhar um href.\n useEffect(() => {\n if (typeof window === 'undefined') return\n const op = currentAppPath().match(/[?&]operation=([0-9a-f-]{36})/i)?.[1]\n if (!op) return\n let vivo = true\n findInboxNoteByOperation(op)\n .then((id) => { if (vivo && id) go({ kind: 'note', id }) })\n .catch(() => { /* link velho ou nota de outra conta: fica na lista */ })\n return () => { vivo = false }\n }, [go])\n\n return (\n <>\n {/* A tela de fundo nunca é desmontada enquanto a nota está aberta: é ela\n que guarda o recorte, a busca e a rolagem a que a pessoa volta. */}\n <InboundNotesView onOpenNote={(id) => go({ kind: 'note', id })} />\n\n <Modal open={view.kind === 'note'} onOpenChange={(open) => { if (!open) fecharNota() }}>\n {view.kind === 'note' && (\n // `noPadding`: a conciliação desenha o próprio cabeçalho e o próprio\n // corpo — o título e o «Sugerir com IA» ficam fora da área que rola, e o\n // rodapé «Aceitar» precisa encostar nas bordas do modal.\n <ModalContent size=\"5xl\" noPadding className=\"sm:max-h-[90vh]\">\n <NoteReconcileView\n chrome=\"modal\"\n noteId={view.id}\n onBack={fecharNota}\n onOpenInvoice={payableRoute\n ? (invoiceId) => { navigateApp(payableRoute(invoiceId)) }\n : undefined}\n />\n </ModalContent>\n )}\n </Modal>\n </>\n )\n}\n\n/**\n * O componente que o registro de rotas monta. Ele recebe as rotas sem prop, então\n * a configuração do host entra por fechamento — e a fábrica mora aqui, num `.tsx`,\n * para o manifesto continuar sendo TypeScript sem JSX.\n */\nexport function makeInboundNotesRoute(options: InboundNotesPageProps = {}): () => React.ReactElement {\n return function InboundNotesRoute() {\n return <InboundNotesPage {...options} />\n }\n}\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { EmitterError, requestFile, request } from './chunk-2GHTB3Z2.js';
|
|
2
|
+
|
|
3
|
+
// src/lib/notes.ts
|
|
4
|
+
var CANCEL_MIN_JUSTIFICATION = 15;
|
|
5
|
+
var SENTENCES = {
|
|
6
|
+
no_client: "O servi\xE7o de integra\xE7\xF5es n\xE3o est\xE1 configurado neste app.",
|
|
7
|
+
not_configured: "A emiss\xE3o fiscal ainda n\xE3o est\xE1 ligada no servidor.",
|
|
8
|
+
unauthorized: "Sua sess\xE3o expirou. Entre de novo.",
|
|
9
|
+
not_allowed: "Seu acesso n\xE3o permite emitir ou cancelar notas.",
|
|
10
|
+
unavailable: "N\xE3o foi poss\xEDvel falar com o servi\xE7o fiscal. Tente de novo em instantes.",
|
|
11
|
+
unknown_order: "Este pedido n\xE3o foi encontrado.",
|
|
12
|
+
unknown_note: "Esta nota n\xE3o foi encontrada.",
|
|
13
|
+
not_a_sale: "S\xF3 uma venda recebe NFC-e.",
|
|
14
|
+
order_not_closed: "Este pedido ainda n\xE3o pode receber nota.",
|
|
15
|
+
no_emitter: "A unidade deste pedido n\xE3o tem empresa (CNPJ) cadastrada para emitir.",
|
|
16
|
+
emitter_not_owned: "Esta empresa ainda emite pelo sistema anterior. Configure em Integra\xE7\xF5es \u2192 PlugNotas.",
|
|
17
|
+
emitter_not_ready: "Falta configurar a empresa para emitir NFC-e (Integra\xE7\xF5es \u2192 PlugNotas).",
|
|
18
|
+
interstate: "Este pedido vai para outro estado: precisa de NF-e, n\xE3o de NFC-e.",
|
|
19
|
+
no_series: "A empresa n\xE3o tem s\xE9rie de NFC-e configurada.",
|
|
20
|
+
no_items: "O pedido n\xE3o tem produtos para a nota.",
|
|
21
|
+
products_without_ncm: "H\xE1 produtos sem cadastro fiscal (NCM).",
|
|
22
|
+
icms_code_mismatch: "H\xE1 produtos com c\xF3digo de ICMS que n\xE3o combina com o regime da empresa.",
|
|
23
|
+
not_paid: "O pedido n\xE3o tem pagamento recebido para a nota.",
|
|
24
|
+
totals_differ: "Os itens e os pagamentos do pedido n\xE3o fecham no mesmo total.",
|
|
25
|
+
invalid_text: "Um produto tem um nome que a SEFAZ n\xE3o aceita (s\xF3 emojis ou caracteres especiais).",
|
|
26
|
+
note_exists: "Este pedido j\xE1 tem uma nota emitida ou em processamento.",
|
|
27
|
+
not_authorized: "S\xF3 uma nota autorizada pode ser cancelada ou baixada.",
|
|
28
|
+
justification_too_short: `A justificativa precisa ter pelo menos ${CANCEL_MIN_JUSTIFICATION} caracteres.`,
|
|
29
|
+
cancel_deadline_passed: "O prazo de cancelamento desta nota j\xE1 passou.",
|
|
30
|
+
cancel_refused: "A SEFAZ recusou o cancelamento.",
|
|
31
|
+
plugnotas_refused: "A PlugNotas recusou o envio.",
|
|
32
|
+
marketplace_intermediary: "Pedidos de marketplace (iFood, 99Food, Keeta) ainda n\xE3o emitem NFC-e por aqui.",
|
|
33
|
+
not_ours: "Esta nota foi emitida pelo sistema anterior; cancele por l\xE1."
|
|
34
|
+
};
|
|
35
|
+
function noteErrorSentence(error) {
|
|
36
|
+
if (error instanceof EmitterError) {
|
|
37
|
+
const base = SENTENCES[error.code] ?? error.message;
|
|
38
|
+
return error.code === "products_without_ncm" || error.code === "icms_code_mismatch" ? `${base} ${error.message.split(": ").slice(1).join(": ")}`.trim() : base;
|
|
39
|
+
}
|
|
40
|
+
return error instanceof Error ? error.message : String(error);
|
|
41
|
+
}
|
|
42
|
+
var order = (orderId) => `/v1/fiscal/orders/${encodeURIComponent(orderId)}/notes`;
|
|
43
|
+
var one = (documentId, rest = "") => `/v1/fiscal/notes/${encodeURIComponent(documentId)}${rest}`;
|
|
44
|
+
var orderNotes = {
|
|
45
|
+
list: async (orderId) => (await request("GET", order(orderId))).notes,
|
|
46
|
+
issueNfce: (orderId) => request("POST", order(orderId), { model: "nfce" }),
|
|
47
|
+
/** Reads PlugNotas again while the note is processing. */
|
|
48
|
+
read: (documentId) => request("GET", one(documentId)),
|
|
49
|
+
cancel: (documentId, justification) => request("PUT", one(documentId, "/cancellation"), { justification }),
|
|
50
|
+
pdf: (documentId) => requestFile(one(documentId, "/pdf")),
|
|
51
|
+
xml: (documentId) => requestFile(one(documentId, "/xml"))
|
|
52
|
+
};
|
|
53
|
+
var NOTE_STATUS_LABEL = {
|
|
54
|
+
processing: "Processando",
|
|
55
|
+
authorized: "Autorizada",
|
|
56
|
+
rejected: "Rejeitada",
|
|
57
|
+
error: "Erro",
|
|
58
|
+
cancelled: "Cancelada",
|
|
59
|
+
substituted: "Substitu\xEDda"
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { CANCEL_MIN_JUSTIFICATION, NOTE_STATUS_LABEL, noteErrorSentence, orderNotes };
|
|
63
|
+
//# sourceMappingURL=chunk-RZT2BO6E.js.map
|
|
64
|
+
//# sourceMappingURL=chunk-RZT2BO6E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/notes.ts"],"names":[],"mappings":";;;AA8BO,IAAM,wBAAA,GAA2B;AAExC,IAAM,SAAA,GAAoC;AAAA,EACxC,SAAA,EAAW,yEAAA;AAAA,EACX,cAAA,EAAgB,8DAAA;AAAA,EAChB,YAAA,EAAc,uCAAA;AAAA,EACd,WAAA,EAAa,qDAAA;AAAA,EACb,WAAA,EAAa,mFAAA;AAAA,EACb,aAAA,EAAe,oCAAA;AAAA,EACf,YAAA,EAAc,kCAAA;AAAA,EACd,UAAA,EAAY,+BAAA;AAAA,EACZ,gBAAA,EAAkB,6CAAA;AAAA,EAClB,UAAA,EAAY,0EAAA;AAAA,EACZ,iBAAA,EAAmB,kGAAA;AAAA,EACnB,iBAAA,EAAmB,oFAAA;AAAA,EACnB,UAAA,EAAY,sEAAA;AAAA,EACZ,SAAA,EAAW,qDAAA;AAAA,EACX,QAAA,EAAU,2CAAA;AAAA,EACV,oBAAA,EAAsB,2CAAA;AAAA,EACtB,kBAAA,EAAoB,kFAAA;AAAA,EACpB,QAAA,EAAU,qDAAA;AAAA,EACV,aAAA,EAAe,kEAAA;AAAA,EACf,YAAA,EAAc,0FAAA;AAAA,EACd,WAAA,EAAa,6DAAA;AAAA,EACb,cAAA,EAAgB,0DAAA;AAAA,EAChB,uBAAA,EAAyB,0CAA0C,wBAAwB,CAAA,YAAA,CAAA;AAAA,EAC3F,sBAAA,EAAwB,kDAAA;AAAA,EACxB,cAAA,EAAgB,iCAAA;AAAA,EAChB,iBAAA,EAAmB,8BAAA;AAAA,EACnB,wBAAA,EAA0B,mFAAA;AAAA,EAC1B,QAAA,EAAU;AACZ,CAAA;AAEO,SAAS,kBAAkB,KAAA,EAAwB;AACxD,EAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,IAAI,KAAK,KAAA,CAAM,OAAA;AAE5C,IAAA,OAAO,KAAA,CAAM,SAAS,sBAAA,IAA0B,KAAA,CAAM,SAAS,oBAAA,GAC3D,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,IAAI,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,KAAK,IAAI,CAAC,CAAA,CAAA,CAAG,IAAA,EAAK,GAChE,IAAA;AAAA,EACN;AACA,EAAA,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC9D;AAEA,IAAM,QAAQ,CAAC,OAAA,KAAoB,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,OAAO,CAAC,CAAA,MAAA,CAAA;AACnF,IAAM,GAAA,GAAM,CAAC,UAAA,EAAoB,IAAA,GAAO,EAAA,KAAO,oBAAoB,kBAAA,CAAmB,UAAU,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA;AAEjG,IAAM,UAAA,GAAa;AAAA,EACxB,IAAA,EAAM,OAAO,OAAA,KAAA,CAAqB,MAAM,QAAgC,KAAA,EAAO,KAAA,CAAM,OAAO,CAAC,CAAA,EAAG,KAAA;AAAA,EAChG,SAAA,EAAW,CAAC,OAAA,KAAoB,OAAA,CAAmB,MAAA,EAAQ,KAAA,CAAM,OAAO,CAAA,EAAG,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA;AAAA,EAE5F,MAAM,CAAC,UAAA,KAAuB,QAAmB,KAAA,EAAO,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,EACvE,MAAA,EAAQ,CAAC,UAAA,EAAoB,aAAA,KAA0B,OAAA,CAAmB,KAAA,EAAO,GAAA,CAAI,UAAA,EAAY,eAAe,CAAA,EAAG,EAAE,aAAA,EAAe,CAAA;AAAA,EACpI,KAAK,CAAC,UAAA,KAAuB,YAAY,GAAA,CAAI,UAAA,EAAY,MAAM,CAAC,CAAA;AAAA,EAChE,KAAK,CAAC,UAAA,KAAuB,YAAY,GAAA,CAAI,UAAA,EAAY,MAAM,CAAC;AAClE;AAEO,IAAM,iBAAA,GAAgD;AAAA,EAC3D,UAAA,EAAY,aAAA;AAAA,EACZ,UAAA,EAAY,YAAA;AAAA,EACZ,QAAA,EAAU,WAAA;AAAA,EACV,KAAA,EAAO,MAAA;AAAA,EACP,SAAA,EAAW,WAAA;AAAA,EACX,WAAA,EAAa;AACf","file":"chunk-RZT2BO6E.js","sourcesContent":["// An order's fiscal notes as the integration service issues them\n// (control-sdk-backend ADR 0008, step 2). The service builds the note with the\n// V1's rules, talks to PlugNotas and records the answer; this file only sends\n// and turns a refusal code into the sentence the screen shows.\nimport { EmitterError, request, requestFile } from './service'\n\nexport type NoteStatus = 'processing' | 'authorized' | 'rejected' | 'error' | 'cancelled' | 'substituted'\n\nexport interface OrderNote {\n documentId: string\n orderId: string | null\n model: 'nfce' | 'nfe'\n status: NoteStatus\n environment: string | null\n series: string | null\n number: string | null\n accessKey: string | null\n protocol: string | null\n total: number | null\n rejection: { message?: string | null; fields?: Array<{ field: string; message: string }>; raw?: unknown } | null\n authorizedAt: string | null\n cancelledAt: string | null\n cancelReason: string | null\n /** processing while a cancellation waits on the SEFAZ. */\n cancellation: string | null\n /** The send got no answer; the service is looking for the note by its id. */\n uncertain: boolean\n createdAt: string\n}\n\nexport const CANCEL_MIN_JUSTIFICATION = 15\n\nconst SENTENCES: Record<string, string> = {\n no_client: 'O serviço de integrações não está configurado neste app.',\n not_configured: 'A emissão fiscal ainda não está ligada no servidor.',\n unauthorized: 'Sua sessão expirou. Entre de novo.',\n not_allowed: 'Seu acesso não permite emitir ou cancelar notas.',\n unavailable: 'Não foi possível falar com o serviço fiscal. Tente de novo em instantes.',\n unknown_order: 'Este pedido não foi encontrado.',\n unknown_note: 'Esta nota não foi encontrada.',\n not_a_sale: 'Só uma venda recebe NFC-e.',\n order_not_closed: 'Este pedido ainda não pode receber nota.',\n no_emitter: 'A unidade deste pedido não tem empresa (CNPJ) cadastrada para emitir.',\n emitter_not_owned: 'Esta empresa ainda emite pelo sistema anterior. Configure em Integrações → PlugNotas.',\n emitter_not_ready: 'Falta configurar a empresa para emitir NFC-e (Integrações → PlugNotas).',\n interstate: 'Este pedido vai para outro estado: precisa de NF-e, não de NFC-e.',\n no_series: 'A empresa não tem série de NFC-e configurada.',\n no_items: 'O pedido não tem produtos para a nota.',\n products_without_ncm: 'Há produtos sem cadastro fiscal (NCM).',\n icms_code_mismatch: 'Há produtos com código de ICMS que não combina com o regime da empresa.',\n not_paid: 'O pedido não tem pagamento recebido para a nota.',\n totals_differ: 'Os itens e os pagamentos do pedido não fecham no mesmo total.',\n invalid_text: 'Um produto tem um nome que a SEFAZ não aceita (só emojis ou caracteres especiais).',\n note_exists: 'Este pedido já tem uma nota emitida ou em processamento.',\n not_authorized: 'Só uma nota autorizada pode ser cancelada ou baixada.',\n justification_too_short: `A justificativa precisa ter pelo menos ${CANCEL_MIN_JUSTIFICATION} caracteres.`,\n cancel_deadline_passed: 'O prazo de cancelamento desta nota já passou.',\n cancel_refused: 'A SEFAZ recusou o cancelamento.',\n plugnotas_refused: 'A PlugNotas recusou o envio.',\n marketplace_intermediary: 'Pedidos de marketplace (iFood, 99Food, Keeta) ainda não emitem NFC-e por aqui.',\n not_ours: 'Esta nota foi emitida pelo sistema anterior; cancele por lá.',\n}\n\nexport function noteErrorSentence(error: unknown): string {\n if (error instanceof EmitterError) {\n const base = SENTENCES[error.code] ?? error.message\n // The products to fix come by name: they are what the store acts on.\n return error.code === 'products_without_ncm' || error.code === 'icms_code_mismatch'\n ? `${base} ${error.message.split(': ').slice(1).join(': ')}`.trim()\n : base\n }\n return error instanceof Error ? error.message : String(error)\n}\n\nconst order = (orderId: string) => `/v1/fiscal/orders/${encodeURIComponent(orderId)}/notes`\nconst one = (documentId: string, rest = '') => `/v1/fiscal/notes/${encodeURIComponent(documentId)}${rest}`\n\nexport const orderNotes = {\n list: async (orderId: string) => (await request<{ notes: OrderNote[] }>('GET', order(orderId))).notes,\n issueNfce: (orderId: string) => request<OrderNote>('POST', order(orderId), { model: 'nfce' }),\n /** Reads PlugNotas again while the note is processing. */\n read: (documentId: string) => request<OrderNote>('GET', one(documentId)),\n cancel: (documentId: string, justification: string) => request<OrderNote>('PUT', one(documentId, '/cancellation'), { justification }),\n pdf: (documentId: string) => requestFile(one(documentId, '/pdf')),\n xml: (documentId: string) => requestFile(one(documentId, '/xml')),\n}\n\nexport const NOTE_STATUS_LABEL: Record<NoteStatus, string> = {\n processing: 'Processando',\n authorized: 'Autorizada',\n rejected: 'Rejeitada',\n error: 'Erro',\n cancelled: 'Cancelada',\n substituted: 'Substituída',\n}\n"]}
|