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