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:
@@ -28,6 +28,16 @@ export const PautaSchema = z.object({
|
||||
descricao: z.string(),
|
||||
});
|
||||
export type Pauta = z.infer<typeof PautaSchema>;
|
||||
|
||||
// ─── Forma de Pagamento (vw_formas_pagamento) ─────────────────────────────────
|
||||
|
||||
export const FormaPagamentoSchema = z.object({
|
||||
codigo: z.number().int(),
|
||||
descricao: z.string(),
|
||||
numParcelas: z.number().int().nullable(),
|
||||
txAcrescimo: z.string(),
|
||||
});
|
||||
export type FormaPagamento = z.infer<typeof FormaPagamentoSchema>;
|
||||
export type ProdutoSummary = z.infer<typeof ProdutoSummarySchema>;
|
||||
|
||||
// ─── Produto Detail ───────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user