Reglas de integración
Cómo conservar importes, estados y existencias sin duplicar movimientos.
Formatos comunes
Importes positivos como strings decimales de hasta 13 dígitos enteros y 2 decimales. Cantidades de entrada positivas con hasta 10 dígitos enteros y 4 decimales. Sin separadores de miles ni coma decimal. Un saldo derivado puede ser cero o negativo: no validarlo como una entrada money positiva.
Usar Decimal o tipos decimales exactos. Fechas de negocio YYYY-MM-DD; eventos ISO 8601 con zona. No transformar una fecha civil argentina a UTC para guardarla como otro día. Campos opcionales ausentes expresan dato no registrado; no reemplazarlos automáticamente por cero.
Saldos e imputaciones
Preservar cada importe con ARS o USD. Las cuotas deben sumar el total; una imputación por cuota usa su ID. Una imputación general se distribuye por vencimiento; en ventas y candidatos de órdenes el ID de cuota desempata el orden. No aplicar pagos a otra moneda ni superar la obligación.
Compras: evitar duplicar invoices y expenses vinculados. Distinguir completed de scheduled y crédito de dinero efectivamente pagado. Ventas: balance = amount − cobros aplicados − créditos aplicados. Los cobros sin asignación conservan un saldo sin aplicar.
Estado de respaldo, conciliación financiera y recepción física son dimensiones distintas. Falta de original no prueba impago; un remito recibido no prueba pago.
Cálculo de stock
stock(producto, corte) =
Σ líneas de remitos activos con status=received y date ≤ corte
+ Σ movimientos activos in con date ≤ corte
− Σ movimientos activos out con date ≤ corteTodos los términos usan productId y la unidad exacta del catálogo. No sumar además invoices.lines ni matches. La factura expresa lo facturado; matches expresa conciliación; el remito expresa ingreso físico. Una venta no descuenta automáticamente stock: se requiere el movimiento de salida correspondiente.
Estados de recepción
- unlinked
- Parte recibida sin factura asignada.
- pending
- Sin recepción o detalle pendiente.
- partial
- Recibido menor a lo facturado.
- complete
- Cantidades coincidentes, identidad compatible.
- excess
- Recibido mayor a lo facturado.
- mismatch
- Vínculo incompatible: producto, unidad, proveedor, código, factura o línea.
Sin detalle, invoicedQuantity/missingQuantity pueden ser null: cantidad desconocida. Nunca interpretarlas como cero. Los cargos kind=charge se excluyen de la recepción física.
Ejemplo completo
La factura de ejemplo registra 10 unidades por $100.000. El remito recibe 6; el pago completed aplica $40.000. Sin otros créditos ni movimientos: saldo financiero $60.000, recepción partial, faltan 4 unidades y stock recibido 6. Si se registra una salida de 1, el stock queda en 5. Son cálculos independientes.