# Flujo de Negocio: Account (Contabilidad) **Modulo:** account **Modelo Principal:** account.move **Aplica Workflow:** Si --- ## 1. Estados del Documento (state) | Estado | Nombre UI | Descripcion | Siguiente | |--------|-----------|-------------|-----------| | draft | Borrador | Estado inicial, editable | posted | | posted | Publicado | Contabilizado, no editable | cancel | | cancel | Cancelado | Anulado | - | --- ## 2. Diagrama de Transiciones - account.move ``` ┌──────────────────┐ │ DRAFT │ │ (Borrador) │ └────────┬─────────┘ │ action_post() _post() │ ▼ ┌──────────────────┐ │ POSTED │ │ (Publicado) │◄────────┐ └────────┬─────────┘ │ │ │ ┌──────────────────┼───────────────────┤ │ │ │ ▼ ▼ │ ┌─────────────────┐ ┌──────────────┐ button_draft() │ button_cancel() │ │action_reverse│ (si draftable) │ │ │ │ └────────┬────────┘ └──────┬───────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌──────────────────┐ │ CANCEL │ │ NUEVO MOVE │ │ (Cancelado) │ │ (tipo inverso) │ └─────────────────┘ └──────────────────┘ ``` --- ## 3. Estados de Pago (payment_state) ``` ┌──────────────┐ │ NOT_PAID │ (Publicado, sin pagos) └──────┬───────┘ │ Reconciliacion parcial ▼ ┌──────────────┐ │ PARTIAL │ (Parcialmente pagado) └──────┬───────┘ │ Pago registrado pero no confirmado ▼ ┌──────────────┐ │ IN_PAYMENT │ (En proceso) └──────┬───────┘ │ Pago completado ▼ ┌──────────────┐ │ PAID │ (Totalmente pagado) └──────────────┘ Estados especiales: ┌──────────────┐ │ REVERSED │ (Asiento revertido) └──────────────┘ ┌──────────────┐ │ BLOCKED │ (Pagos bloqueados manualmente) └──────────────┘ ``` --- ## 4. Flujo de Factura de Cliente ``` 1. CREACION └─ account.move creado con move_type='out_invoice' └─ state = 'draft' └─ payment_state = N/A 2. AGREGAR LINEAS └─ invoice_line_ids con productos, cantidades, impuestos └─ amount_untaxed, amount_tax, amount_total calculados 3. PUBLICAR (action_post) └─ Validar: lineas balanceadas (debito = credito) └─ Generar nombre secuencial └─ state = 'posted' └─ payment_state = 'not_paid' 4. REGISTRAR PAGO └─ Crear account.payment vinculado └─ Reconciliar lineas receivable └─ payment_state = 'partial' o 'paid' 5. (Opcional) REVERTIR └─ action_reverse() crea nota de credito └─ Ambos documentos se reconcilian └─ payment_state = 'reversed' ``` --- ## 5. Flujo de Pago (account.payment) ``` ┌──────────────────┐ │ DRAFT │ │ (Borrador) │ └────────┬─────────┘ │ action_post() │ ▼ ┌──────────────────┐ │ IN_PROCESS │ (Opcional, segun metodo) │ (En proceso) │ └────────┬─────────┘ │ action_validate() │ ▼ ┌──────────────────┐ │ PAID │ │ (Pagado) │ └────────┬─────────┘ │ ┌───┴───┐ │ │ ▼ ▼ ┌────────────┐ ┌──────────────┐ │ CANCELED │ │ REJECTED │ │(Cancelado) │ │ (Rechazado) │ └────────────┘ └──────────────┘ ``` --- ## 6. Metodos de Transicion | Modelo | Metodo | De Estado | A Estado | |--------|--------|-----------|----------| | account.move | action_post() | draft | posted | | account.move | _post() | draft | posted | | account.move | button_draft() | posted | draft | | account.move | button_cancel() | * | cancel | | account.move | action_reverse() | posted | (crea nuevo) | | account.payment | action_post() | draft | in_process/paid | | account.payment | action_validate() | in_process | paid | | account.payment | action_cancel() | * | canceled | | account.payment | action_reject() | * | rejected | | account.payment | action_draft() | canceled | draft | --- ## 7. Reglas de Negocio | ID | Regla | Validacion | Mensaje | |----|-------|------------|---------| | R1 | Balance cero | sum(debit) = sum(credit) | El asiento no cuadra | | R2 | Cuenta requerida | line.account_id presente | Falta cuenta contable | | R3 | Periodo cerrado | date dentro de periodo abierto | Periodo cerrado | | R4 | Diario requerido | journal_id presente | Falta diario | | R5 | Secuencia unica | name unico por empresa | Secuencia duplicada | | R6 | Hash integridad | hash no modificado | Violacion de integridad | --- ## 8. Acciones Automaticas | Trigger | Accion | Condicion | |---------|--------|-----------| | action_post | Generar nombre secuencial | Si name = '/' | | action_post | Calcular hash | Si journal.restrict_mode_hash_table | | Reconciliacion | Actualizar payment_state | Automatico | | Pago creado | Vincular con facturas | Si invoice_ids | --- ## 9. Permisos por Estado | Estado | Editable | Grupos | |--------|----------|--------| | draft | Si | account.group_account_invoice | | posted | No | account.group_account_manager (para revertir) | | cancel | No | - | --- ## 10. Flujo de Reconciliacion ``` FACTURA (out_invoice, posted) │ │ Linea receivable: credit = 1000 │ ▼ PAGO (payment, paid) │ │ Linea receivable: debit = 1000 │ ▼ RECONCILIACION │ ├─► account.partial.reconcile (si parcial) │ amount = 500 │ └─► account.full.reconcile (si completo) Agrupa todas las partidas ``` --- **Referencias:** - account_move.py: action_post, button_draft, button_cancel - account_payment.py: action_post, action_validate