feat(mvp-rep): formas de pagamento do ERP + suporte offline completo
Formas de pagamento: - Endpoint GET /catalog/payment-methods lendo vw_formas_pagamento filtrado por ativa=1 e integrar_sar=1 - FormaPagamento schema/type no shared api-interface - Hook useFormasPagamento (staleTime 1h) substituindo lista hardcoded Offline (FR-4.2 / NFR-2.1–2.4): - IndexedDB queue: lib/offline/idb.ts + order-queue.ts sem deps externos - NewOrderPage detecta !navigator.onLine → enqueueOrder() → toast + reset - useOfflineSync: auto-sync ao reconectar (POST orders + PATCH transmit) - usePendingOrders: fila reativa via CustomEvents - AppShell: banner offline + useOfflineSync() global - OrdersPage: seção de pedidos pendentes com retry/descartar - sw.js: network-first para API GETs cacheáveis + stale-while-revalidate para assets + app shell navigate fallback Docs: - architecture.md: documento de decisões de arquitetura do SAR MVP Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,13 +6,24 @@ import { z } from 'zod';
|
||||
|
||||
// ─── Situa ────────────────────────────────────────────────────────────────────
|
||||
|
||||
// situa: 1=Pendente 2=Aprovado 3=Cancelado 4=Faturado
|
||||
export const SituaPedidoSchema = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]);
|
||||
// Ciclo de vida do pedido SAR:
|
||||
// 0=Orçamento → 1=Ag. Aprovação (se desconto > alçada) → 2=Transmitido
|
||||
// Estados que o SAR controla: Orçamento e Transmitido (1 é o gate de desconto).
|
||||
// Após Transmitido, o status passa a refletir o ERP (Emitido/Cancelado/Aguardando…)
|
||||
// — espelhado quando a integração existir.
|
||||
export const SituaPedidoSchema = z.union([
|
||||
z.literal(0),
|
||||
z.literal(1),
|
||||
z.literal(2),
|
||||
z.literal(3),
|
||||
z.literal(4),
|
||||
]);
|
||||
export type SituaPedido = z.infer<typeof SituaPedidoSchema>;
|
||||
|
||||
export const SITUA_LABEL: Record<number, string> = {
|
||||
0: 'Orçamento',
|
||||
1: 'Ag. Aprovação',
|
||||
2: 'Aprovado',
|
||||
2: 'Transmitido',
|
||||
3: 'Cancelado',
|
||||
4: 'Faturado',
|
||||
};
|
||||
@@ -54,6 +65,7 @@ export const PedidoSummarySchema = z.object({
|
||||
nomeCliente: z.string().nullable().optional(),
|
||||
razaoCliente: z.string().nullable().optional(),
|
||||
codVendedor: z.number().int(),
|
||||
nomeVendedor: z.string().nullable().optional(),
|
||||
situa: z.number().int(),
|
||||
statusDescr: z.string().optional(), // descrição legível do status
|
||||
dtPedido: z.string(),
|
||||
|
||||
Reference in New Issue
Block a user