# ADR-006 — Moeda, precisão e arredondamento - Estado: Aceite como contrato de representação; regra de cálculo requer aprovação do domínio. - Data: 2026-10-01 - Contexto: valores exactos usam `numeric(20,2)` em partes do schema; moedas são códigos de 3 letras, mas a lista autorizada e políticas de arredondamento não estão completas. ## Decisão Representar montante como decimal exacto em SQL e como string decimal no JSON/OpenAPI para evitar perda IEEE-754; transportar código monetário separadamente e exigir ambos ou nenhum nos campos emparelhados. `^[A-Z]{3}$` verifica formato, não validade ISO nem moeda permitida. Não converter moedas nem arredondar implicitamente. A escala, modo e momento de arredondamento dependem de regra aprovada pelo domínio e devem ser identificados em cada operação; resultados persistidos registam a moeda e, se aplicável, a regra/versão usada. Não inferir taxas fiscais, taxa de câmbio ou número de casas pela moeda. ## Alternativas e consequências Float/double é rejeitado por erro binário. Inteiro em unidade mínima depende de escala monetária ainda não aprovada. É necessário decidir allowlist de moedas e regras específicas antes de cálculo financeiro público.