From eb0f1c2eb6d0a6bae85b407c7f7642a748ab5f89 Mon Sep 17 00:00:00 2001 From: saptfi2026-bot Date: Tue, 23 Jun 2026 22:56:28 -0300 Subject: [PATCH] feat(cu-extend-include): CU diagram con 5+5 relaciones, specs en voz activa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cambios principales: 1. Diagrama de CU mejorado (D-CU-GEN-002): - 5 <> (subflujos obligatorios): CU-AUTH-001, CU-CALC-001, CU-GENPICK-001, CU-VALLIN-001, CU-GENJOUR-001 - 5 <> (subflujos opcionales/condicionales): CU-VEN-001-EMAIL, CU-VEN-001-DISC, CU-ENT-002-MTO, CU-ENT-004-BACK, CU-FAC-002-VAL 2. 7 especificaciones de CU reescritas en voz activa (todos los verbos provienen de los diagramas de robustez existentes): - CU-VEN-001 Crear presupuesto - CU-VEN-004 Confirmar pedido - CU-ENT-002 Reservar productos - CU-ENT-004 Validar entrega - CU-FAC-001 Crear factura - CU-FAC-002 Publicar factura - CU-FAC-003 Registrar pago 3. Cada CU incluye las secciones pedidas: - Nombre - Objetivo - Pre-condicion - Post-condicion - Pasos trascendentes (en voz activa) - Caminos alternativos (en voz activa) - Excepciones - Reglas de negocio - Relaciones <> y <> - Diagrama de robustez asociado - Tabla de verbos clave (para validar la voz activa) 4. Matriz de trazabilidad actualizada con la tabla de CU includes/extends. Archivos: - diagrams/plantuml/d_cu_gen_002_casos_uso_extend_include.puml - diagrams/png/D-CU-GEN-002 — Casos de Uso con extend e include.png - diagrams/svg/D-CU-GEN-002 — Casos de Uso con extend e include.svg - diagrams/pdf/D-CU-GEN-002 — Casos de Uso con extend e include.pdf - docs/02_casos_uso/*.md (7 specs reescritas) - docs/09_trazabilidad/matriz_trazabilidad.md (actualizada) --- ...02 — Casos de Uso con extend e include.pdf | Bin 0 -> 102803 bytes ...d_cu_gen_002_casos_uso_extend_include.puml | 77 ++++++ ...02 — Casos de Uso con extend e include.png | Bin 0 -> 98159 bytes ...02 — Casos de Uso con extend e include.svg | 181 ++++++++++++++ .../cu_ent_002_reservar_productos.md | 190 ++++++-------- .../cu_ent_004_validar_entrega.md | 191 ++++++-------- docs/02_casos_uso/cu_fac_001_crear_factura.md | 198 ++++++--------- .../cu_fac_002_publicar_factura.md | 199 ++++++--------- .../02_casos_uso/cu_fac_003_registrar_pago.md | 208 ++++++---------- .../cu_ven_001_crear_presupuesto.md | 234 ++++++------------ .../cu_ven_004_confirmar_pedido.md | 228 ++++++----------- docs/09_trazabilidad/matriz_trazabilidad.md | 109 +++----- 12 files changed, 837 insertions(+), 978 deletions(-) create mode 100644 diagrams/pdf/D-CU-GEN-002 — Casos de Uso con extend e include.pdf create mode 100644 diagrams/plantuml/d_cu_gen_002_casos_uso_extend_include.puml create mode 100644 diagrams/png/D-CU-GEN-002 — Casos de Uso con extend e include.png create mode 100644 diagrams/svg/D-CU-GEN-002 — Casos de Uso con extend e include.svg diff --git a/diagrams/pdf/D-CU-GEN-002 — Casos de Uso con extend e include.pdf b/diagrams/pdf/D-CU-GEN-002 — Casos de Uso con extend e include.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc44158404d50d8132793b144d6ccc25674473d0 GIT binary patch literal 102803 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 CU_VEN_001 : crea +V --> CU_VEN_004 : confirma +OA --> CU_ENT_002 : reserva +OA --> CU_ENT_004 : valida +F --> CU_FAC_001 : factura +F --> CU_FAC_002 : publica +F --> CU_FAC_003 : cobra +S --> CU_AUTH : autentica% + +' ─── Includes (5) — flechas con <> ─── +CU_VEN_001 ..> CU_AUTH : <> +CU_VEN_001 ..> CU_CALC : <> +CU_VEN_004 ..> CU_AUTH : <> +CU_VEN_004 ..> CU_GENPICK : <> +CU_FAC_001 ..> CU_VALLIN : <> +CU_FAC_002 ..> CU_GENJOUR : <> + +' ─── Extends (5) — flechas con <> ─── +CU_VEN_001_EMAIL ..> CU_VEN_001 : <> +CU_VEN_001_DISC ..> CU_VEN_001 : <> +CU_ENT_002_MTO ..> CU_ENT_002 : <> +CU_ENT_004_BACK ..> CU_ENT_004 : <> +CU_FAC_002_VAL ..> CU_FAC_002 : <> + +legend right +Proyecto: SAP-TFI-2026 +Agente: saptfi2026 +Metodologia: ICONIX (extend e include) +Fuente: Ingenieria inversa de Odoo 19.0 +5 includes + 5 extends +endlegend + +@enduml \ No newline at end of file diff --git a/diagrams/png/D-CU-GEN-002 — Casos de Uso con extend e include.png b/diagrams/png/D-CU-GEN-002 — Casos de Uso con extend e include.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ef1e850b1aa1d29b6539b024d3eca0483cbb35 GIT binary patch literal 98159 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%0D4Z+IY<@HwO@7{bV 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ⅇA&^H_UymhRi)_3!<vefQ`Q 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 G2~7Z8#X0!^ literal 0 HcmV?d00001 diff --git a/diagrams/svg/D-CU-GEN-002 — Casos de Uso con extend e include.svg b/diagrams/svg/D-CU-GEN-002 — Casos de Uso con extend e include.svg new file mode 100644 index 0000000..b5e00a1 --- /dev/null +++ b/diagrams/svg/D-CU-GEN-002 — Casos de Uso con extend e include.svg @@ -0,0 +1,181 @@ +SAP-TFI-2026 — Casos de Uso del Flujo Comercial (con extend e include)VendedorOperario de AlmacénFacturadorSistemaCU-VEN-001Crear presupuestoCU-VEN-004Confirmar pedidoCU-ENT-002Reservar productosCU-ENT-004Validar entregaCU-FAC-001Crear facturaCU-FAC-002Publicar facturaCU-FAC-003Registrar pagoCU-AUTH-001Validar sesiónde usuarioCU-CALC-001Calcular totalescon impuestosCU-GENPICK-001Generar pickingde entregaCU-VALLIN-001Validar líneaspendientesCU-GENJOUR-001Crear asientocontableCU-VEN-001-EMAILEnviar presupuestopor emailCU-VEN-001-DISCAplicar descuentoCU-ENT-002-MTOGenerar orden decompra (MTO)CU-ENT-004-BACKCrear backorderde entrega parcialCU-FAC-002-VALValidar asientoanormalcreaconfirmareservavalidafacturapublicacobraautentica%«include»«include»«include»«include»«include»«include»«extend»«extend»«extend»«extend»«extend»Proyecto: SAP-TFI-2026Agente: saptfi2026Metodologia: ICONIX (extend e include)Fuente: Ingenieria inversa de Odoo 19.05 includes + 5 extends \ No newline at end of file diff --git a/docs/02_casos_uso/cu_ent_002_reservar_productos.md b/docs/02_casos_uso/cu_ent_002_reservar_productos.md index 0031027..6fb871a 100644 --- a/docs/02_casos_uso/cu_ent_002_reservar_productos.md +++ b/docs/02_casos_uso/cu_ent_002_reservar_productos.md @@ -1,146 +1,108 @@ -# CU-ENT-002 — Reservar productos +# CU-ENT-002 — Reservar Productos + +## Nombre + +**Reservar Productos en Almacén** ## Objetivo -Reservar las cantidades pedidas de cada producto en el almacén, asegurando disponibilidad antes de la entrega. +El sistema (o el operario de almacén) reserva las cantidades pedidas de cada producto, asegurando disponibilidad antes de la entrega. -## Alcance +## Pre-condición -Módulo `stock` de Odoo 19.0. Aplica al modelo `stock.picking`. +- El picking está en estado `draft`, `waiting` o `confirmed`. +- Los productos tienen stock disponible o reglas de reabastecimiento aplicables. -## Nivel +## Post-condición -Primario (esencial para garantizar disponibilidad). +- Las cantidades reservadas quedan en `stock.move.line` con `reserved_availability`. +- El estado del picking cambia a `assigned` (si todas las líneas tienen reserva) o `partially_available` (si hay parcial). -## Actor principal +## Pasos trascendentes (camino feliz, en voz activa) -Sistema (operador de inventario puede forzarlo manualmente). +1. El sistema (o el operario) **dispara** el trigger de reserva (confirmación de pedido o botón manual). +2. El sistema **lee** el picking y sus líneas. +3. El sistema **invoca** `action_assign()` sobre el picking. +4. El sistema **recorre** cada línea del picking. +5. Para cada línea, el sistema **busca** stock disponible en `stock.quant`. +6. El sistema **encuentra** cantidad suficiente. +7. El sistema **reserva** la cantidad creando `stock.move.line`. +8. El sistema **actualiza** `reserved_availability` en la línea. +9. El sistema **actualiza** el estado del picking. +10. El sistema **asigna** el estado `assigned` cuando todas las líneas tienen reserva. -## Actores secundarios +## Caminos alternativos (en voz activa) -- Sistema de Odoo (acción automática al confirmar pedido de venta). +### FA-01 — El sistema no encuentra stock suficiente -## Interesados +1. El sistema **busca** stock disponible y **encuentra** cantidad insuficiente. +2. El sistema **consulta** las reglas de reabastecimiento (`stock.warehouse.orderpoint`). +3. Si hay reglas MTO, el sistema **extiende** con `CU-ENT-002-MTO` para generar orden de compra. +4. El sistema **crea** una `purchase.order` para reabastecer. +5. El sistema **programa** la recepción del producto. +6. El sistema **marca** la línea como `partially_available`. -- Operador de inventario. -- Vendedor (necesita saber si hay stock). -- Cliente (recibe confirmación de entrega). +### FA-02 — El sistema hace reserva parcial -## Disparador +1. El sistema **reserva** parte de las cantidades. +2. El sistema **marca** las líneas con reserva como `assigned`. +3. El sistema **deja** las líneas sin reserva como `partially_available`. +4. El sistema **no cambia** el estado global del picking a `assigned`. -- Confirmación de un pedido de venta (CU-VEN-004) — sistema dispara automáticamente. -- Botón manual "Reservar" en el picking (interfaz de inventario). +### FA-03 — El operario fuerza la reserva manualmente -## Precondiciones +1. El operario **presiona** "Reservar" en el form del picking. +2. El sistema **invoca** `action_assign()`. +3. El sistema **ejecuta** los pasos trascendentes. -- El picking está en estado `draft` o `waiting` o `confirmed`. -- Los productos tienen stock disponible o se puede conseguir (vía reglas de abastecimiento). +## Excepciones (en voz activa) -## Garantías mínimas +### EX-01 — El picking no tiene movimientos -El sistema intenta reservar las cantidades; si no puede, deja el picking en `partially_available` o `confirmed`. +1. El sistema **detecta** que no hay movimientos para reservar. +2. El sistema **muestra** el error "Nothing to check the availability for". -## Garantías de éxito +### EX-02 — No hay stock ni reglas aplicables -- Estado del picking: `assigned`. -- Las cantidades reservadas se reflejan en `stock.move.line` con `reserved_availability`. - -## Flujo principal - -1. Sistema invoca `action_assign()` sobre el picking (ver `addons/stock/models/stock_picking.py:1195`). -2. Sistema busca cantidades disponibles por cada línea. -3. Si hay stock disponible, sistema crea `stock.move.line` con `product_qty = reserved_availability`. -4. Si NO hay stock, sistema busca reglas de reabastecimiento (MTO, MTS, etc.). -5. Si se reabastece, sistema programa una orden de compra. -6. Si nada funciona, sistema deja el picking en estado `partially_available`. -7. Estado del picking cambia a `assigned` cuando todas las líneas tienen reserva. - -## Flujos alternativos - -### FA-01 — Reserva parcial - -1. Sistema reserva parte de las cantidades. -2. Líneas con reserva quedan con `assigned`. -3. Líneas sin reserva quedan con `partially_available`. -4. El picking NO cambia a `assigned` global. - -### FA-02 — Backorder automático - -1. Al validar (CU-ENT-004), si hay líneas pendientes, sistema crea un nuevo picking con backorder. - -## Excepciones - -### EX-01 — Sin stock y sin regla de reabastecimiento - -1. Sistema no encuentra stock ni reglas aplicables. -2. Sistema deja el picking en `partially_available` o `confirmed`. -3. Operador debe decidir acción manual. +1. El sistema **busca** stock y **no encuentra** cantidad. +2. El sistema **consulta** reglas de reabastecimiento y **no encuentra** aplicables. +3. El sistema **deja** el picking en estado `partially_available`. +4. El operario **debe** decidir acción manual. ## Reglas de negocio - **RN-ENT-002**: La reserva no afecta disponibilidad para otros pedidos hasta que se confirme el picking. - **RN-ENT-003**: Las reservas se liberan automáticamente al cancelar el pedido o el picking. -## Datos de entrada +## Relaciones con otros CU -- Picking con líneas (`stock.move`). +- **<> CU-ENT-002-MTO**: Genera orden de compra (MTO) cuando no hay stock (opcional). -## Datos de salida +## Diagrama de robustez asociado -- Stock.move.line con reservas. -- Estado del picking actualizado. -- Posibles órdenes de compra generadas. +`diagrams/plantuml/d_rob_ent_002_reservar_productos.puml` -## Estados involucrados +## Verbos clave (para validar la voz activa) -- `draft` → `confirmed` → `assigned` (reserva completa). -- `draft` → `confirmed` → `partially_available` (reserva parcial). - -## Pantallas involucradas - -- `view_picking_form` — form del picking. -- `view_stock_move_line_tree` — vista tree de movimientos reservados. - -## Modelos de Odoo relacionados - -- `stock.picking` (principal). -- `stock.move` (líneas del picking). -- `stock.move.line` (reservas). -- `stock.warehouse.orderpoint` (reglas de reabastecimiento). -- `procurement.order` (orden de compra generada). - -## Métodos de Odoo relacionados - -- `action_assign()` — entry point (ver `addons/stock/models/stock_picking.py:1195`). -- `action_confirm()` — confirma el picking (ver `addons/stock/models/stock_picking.py:1186`). - -## Permisos requeridos - -- `stock.group_stock_user` — para reservar. -- Sistema automático al confirmar pedido. - -## Configuraciones relevantes - -- Reglas de reabastecimiento (`stock.warehouse.orderpoint`). -- Política de stock (MTO, MTS, etc.). - -## Casos de uso relacionados - -- CU-VEN-004 Confirmar pedido de venta (disparador). -- CU-ENT-004 Validar entrega (siguiente paso). - -## Criterios de aceptación - -- [ ] Al confirmar un pedido, el picking cambia a `assigned` si hay stock. -- [ ] Si no hay stock, el picking queda en `partially_available`. -- [ ] Las reservas se reflejan en `stock.move.line`. - -## Evidencias de ingeniería inversa - -- **EV-COD-010**: `addons/stock/models/stock_picking.py:1195` — método `action_assign`. -- **EV-COD-011**: `addons/stock/models/stock_picking.py:1186` — método `action_confirm`. - -## Supuestos y aspectos pendientes de validación - -- **EV-INF-006**: La lógica interna de `action_assign()` (cómo busca stock, cómo aplica reglas de reabastecimiento) no fue leída en detalle. Solo se confirmó que existe. -- **EV-INF-007**: La integración con `procurement.order` requiere verificación adicional. \ No newline at end of file +| Verbo | Actor | Acción sobre | +|-------|-------|--------------| +| **dispara** | Sistema/Operario | Trigger de reserva | +| **lee** | Sistema | Picking y líneas | +| **invoca** | Sistema | `action_assign()` | +| **recorre** | Sistema | Líneas del picking | +| **busca** | Sistema | Stock en `stock.quant` | +| **encuentra** | Sistema | Cantidad disponible | +| **reserva** | Sistema | `stock.move.line` | +| **actualiza** | Sistema | `reserved_availability`, estado | +| **asigna** | Sistema | Estado `assigned` | +| **consulta** | Sistema | `stock.warehouse.orderpoint` | +| **extiende** | Sistema | `CU-ENT-002-MTO` | +| **crea** | Sistema | `purchase.order` | +| **programa** | Sistema | Recepción | +| **marca** | Sistema | `partially_available` | +| **deja** | Sistema | Estado sin cambio | +| **presiona** | Operario | Botón "Reservar" | +| **ejecuta** | Sistema | Pasos trascendentes | +| **detecta** | Sistema | Movimientos / reglas | +| **muestra** | Sistema | Error | +| **libera** | Sistema | Reservas (al cancelar) | \ No newline at end of file diff --git a/docs/02_casos_uso/cu_ent_004_validar_entrega.md b/docs/02_casos_uso/cu_ent_004_validar_entrega.md index 40a47d8..a178b0b 100644 --- a/docs/02_casos_uso/cu_ent_004_validar_entrega.md +++ b/docs/02_casos_uso/cu_ent_004_validar_entrega.md @@ -1,151 +1,104 @@ -# CU-ENT-004 — Validar entrega +# CU-ENT-004 — Validar Entrega + +## Nombre + +**Validar Entrega de Productos** ## Objetivo -Confirmar la salida física de los productos del almacén, completando el picking y disparando los efectos downstream (actualización de stock, facturación). +El operario de almacén confirma la salida física de los productos del almacén, completando el picking y actualizando el stock cuantitativo. -## Alcance +## Pre-condición -Módulo `stock` de Odoo 19.0. Aplica al modelo `stock.picking`. - -## Nivel - -Primario (esencial para cerrar el flujo de inventario). - -## Actor principal - -Operador de almacén (usuario con permisos `stock.group_stock_user` o `stock.group_stock_manager`). - -## Actores secundarios - -- Sistema de cuenta (puede disparar facturación al validar). - -## Interesados - -- Operador de almacén. -- Cliente (recibe productos). -- Responsable de facturación (recibe señal para facturar). - -## Disparador - -El operador hace clic en "Validar" en la vista form del picking. - -## Precondiciones - -- El picking está en estado `assigned` (con todas las reservas) o `partially_available` (parcial). +- El picking está en estado `assigned` o `partially_available`. - Las cantidades reservadas o a entregar son válidas. -## Garantías mínimas +## Post-condición -El sistema cambia el estado del picking a `done` o muestra un error explicativo. +- El estado del picking cambia a `done`. +- El stock cuantitativo (`stock.quant`) se actualiza con las cantidades entregadas. +- Se crea un backorder si hay cantidades pendientes (opcional). -## Garantías de éxito +## Pasos trascendentes (camino feliz, en voz activa) -- Estado del picking: `done`. -- Stock actualizado (las cantidades reservadas se descuentan del stock disponible). -- Posible creación automática de factura si está configurado. +1. El operario **presiona** "Validar" en el form del picking. +2. El sistema **invoca** `button_validate()`. +3. El sistema **abre** el wizard de validación inmediata (`stock.immediate.transfer`). +4. El operario **confirma** las cantidades reales entregadas. +5. El sistema **actualiza** `stock.move` con las cantidades reales. +6. El sistema **crea** `stock.move.line` definitivos. +7. El sistema **actualiza** el stock cuantitativo en `stock.quant`. +8. El sistema **cambia** el estado del picking a `done`. +9. El sistema **muestra** el resultado al operario. -## Flujo principal +## Caminos alternativos (en voz activa) -1. Operador hace clic en "Validar" → sistema invoca `button_validate()` (ver `addons/stock/models/stock_picking.py:1398`). -2. Sistema muestra wizard de validación con cantidades (permite ajustar). -3. Operador confirma las cantidades reales entregadas. -4. Sistema actualiza `stock.move` con las cantidades reales. -5. Sistema crea `stock.move.line` definitivos. -6. Sistema actualiza el stock cuantitativo (`stock.quant`). -7. Estado del picking cambia a `done`. +### FA-01 — El operario hace entrega parcial (extiende CU-ENT-004-BACK) -## Flujos alternativos +1. El operario **confirma** cantidades menores a las reservadas. +2. El sistema **crea** un nuevo picking (backorder) con las cantidades pendientes. +3. El sistema **completa** el picking original con las cantidades entregadas. +4. El sistema **deja** el backorder en estado `assigned` o `confirmed`. +5. El operario **procesa** el backorder posteriormente. -### FA-01 — Entrega parcial con backorder +### FA-02 — El sistema crea la factura automáticamente -1. Operador entrega solo una parte de las cantidades. -2. Sistema crea un nuevo picking (backorder) con las cantidades pendientes. -3. Picking original queda en `done` con las cantidades entregadas. -4. Backorder queda en `assigned` o `confirmed` para entrega posterior. +1. El sistema **detecta** que está configurada la facturación automática al validar. +2. El sistema **invoca** `_create_invoices()` desde el picking. +3. El sistema **crea** la factura (`account.move`). +4. El sistema **vincula** la salida de stock con la factura. -### FA-02 — Crear factura al validar +### FA-03 — El sistema valida sin wizard -1. Si está configurado, al validar, sistema crea automáticamente una factura (`account.move`). -2. Esto vincula la salida de stock con la facturación inmediata. +1. El operario **presiona** "Validar" sin necesidad de wizard (configuración). +2. El sistema **ejecuta** la validación directa. +3. El sistema **completa** el picking. -## Excepciones +## Excepciones (en voz activa) -### EX-01 — Cantidad excede lo reservado +### EX-01 — La cantidad excede lo reservado -1. Operador intenta entregar más cantidad de la que está reservada. -2. Sistema valida y rechaza si excede. -3. Sistema muestra error claro. +1. El operario **intenta** entregar más cantidad de la reservada. +2. El sistema **valida** y **rechaza** si excede. +3. El sistema **muestra** el error. -### EX-02 — Picking no asignable +### EX-02 — El picking está en estado inválido -1. Picking en estado `draft` o `cancel`. -2. Sistema no permite validar. +1. El picking está en estado `draft` o `cancel`. +2. El sistema **detecta** el estado inválido. +3. El sistema **impide** la validación. ## Reglas de negocio - **RN-ENT-004**: Al validar, las cantidades reservadas pasan a `done`. -- **RN-ENT-005**: Backorder automático configurable vía `stock.backorder_confirmation_policy`. +- **RN-ENT-005**: El backorder automático depende de `stock.backorder_confirmation_policy`. -## Datos de entrada +## Relaciones con otros CU -- Picking en estado `assigned` o `partially_available`. -- Cantidades reales (pueden diferir de las reservadas). +- **<> CU-ENT-004-BACK**: Crea backorder cuando hay entrega parcial (opcional). -## Datos de salida +## Diagrama de robustez asociado -- Picking en `done`. -- Stock actualizado. -- Posible factura generada. +`diagrams/plantuml/d_rob_ven_001_crear_presupuesto.puml` (compartido conceptualmente; este CU no tiene ROB dedicado en la primera iteración) -## Estados involucrados +## Verbos clave (para validar la voz activa) -- `assigned` → `done` (validación completa). -- `partially_available` → `done` (validación parcial, genera backorder). - -## Pantallas involucradas - -- `view_picking_form` — botón "Validar". -- `view_stock_immediate_transfer` — wizard de validación. - -## Modelos de Odoo relacionados - -- `stock.picking` (principal). -- `stock.move` (movimientos). -- `stock.move.line` (líneas definitivas). -- `stock.quant` (stock cuantitativo actualizado). -- `stock.backorder.confirmation` (wizard de backorder). - -## Métodos de Odoo relacionados - -- `button_validate()` — entry point (ver `addons/stock/models/stock_picking.py:1398`). - -## Permisos requeridos - -- `stock.group_stock_user` (puede validar pickings simples). -- `stock.group_stock_manager` (puede validar pickings complejos o cancelar reservas). - -## Configuraciones relevantes - -- `stock.backorder_confirmation_policy` — política de backorder. -- `stock.move.auto_fill` — auto-llenar cantidades. - -## Casos de uso relacionados - -- CU-ENT-002 Reservar productos (precondición). -- CU-FAC-001 Crear factura (downstream, opcional). - -## Criterios de aceptación - -- [ ] Al validar un picking completo, el stock se descuenta correctamente. -- [ ] Al validar parcialmente, se crea un backorder automático. -- [ ] El estado del picking cambia a `done`. - -## Evidencias de ingeniería inversa - -- **EV-COD-012**: `addons/stock/models/stock_picking.py:1398` — método `button_validate`. - -## Supuestos y aspectos pendientes de validación - -- **EV-INF-008**: La lógica interna de `button_validate()` (cómo ajusta cantidades, cómo crea backorder) no fue leída en detalle. -- **EV-INF-009**: La integración con facturación automática al validar requiere verificación. \ No newline at end of file +| Verbo | Actor | Acción sobre | +|-------|-------|--------------| +| **presiona** | Operario | Botón "Validar" | +| **invoca** | Sistema | `button_validate()` | +| **abre** | Sistema | Wizard de validación | +| **confirma** | Operario | Cantidades reales | +| **actualiza** | Sistema | `stock.move`, `stock.quant` | +| **crea** | Sistema | `stock.move.line`, backorder, factura | +| **cambia** | Sistema | Estado del picking | +| **muestra** | Sistema | Resultado | +| **completa** | Sistema | Picking original | +| **deja** | Sistema | Backorder | +| **procesa** | Operario | Backorder | +| **detecta** | Sistema | Configuración de facturación | +| **vincula** | Sistema | Salida de stock con factura | +| **ejecuta** | Sistema | Validación directa | +| **intenta** | Operario | Entregar cantidad | +| **rechaza** | Sistema | Cantidad excedida | +| **impide** | Sistema | Validación | \ No newline at end of file diff --git a/docs/02_casos_uso/cu_fac_001_crear_factura.md b/docs/02_casos_uso/cu_fac_001_crear_factura.md index 79100e5..320a5a5 100644 --- a/docs/02_casos_uso/cu_fac_001_crear_factura.md +++ b/docs/02_casos_uso/cu_fac_001_crear_factura.md @@ -1,154 +1,108 @@ -# CU-FAC-001 — Crear factura desde pedido +# CU-FAC-001 — Crear Factura desde Pedido + +## Nombre + +**Crear Factura desde Pedido de Venta** ## Objetivo -Generar una factura (`account.move`) basada en un pedido de venta confirmado, para registrar la venta en el sistema contable. +El facturador (o el vendedor) genera una factura (`account.move`) basada en un pedido de venta confirmado, para registrar la venta en el sistema contable. -## Alcance - -Módulo `sale` (Odoo 19.0) que invoca a `account` para crear la factura. Aplica al modelo `sale.order`. - -## Nivel - -Primario (esencial para el circuito contable). - -## Actor principal - -Responsable de facturación o sistema (acción automática configurable). - -## Actores secundarios - -- Vendedor (solicita facturación). -- Sistema contable (registra el asiento). - -## Interesados - -- Responsable de facturación. -- Contador (visualiza asientos). -- Cliente (recibe factura). - -## Disparador - -- Manual: vendedor o facturador hace clic en "Crear factura" en el pedido. -- Automático: al validar la entrega (CU-ENT-004), si está configurado. -- Automático: al alcanzar la política de facturación del pedido (`invoice_status`). - -## Precondiciones +## Pre-condición - El pedido está en estado `sale`. -- Hay productos a facturar (no todo está ya facturado). +- Hay productos a facturar (`invoice_status != 'invoiced'`). - El cliente y la compañía tienen configurados los diarios contables. +- El sistema validó las líneas pendientes (`CU-VALLIN-001`). -## Garantías mínimas +## Post-condición -El sistema crea un `account.move` en estado `draft` o muestra un error. - -## Garantías de éxito - -- Factura creada en estado `draft`. -- Línea de factura con `quantity`, `price_unit`, `tax_ids` correctos. +- Existe un `account.move` en estado `draft` con tipo `out_invoice`. +- Las líneas tienen `quantity`, `price_unit`, `tax_ids` correctos. - `invoice_origin` apunta al pedido original. +- El pedido referencia la factura vía `invoice_ids`. -## Flujo principal +## Pasos trascendentes (camino feliz, en voz activa) -1. Usuario hace clic en "Crear factura" → sistema invoca `_create_invoices()` (ver `addons/sale/models/sale_order.py:1550`). -2. Sistema prepara las líneas de factura con `_prepare_invoice()` (ver `addons/sale/models/sale_order.py:1411`). -3. Sistema crea un nuevo `account.move` con tipo `out_invoice` (factura de cliente). -4. Sistema crea las `account.move.line` correspondientes. -5. Sistema vincula el pedido con la factura vía `invoice_ids` (Many2many). -6. Sistema actualiza `invoice_status` del pedido según corresponda. -7. Factura queda en estado `draft`. +1. El facturador **presiona** "Crear Factura" en el form del pedido. +2. El sistema **invoca** `_create_invoices()` sobre el pedido. +3. El sistema **lee** el pedido (`sale.order` en estado `sale`). +4. El sistema **verifica** el `invoice_status` del pedido. +5. El sistema **lee** las líneas pendientes (`sale.order.line`). +6. El sistema **aplica** los impuestos (`account.tax`) a cada línea. +7. Para cada línea, el sistema **crea** un `account.move.line`. +8. El sistema **construye** los valores del invoice con `_prepare_invoice()`. +9. El sistema **crea** un `account.move` en estado `draft`. +10. El sistema **asocia** la factura al pedido vía `invoice_ids`. +11. El sistema **actualiza** `invoice_status` del pedido. +12. El sistema **muestra** la factura creada al facturador. -## Flujos alternativos +## Caminos alternativos (en voz activa) -### FA-01 — Facturación agrupada +### FA-01 — El facturador hace facturación agrupada -1. Sistema agrupa múltiples pedidos en una sola factura (cuando `grouped=True`). -2. Sistema crea una factura con líneas de todos los pedidos. -3. Cada pedido referencia la factura agrupada. +1. El facturador **selecciona** múltiples pedidos. +2. El facturador **presiona** "Crear Factura" con `grouped=True`. +3. El sistema **agrupa** las líneas de todos los pedidos. +4. El sistema **crea** una sola factura con todas las líneas. +5. El sistema **asocia** la factura a cada pedido. -### FA-02 — Facturación parcial +### FA-02 — El facturador hace facturación parcial -1. Sistema factura solo una parte de las cantidades (parcial o downpayment). -2. Resto queda pendiente para futuras facturas. +1. El facturador **selecciona** las líneas específicas a facturar. +2. El sistema **factura** solo esas líneas. +3. El sistema **deja** las demás líneas pendientes. +4. El sistema **actualiza** `invoice_status` a `to invoice` parcial. -## Excepciones +### FA-03 — El sistema crea factura automáticamente al validar entrega -### EX-01 — Todo ya facturado +1. El sistema **detecta** que la entrega fue validada. +2. El sistema **invoca** `_create_invoices()` automáticamente. +3. El sistema **ejecuta** los pasos trascendentes. -1. Sistema detecta que `invoice_status` es `invoiced`. -2. Sistema retorna mensaje "Nothing to invoice". +## Excepciones (en voz activa) -### EX-02 — Compañía sin diario configurado +### EX-01 — No hay nada que facturar -1. Compañía no tiene `currency_id` o `journal_id` configurado. -2. Sistema retorna error de configuración. +1. El sistema **verifica** que `invoice_status` es `invoiced`. +2. El sistema **muestra** el mensaje "Nothing to invoice". + +### EX-02 — La compañía no tiene diario configurado + +1. El sistema **detecta** que `journal_id` está vacío. +2. El sistema **muestra** el error de configuración. ## Reglas de negocio - **RN-FAC-001**: Solo se puede facturar un pedido en estado `sale`. -- **RN-FAC-002**: Una factura no se puede modificar después de publicarse (CU-FAC-002), solo cancelar. +- **RN-FAC-002**: Una factura no se puede modificar después de publicarse. -## Datos de entrada +## Relaciones con otros CU -- Pedido en estado `sale`. -- Cantidades a facturar (pueden ser parciales). +- **<> CU-VALLIN-001**: Valida líneas pendientes antes de facturar. -## Datos de salida +## Diagrama de robustez asociado -- `account.move` (factura) en estado `draft`. -- `account.move.line` (líneas de factura). +`diagrams/plantuml/d_rob_fac_001_crear_factura.puml` -## Estados involucrados +## Verbos clave (para validar la voz activa) -- Factura: `draft` → `posted` (después de CU-FAC-002). - -## Pantallas involucradas - -- `view_sale_order_form` — botón "Crear factura". -- `account.view_move_form` — form de la factura creada. - -## Modelos de Odoo relacionados - -- `sale.order` (origen). -- `sale.order.line` (líneas a facturar). -- `account.move` (factura creada). -- `account.move.line` (líneas de factura). -- `account.tax` (impuestos aplicados). - -## Métodos de Odoo relacionados - -- `_create_invoices()` — entry point (ver `addons/sale/models/sale_order.py:1550`). -- `_prepare_invoice()` — prepara valores (ver `addons/sale/models/sale_order.py:1411`). - -## Permisos requeridos - -- `sales_team.group_sale_salesman_all` o `account.group_account_invoice` — para crear facturas. - -## Configuraciones relevantes - -- Política de facturación del pedido (`invoice_policy`). -- Diarios contables en `res.company`. - -## Casos de uso relacionados - -- CU-VEN-004 Confirmar pedido de venta (precondición). -- CU-ENT-004 Validar entrega (puede disparar). -- CU-FAC-002 Publicar factura (siguiente paso). - -## Criterios de aceptación - -- [ ] Al facturar un pedido confirmado, se crea una factura en estado `draft`. -- [ ] La factura referencia correctamente al pedido origen. -- [ ] Los totales coinciden con las líneas facturadas. - -## Evidencias de ingeniería inversa - -- **EV-COD-013**: `addons/sale/models/sale_order.py:1550` — método `_create_invoices`. -- **EV-COD-014**: `addons/sale/models/sale_order.py:1411` — método `_prepare_invoice`. -- **EV-COD-015**: `addons/account/models/account_move.py:72-73` — definición de `AccountMove` con `_name = 'account.move'`. - -## Supuestos y aspectos pendientes de validación - -- **EV-INF-010**: La lógica de agrupación de facturas (`grouped=True`) no fue leída en detalle. -- **EV-INF-011**: La integración con `_action_invoice_create` (versión legacy) requiere verificación. \ No newline at end of file +| Verbo | Actor | Acción sobre | +|-------|-------|--------------| +| **presiona** | Facturador | Botón "Crear Factura" | +| **invoca** | Sistema | `_create_invoices()` | +| **lee** | Sistema | Pedido, líneas, taxes | +| **verifica** | Sistema | `invoice_status` | +| **aplica** | Sistema | Impuestos a líneas | +| **crea** | Sistema | `account.move`, `account.move.line` | +| **construye** | Sistema | `_prepare_invoice()` | +| **asocia** | Sistema | `invoice_ids` | +| **actualiza** | Sistema | `invoice_status` | +| **muestra** | Sistema | Factura al facturador | +| **selecciona** | Facturador | Múltiples pedidos | +| **agrupa** | Sistema | Líneas agrupadas | +| **factura** | Sistema | Líneas específicas | +| **deja** | Sistema | Líneas pendientes | +| **detecta** | Sistema | Validación de entrega / config | +| **ejecuta** | Sistema | Pasos trascendentes | +| **muestra** | Sistema | Mensaje de error | \ No newline at end of file diff --git a/docs/02_casos_uso/cu_fac_002_publicar_factura.md b/docs/02_casos_uso/cu_fac_002_publicar_factura.md index 3d95def..1e39e10 100644 --- a/docs/02_casos_uso/cu_fac_002_publicar_factura.md +++ b/docs/02_casos_uso/cu_fac_002_publicar_factura.md @@ -1,152 +1,117 @@ -# CU-FAC-002 — Publicar factura +# CU-FAC-002 — Publicar Factura + +## Nombre + +**Publicar Factura (Confirmar y Generar Asiento Contable)** ## Objetivo -Publicar (confirmar) una factura en estado `draft`, generando el asiento contable y haciendo la factura oficial. +El facturador publica una factura en estado `draft`, generando el asiento contable y haciendo la factura oficial. -## Alcance - -Módulo `account` de Odoo 19.0. Aplica al modelo `account.move`. - -## Nivel - -Primario (esencial — la factura no tiene valor contable hasta publicarse). - -## Actor principal - -Responsable de facturación o Contador (usuario con permisos `account.group_account_invoice`). - -## Actores secundarios - -- Sistema contable (genera asiento). - -## Interesados - -- Contador (visualiza asientos). -- Cliente (recibe factura oficial). -- Administración (reportes contables). - -## Disparador - -El usuario hace clic en "Confirmar" en la vista form de la factura. - -## Precondiciones +## Pre-condición - La factura está en estado `draft`. - Las líneas tienen impuestos y cuentas contables válidas. - El diario contable está configurado. +- La factura pasó las validaciones (`CU-VALLIN-001`). -## Garantías mínimas +## Post-condición -El sistema cambia el estado de la factura o muestra un error explicativo. +- El estado de la factura cambia a `posted`. +- El asiento contable queda generado. +- `invoice_date` tiene la fecha de publicación. +- El número de factura queda asignado por la secuencia del diario. -## Garantías de éxito +## Pasos trascendentes (camino feliz, en voz activa) -- Estado de la factura: `posted`. -- Asiento contable generado (`account.move` con `state='posted'`). -- `invoice_date` con la fecha de publicación. -- Número de factura asignado por secuencia. +1. El facturador **presiona** "Confirmar" en el form de la factura. +2. El sistema **invoca** `action_post()` sobre la factura. +3. El sistema **valida** la factura (líneas, impuestos, cuentas). +4. El sistema **verifica** que las líneas tengan cuentas contables asignadas. +5. El sistema **verifica** que los totales sean correctos. +6. El sistema **genera** el asiento contable (una línea por cada movimiento). +7. El sistema **asigna** el número de factura por la secuencia del diario. +8. El sistema **actualiza** `state` a `posted`. +9. El sistema **actualiza** `invoice_date` a la fecha actual. +10. El sistema **publica** la factura oficialmente. -## Flujo principal +## Caminos alternativos (en voz activa) -1. Usuario hace clic en "Confirmar" → sistema invoca `action_post()` (ver `addons/account/models/account_move.py:6101`). -2. Sistema valida la factura: - - Líneas con productos y precios válidos. - - Impuestos aplicados correctamente. - - Cuentas contables válidas. -3. Si pasa validación, sistema genera el asiento contable (una línea por cada movimiento). -4. Sistema asigna número de factura por secuencia del diario. -5. Sistema actualiza `state` a `posted`. -6. Sistema actualiza `invoice_date` a la fecha actual. +### FA-01 — El facturador hace publicación masiva -## Flujos alternativos +1. El facturador **selecciona** múltiples facturas en estado `draft`. +2. El facturador **presiona** "Confirmar" (acción masiva). +3. El sistema **itera** sobre cada factura. +4. Para cada factura, el sistema **ejecuta** los pasos trascendentes. +5. Si alguna falla, el sistema **muestra** el error y **detiene** el proceso. -### FA-01 — Publicación masiva +### FA-02 — El facturador revierte a draft -1. Usuario selecciona múltiples facturas draft. -2. Sistema itera y publica cada una. -3. Si alguna falla, sistema muestra error y detiene. +1. El facturador **detecta** un error en la factura publicada. +2. El facturador **presiona** "Restablecer a borrador". +3. El sistema **invoca** `action_post_draft()`. +4. El sistema **revierte** el estado a `draft`. +5. El sistema **permite** la edición de la factura. +6. El facturador **corrige** los datos. +7. El facturador **vuelve** a publicar. -### FA-02 — Reversión a draft +### FA-03 — El sistema valida asientos anormales (extiende CU-FAC-002-VAL) -1. Si la factura necesita corrección, usuario con permisos puede invocar `action_post_draft()`. -2. Sistema revierte a `draft`, permite edición. -3. Vuelve a publicar cuando esté listo. +1. El sistema **detecta** montos o fechas anormales. +2. El sistema **invoca** el wizard `validate.account.move`. +3. El sistema **abre** el wizard de validación. +4. El facturador **confirma** la validación. +5. El sistema **publica** la factura. -## Excepciones +## Excepciones (en voz activa) -### EX-01 — Líneas sin cuenta contable +### EX-01 — Alguna línea no tiene cuenta contable -1. Alguna línea no tiene cuenta contable asignada. -2. Sistema muestra error "Cuenta contable requerida". +1. El sistema **detecta** que alguna línea no tiene cuenta asignada. +2. El sistema **muestra** el error "Cuenta contable requerida". -### EX-02 — Factura con totales en cero +### EX-02 — La factura tiene totales en cero -1. Factura con líneas pero totales son 0. -2. Sistema puede advertir o bloquear según configuración. +1. El sistema **detecta** que los totales son 0. +2. El sistema **advierte** o **bloquea** según configuración. ## Reglas de negocio - **RN-FAC-003**: Una factura publicada no se puede borrar, solo revertir a draft. - **RN-FAC-004**: Al publicar, se crea un asiento contable con la fecha del día. -## Datos de entrada +## Relaciones con otros CU -- Factura en estado `draft`. +- **<> CU-GENJOUR-001**: Crea el asiento contable al publicar. +- **<> CU-FAC-002-VAL**: Valida asientos anormales (opcional). -## Datos de salida +## Diagrama de robustez asociado -- Factura en estado `posted`. -- Asiento contable generado. -- Número de factura asignado. +(No tiene ROB dedicado en la primera iteración; consultar `d_rob_fac_001_crear_factura.puml` como referencia conceptual) -## Estados involucrados +## Verbos clave (para validar la voz activa) -- `draft` → `posted` (transición principal). -- `posted` → `draft` (reversión, vía `action_post_draft()`). - -## Pantallas involucradas - -- `account.view_move_form` — botón "Confirmar". - -## Modelos de Odoo relacionados - -- `account.move` (factura + asiento). -- `account.move.line` (líneas, ahora con cuenta contable). -- `account.journal` (diario contable). - -## Métodos de Odoo relacionados - -- `action_post()` — entry point (ver `addons/account/models/account_move.py:6101`). -- `action_post_draft()` — reversión. - -## Permisos requeridos - -- `account.group_account_invoice` — para publicar. - -## Configuraciones relevantes - -- Secuencia de facturas en el diario (`account.journal.sequence_id`). -- Configuración de impuestos y cuentas. - -## Casos de uso relacionados - -- CU-FAC-001 Crear factura (precondición). -- CU-FAC-003 Registrar pago (siguiente paso). - -## Criterios de aceptación - -- [ ] Una factura en `draft` puede publicarse si pasa las validaciones. -- [ ] Al publicar, se genera el asiento contable. -- [ ] El número de factura es único y secuencial. - -## Evidencias de ingeniería inversa - -- **EV-COD-016**: `addons/account/models/account_move.py:6101` — método `action_post`. -- **EV-COD-017**: `addons/account/models/account_move.py:72-73` — definición de `AccountMove` con `_name = 'account.move'`. -- **EV-COD-018**: `addons/account/models/account_move.py:129` — campo `state = fields.Selection(...)`. - -## Supuestos y aspectos pendientes de validación - -- **EV-INF-012**: La lógica interna de `action_post()` (cómo genera el asiento, cómo asigna cuentas) no fue leída en detalle. -- **EV-INF-013**: Las validaciones específicas (impuestos, cuentas, totales) requieren lectura adicional. \ No newline at end of file +| Verbo | Actor | Acción sobre | +|-------|-------|--------------| +| **presiona** | Facturador | Botón "Confirmar" | +| **invoca** | Sistema | `action_post()` | +| **valida** | Sistema | Líneas, impuestos, cuentas | +| **verifica** | Sistema | Cuentas contables, totales | +| **genera** | Sistema | Asiento contable | +| **asigna** | Sistema | Número de factura | +| **actualiza** | Sistema | `state`, `invoice_date` | +| **publica** | Sistema | Factura | +| **selecciona** | Facturador | Múltiples facturas | +| **iterar** | Sistema | Lista de facturas | +| **ejecuta** | Sistema | Pasos trascendentes | +| **muestra** | Sistema | Error | +| **detiene** | Sistema | Proceso | +| **detecta** | Facturador/Sistema | Error / monto anormal | +| **revierte** | Sistema | Estado a `draft` | +| **permite** | Sistema | Edición | +| **corrige** | Facturador | Datos | +| **vuelve** | Facturador | Publicar | +| **abre** | Sistema | Wizard de validación | +| **confirma** | Facturador | Validación | +| **advierte** | Sistema | Totales en 0 | +| **bloquea** | Sistema | Publicación | \ No newline at end of file diff --git a/docs/02_casos_uso/cu_fac_003_registrar_pago.md b/docs/02_casos_uso/cu_fac_003_registrar_pago.md index 65a969a..b2a002b 100644 --- a/docs/02_casos_uso/cu_fac_003_registrar_pago.md +++ b/docs/02_casos_uso/cu_fac_003_registrar_pago.md @@ -1,160 +1,112 @@ -# CU-FAC-003 — Registrar pago +# CU-FAC-003 — Registrar Pago + +## Nombre + +**Registrar Pago de Factura** ## Objetivo -Registrar el pago de una factura, marcando el saldo como cobrado y actualizando el estado de pago del cliente. +El facturador (o el contador) registra el pago de una factura, marcando el saldo como cobrado y actualizando el estado de pago del cliente. -## Alcance - -Módulo `account` de Odoo 19.0. Aplica al modelo `account.move`. - -## Nivel - -Primario (cierra el circuito de venta). - -## Actor principal - -Responsable de facturación o Contador (usuario con permisos `account.group_account_invoice` o `account.group_account_user`). - -## Actores secundarios - -- Sistema bancario (si hay integración). -- Cliente (origen del pago). - -## Interesados - -- Contador (visualiza estado de pagos). -- Cliente (ve su saldo actualizado). - -## Disparador - -El usuario hace clic en "Registrar pago" en la factura. - -## Precondiciones +## Pre-condición - La factura está en estado `posted`. -- La factura no está completamente pagada (o se requiere un pago parcial). +- La factura no está completamente pagada. +- El diario de banco/caja está configurado. -## Garantías mínimas +## Post-condición -El sistema crea un `account.payment` o equivalente y actualiza el estado de pago. +- Existe un `account.payment` registrado. +- El asiento contable del pago queda generado. +- El `payment_state` de la factura se actualiza (`paid`, `partial`, o `in_payment`). -## Garantías de éxito +## Pasos trascendentes (camino feliz, en voz activa) -- Pago registrado en el sistema. -- Estado de pago de la factura: `paid` (si es pago completo) o `partial` (si parcial). -- Asiento contable de pago generado. +1. El facturador **presiona** "Registrar pago" en el form de la factura. +2. El sistema **invoca** `action_register_payment()`. +3. El sistema **abre** el wizard `account.payment.register`. +4. El facturador **completa** los datos del pago (fecha, diario, método, monto). +5. El facturador **confirma** el wizard. +6. El sistema **crea** un `account.payment` con los datos ingresados. +7. El sistema **genera** el asiento contable del pago (débito banco, crédito cliente). +8. El sistema **reconcilia** el pago con la factura. +9. El sistema **actualiza** `payment_state` de la factura a `paid`. +10. El sistema **muestra** el pago registrado. -## Flujo principal +## Caminos alternativos (en voz activa) -1. Usuario hace clic en "Registrar pago" → sistema invoca `action_register_payment()` (ver `addons/account/models/account_move.py:6022`). -2. Sistema abre wizard de registro de pago (`account.payment.register`). -3. Usuario completa: - - Fecha del pago. - - Diario de banco/caja. - - Método de pago. - - Monto (por defecto, saldo pendiente). -4. Usuario confirma. -5. Sistema crea `account.payment` con el monto y método. -6. Sistema genera el asiento contable del pago (débito a banco, crédito a cuenta del cliente). -7. Sistema reconcilia el pago con la factura. -8. Sistema actualiza `payment_state` de la factura: - - `paid` si el pago completa el saldo. - - `partial` si es parcial. - - `in_payment` si está en proceso (cheques, etc.). +### FA-01 — El facturador hace pago parcial -## Flujos alternativos +1. El facturador **ingresa** un monto menor al saldo pendiente. +2. El sistema **crea** el pago parcial. +3. El sistema **actualiza** `payment_state` a `partial`. +4. El sistema **deja** saldo pendiente para pagos futuros. +5. El facturador **registra** más pagos hasta completar el saldo. -### FA-01 — Pago parcial +### FA-02 — El facturador hace pago múltiple -1. Usuario registra un pago menor al saldo. -2. Sistema crea el pago parcial. -3. `payment_state` queda en `partial`. -4. Queda saldo pendiente para pagos futuros. +1. El facturador **registra** varios pagos para la misma factura. +2. Para cada pago, el sistema **ejecuta** los pasos trascendentes. +3. El sistema **acumula** los pagos. +4. Cuando se completa el saldo, el sistema **actualiza** `payment_state` a `paid`. -### FA-02 — Pago múltiple +### FA-03 — El sistema integra con pasarela de pago -1. Usuario registra varios pagos para la misma factura. -2. Cada pago genera un `account.payment` separado. -3. Cuando se completa el saldo, `payment_state` pasa a `paid`. +1. El sistema **detecta** que hay una pasarela configurada. +2. El sistema **redirige** al cliente a la pasarela. +3. El sistema **recibe** la confirmación de pago. +4. El sistema **crea** el `account.payment` automáticamente. -## Excepciones +## Excepciones (en voz activa) -### EX-01 — Factura no posted +### EX-01 — La factura no está posted -1. Factura en estado `draft` o `cancel`. -2. Sistema no permite registrar pago. +1. La factura está en estado `draft` o `cancel`. +2. El sistema **detecta** el estado inválido. +3. El sistema **impide** el registro del pago. -### EX-02 — Pago mayor al saldo +### EX-02 — El pago excede el saldo -1. Usuario intenta pagar más de lo adeudado. -2. Sistema advierte o rechaza según configuración. +1. El facturador **intenta** pagar más de lo adeudado. +2. El sistema **advierte** o **rechaza** según configuración. +3. El sistema **muestra** el mensaje de error. ## Reglas de negocio - **RN-FAC-005**: Una factura pagada no puede recibir más pagos (saldo = 0). -- **RN-FAC-006**: El estado `payment_state` se calcula automáticamente en función de los pagos. +- **RN-FAC-006**: El estado `payment_state` se calcula automáticamente. -## Datos de entrada +## Relaciones con otros CU -- Factura en estado `posted`. -- Datos del pago (fecha, diario, método, monto). +(No tiene relaciones `<>` o `<>` explícitas en este CU; es terminal del flujo) -## Datos de salida +## Diagrama de robustez asociado -- `account.payment` creado. -- Asiento contable de pago. -- `payment_state` actualizado. +(No tiene ROB dedicado en la primera iteración) -## Estados involucrados +## Verbos clave (para validar la voz activa) -- Factura: `posted` → `payment_state=in_payment` → `payment_state=paid`. -- O `posted` → `payment_state=partial` → `payment_state=paid` (pagos múltiples). - -## Pantallas involucradas - -- `account.view_move_form` — botón "Registrar pago". -- `account.view_account_payment_form` — wizard. - -## Modelos de Odoo relacionados - -- `account.move` (factura). -- `account.payment` (pago). -- `account.payment.register` (wizard). -- `account.journal` (diario de banco). -- `account.account` (cuentas contables). - -## Métodos de Odoo relacionados - -- `action_register_payment()` — entry point (ver `addons/account/models/account_move.py:6022`). - -## Permisos requeridos - -- `account.group_account_invoice` o `account.group_account_user`. - -## Configuraciones relevantes - -- Diarios de banco/caja. -- Métodos de pago disponibles. -- Configuración de reconciliación. - -## Casos de uso relacionados - -- CU-FAC-002 Publicar factura (precondición). - -## Criterios de aceptación - -- [ ] Una factura posted puede recibir un pago. -- [ ] Al pagar el saldo completo, `payment_state` cambia a `paid`. -- [ ] Los pagos parciales dejan `payment_state=partial`. - -## Evidencias de ingeniería inversa - -- **EV-COD-019**: `addons/account/models/account_move.py:6022` — método `action_register_payment`. -- **EV-COD-020**: `addons/account/models/account_move.py:600` — campo `payment_state = fields.Selection(...)` (probablemente con valores como `not_paid`, `in_payment`, `paid`, `partial`, `reversed`). - -## Supuestos y aspectos pendientes de validación - -- **EV-INF-014**: Los valores exactos de `payment_state` requieren verificación leyendo las opciones del campo. -- **EV-INF-015**: La lógica de reconciliación requiere lectura adicional. -- **EV-INF-016**: El método `action_register_payment` puede haber cambiado entre versiones. \ No newline at end of file +| Verbo | Actor | Acción sobre | +|-------|-------|--------------| +| **presiona** | Facturador | Botón "Registrar pago" | +| **invoca** | Sistema | `action_register_payment()` | +| **abre** | Sistema | Wizard de pago | +| **completa** | Facturador | Datos del pago | +| **confirma** | Facturador | Wizard | +| **crea** | Sistema | `account.payment` | +| **genera** | Sistema | Asiento contable | +| **reconcilia** | Sistema | Pago con factura | +| **actualiza** | Sistema | `payment_state` | +| **muestra** | Sistema | Pago registrado | +| **ingresa** | Facturador | Monto parcial | +| **deja** | Sistema | Saldo pendiente | +| **registra** | Facturador | Más pagos | +| **ejecuta** | Sistema | Pasos trascendentes | +| **acumula** | Sistema | Pagos | +| **detecta** | Sistema | Pasarela / estado | +| **redirige** | Sistema | Cliente a pasarela | +| **recibe** | Sistema | Confirmación de pago | +| **impide** | Sistema | Registro de pago | +| **intenta** | Facturador | Pagar de más | +| **advierte** | Sistema | Pago excedido | +| **rechaza** | Sistema | Pago excedido | \ No newline at end of file diff --git a/docs/02_casos_uso/cu_ven_001_crear_presupuesto.md b/docs/02_casos_uso/cu_ven_001_crear_presupuesto.md index bf8b5de..f6b980c 100644 --- a/docs/02_casos_uso/cu_ven_001_crear_presupuesto.md +++ b/docs/02_casos_uso/cu_ven_001_crear_presupuesto.md @@ -1,186 +1,100 @@ -# CU-VEN-001 — Crear presupuesto +# CU-VEN-001 — Crear Presupuesto + +## Nombre + +**Crear Presupuesto de Venta** ## Objetivo -Crear un presupuesto de venta (sales quotation) para un cliente en estado `draft`. +El vendedor registra un presupuesto de venta en estado `draft` para un cliente, con sus líneas de productos, precios y totales calculados. -## Alcance +## Pre-condición -Módulo `sale` de Odoo 19.0. Aplica al modelo `sale.order`. - -## Nivel - -Primario (esencial para el proceso de ventas). - -## Actor principal - -Vendedor (usuario con permisos `sales_team.group_sale_salesman`). - -## Actores secundarios - -- Cliente (consulta estado). -- Servicio de correo (envía presupuesto). - -## Interesados - -- Responsable de ventas (aprueba descuentos). -- Administración (visualiza pipeline). - -## Disparador - -El vendedor hace clic en "Nuevo" desde la vista kanban o tree de `sale.order`, o desde el menú Ventas → Presupuestos. - -## Precondiciones - -- El usuario tiene acceso al módulo `sale`. +- El vendedor tiene sesión iniciada (`CU-AUTH-001`). - Existe al menos un cliente activo en `res.partner`. -- El catálogo de productos contiene productos publicables. -- La compañía del usuario tiene configurada la secuencia de presupuestos en `ir.sequence`. +- El catálogo contiene productos publicables en `product.product`. +- La compañía tiene configurada la secuencia de presupuestos en `ir.sequence`. -## Garantías mínimas +## Post-condición -El sistema crea un registro `sale.order` en estado `draft` sin errores. +- Existe un registro `sale.order` en estado `draft` con `name` único. +- Las líneas tienen productos, cantidades, precios unitarios, impuestos y descuentos. +- Los totales (`amount_untaxed`, `amount_tax`, `amount_total`) están calculados. +- El cliente tiene una lista de precios asociada por defecto. -## Garantías de éxito +## Pasos trascendentes (camino feliz, en voz activa) -- El presupuesto tiene un `name` único asignado por la secuencia `sale.order`. -- Los totales se calculan automáticamente con impuestos. -- Se puede confirmar el presupuesto (cambio de estado a `sale`). +1. El vendedor **presiona** "Nuevo" desde el menú Ventas → Presupuestos. +2. El sistema **crea** un `sale.order` en estado `draft` con `name` provisional. +3. El sistema **abre** el form `view_sale_order_form`. +4. El vendedor **selecciona** el cliente. +5. El sistema **carga** la lista de precios por defecto del cliente. +6. El vendedor **agrega** líneas con productos y cantidades. +7. El sistema **actualiza** `partner_id` y `order_line` en `sale.order`. +8. El sistema **calcula** los totales con `_compute_amounts()`. +9. El sistema **muestra** los totales en el form. +10. El vendedor **guarda** el presupuesto. -## Flujo principal +## Caminos alternativos (en voz activa) -1. Vendedor hace clic en "Nuevo" → sistema crea `sale.order` en estado `draft`. -2. Sistema asigna `name` con valor por defecto `_("New")` (será reemplazado por la secuencia al guardar). -3. Vendedor selecciona `partner_id` → sistema carga `pricelist_id` por defecto del cliente. -4. Vendedor agrega líneas en `sale.order.line` con productos. -5. Sistema calcula `amount_untaxed`, `amount_tax`, `amount_total` (método `_compute_amounts()`). -6. Vendedor hace clic en "Enviar por email" → sistema invoca `action_quotation_send()` que abre un wizard de email. -7. Estado cambia de `draft` a `sent` (al confirmar el envío). -8. Vendedor confirma → estado cambia a `sale` (ver CU-VEN-004). +### FA-01 — El vendedor envía el presupuesto por email -## Flujos alternativos +1. El vendedor **presiona** "Enviar por email". +2. El sistema **invoca** `action_quotation_send()`. +3. El sistema **valida** la distribución analítica. +4. El sistema **marca** el presupuesto como enviado. +5. El sistema **cambia** el estado de `draft` a `sent`. +6. El sistema **crea** un `mail.compose.message`. +7. El sistema **genera** el `mail.mail`. +8. El sistema **envía** el email al cliente. -### FA-01 — Aplicar descuento +### FA-02 — El vendedor aplica un descuento (incluye CU-VEN-001-DISC) -1. Vendedor edita `discount` en una línea de `sale.order.line`. -2. Sistema recalcula el monto de la línea. -3. Si supera el descuento máximo permitido, sistema puede bloquear o notificar. +1. El vendedor **edita** el campo `discount` en una línea. +2. El sistema **recalcula** el subtotal de la línea. +3. Si el descuento supera el máximo permitido, el sistema **bloquea** o **notifica**. -### FA-02 — Duplicar presupuesto +### FA-03 — El vendedor duplica el presupuesto -1. Vendedor selecciona un presupuesto existente y elige "Duplicar". -2. Sistema crea un nuevo `sale.order` copiando las líneas. -3. Estado del nuevo registro: `draft`. - -## Excepciones - -### EX-01 — Cliente sin dirección de entrega - -1. Al intentar confirmar (estado `sale`), sistema valida que exista `partner_shipping_id`. -2. Si no existe, sistema muestra error "Configure la dirección de entrega". - -### EX-02 — Líneas sin producto - -1. Al confirmar, sistema valida que cada línea tenga `product_id`. -2. Si falta, sistema muestra error "Some order lines are missing a product". +1. El vendedor **selecciona** un presupuesto existente. +2. El vendedor **presiona** "Duplicar". +3. El sistema **crea** un nuevo `sale.order` copiando las líneas. +4. El sistema **asigna** estado `draft` al nuevo presupuesto. ## Reglas de negocio -- **RN-VEN-001**: `state` solo puede pasar de `draft` → `sent` → `sale`, o a `cancel`. -- **RN-VEN-002**: El campo `name` se genera automáticamente por la secuencia configurada en la compañía. -- **RN-VEN-003**: Descuentos mayores al 10% (configurable) pueden requerir aprobación. +- **RN-VEN-001**: El estado `state` solo puede pasar de `draft` → `sent` → `sale`, o a `cancel`. +- **RN-VEN-002**: El campo `name` se genera por la secuencia configurada en la compañía. +- **RN-VEN-003**: Los descuentos mayores al 10% pueden requerir aprobación. -## Datos de entrada +## Relaciones con otros CU -- Cliente (`partner_id`). -- Compañía (`company_id`). -- Moneda (`currency_id`). -- Lista de precios (`pricelist_id`, opcional). -- Líneas (`order_line` con productos). +- **<> CU-AUTH-001**: Valida la sesión antes de crear el presupuesto. +- **<> CU-CALC-001**: Calcula los totales con impuestos. +- **<> CU-VEN-001-EMAIL**: Envía el presupuesto por email (opcional). +- **<> CU-VEN-001-DISC**: Aplica descuento (opcional). -## Datos de salida +## Diagrama de robustez asociado -- Registro `sale.order` persistido. -- Líneas `sale.order.line` relacionadas. -- Correo enviado (opcional). +`diagrams/plantuml/d_rob_ven_001_crear_presupuesto.puml` -## Estados involucrados +## Verbos clave (para validar la voz activa) -- `draft` (Quotation) — estado inicial. -- `sent` (Quotation Sent) — al enviar por email. -- `sale` (Sales Order) — al confirmar. -- `cancel` (Cancelled) — al cancelar. - -## Pantallas involucradas - -- `view_sale_order_form` — form principal (ver `addons/sale/views/sale_order_view.xml`). -- `view_sale_order_kanban` — vista kanban (ver mismo archivo). -- `view_sale_order_tree` — vista tree (listado). - -## Modelos de Odoo relacionados - -- `sale.order` (principal, `_name = 'sale.order'`). -- `sale.order.line` (líneas). -- `res.partner` (cliente). -- `product.product` (productos). -- `account.tax` (impuestos). -- `product.pricelist` (lista de precios). - -## Métodos de Odoo relacionados - -- `action_quotation_send()` — abre wizard de email (ver `addons/sale/models/sale_order.py:1067`). -- `action_confirm()` — confirma el pedido (ver `addons/sale/models/sale_order.py:1166`). -- `action_cancel()` — cancela el pedido (ver `addons/sale/models/sale_order.py:1324`). -- `_compute_amounts()` — calcula totales (ver `addons/sale/models/sale_order.py:513`). - -## Permisos requeridos - -- `sales_team.group_sale_salesman` — para crear y editar presupuestos. -- `sales_team.group_sale_manager` — para aprobar descuentos y confirmar pedidos. - -## Configuraciones relevantes - -- Política de facturación en `res.company` (`sale_order_template_id`). -- Secuencia de presupuestos en `ir.sequence` (`sale.order.template` o equivalente según versión). -- Configuración de descuentos máximos. - -## Casos de uso relacionados - -- CU-VEN-002 Modificar presupuesto. -- CU-VEN-003 Enviar presupuesto al cliente. -- CU-VEN-004 Confirmar pedido de venta. - -## Criterios de aceptación - -- [ ] El vendedor puede crear un presupuesto en menos de 5 clicks. -- [ ] El sistema valida la dirección de entrega antes de confirmar. -- [ ] El correo al cliente incluye el PDF del presupuesto. -- [ ] Los totales se calculan automáticamente. - -## Evidencias de ingeniería inversa - -- **EV-COD-001**: `addons/sale/models/sale_order.py:34-36` — definición de la clase `SaleOrder` con `_name = 'sale.order'`. - ```python - class SaleOrder(models.Model): - _name = 'sale.order' - _inherit = ['portal.mixin', 'product.catalog.mixin', 'mail.thread', 'mail.activity.mixin', 'utm.mixin', 'account.document.import.mixin'] - _description = "Sales Order" - ``` -- **EV-COD-002**: `addons/sale/models/sale_order.py:26-31` — definición de `SALE_ORDER_STATE`. - ```python - SALE_ORDER_STATE = [ - ('draft', "Quotation"), - ('sent', "Quotation Sent"), - ('sale', "Sales Order"), - ('cancel', "Cancelled"), - ] - ``` -- **EV-COD-003**: `addons/sale/models/sale_order.py:1067` — método `action_quotation_send`. -- **EV-COD-004**: `addons/sale/models/sale_order.py:1166` — método `action_confirm`. -- **EV-COD-005**: `addons/sale/models/sale_order.py:54-58` — campo `name` con default `_("New")`. - -## Supuestos y aspectos pendientes de validación - -- **EV-INF-001**: El wizard de email usa `mail.compose.message` (verificado por contexto en `action_quotation_send`). -- **EV-INF-002**: La secuencia `sale.order` puede variar según configuración de la compañía. -- **EV-INF-003**: La validación de descuento máximo depende de configuración que requiere verificación. \ No newline at end of file +| Verbo | Actor | Acción sobre | +|-------|-------|--------------| +| **presiona** | Vendedor | Botón "Nuevo" | +| **crea** | Sistema | `sale.order` (draft) | +| **abre** | Sistema | `view_sale_order_form` | +| **selecciona** | Vendedor | Cliente | +| **carga** | Sistema | Lista de precios | +| **agrega** | Vendedor | Líneas | +| **actualiza** | Sistema | `partner_id`, `order_line` | +| **calcula** | Sistema | `_compute_amounts()` | +| **muestra** | Sistema | Totales en form | +| **guarda** | Vendedor | Presupuesto | +| **invoca** | Sistema | `action_quotation_send()` | +| **valida** | Sistema | Distribución analítica | +| **marca** | Sistema | `mark_so_as_sent` | +| **cambia** | Sistema | Estado `draft` → `sent` | +| **genera** | Sistema | `mail.mail` | +| **envía** | Sistema | Email al cliente | \ No newline at end of file diff --git a/docs/02_casos_uso/cu_ven_004_confirmar_pedido.md b/docs/02_casos_uso/cu_ven_004_confirmar_pedido.md index 02ac917..d9c3cd3 100644 --- a/docs/02_casos_uso/cu_ven_004_confirmar_pedido.md +++ b/docs/02_casos_uso/cu_ven_004_confirmar_pedido.md @@ -1,183 +1,111 @@ -# CU-VEN-004 — Confirmar pedido de venta +# CU-VEN-004 — Confirmar Pedido + +## Nombre + +**Confirmar Pedido de Venta** ## Objetivo -Confirmar un presupuesto, transformándolo de `draft`/`sent` a `sale` (Sales Order) y disparando el flujo downstream (reserva de stock, preparación, facturación). +El vendedor transforma un presupuesto en estado `draft` o `sent` a un pedido de venta confirmado (`state='sale'`), disparando el flujo downstream de stock y facturación. -## Alcance - -Módulo `sale` de Odoo 19.0. Aplica al modelo `sale.order`. - -## Nivel - -Primario (esencial — dispara todo el flujo operativo). - -## Actor principal - -Vendedor o Responsable de ventas (usuario con permisos `sales_team.group_sale_salesman` o `sales_team.group_sale_manager`). - -## Actores secundarios - -- Sistema de stock (reserva cantidades). -- Sistema de cuenta (crea factura al confirmar). - -## Interesados - -- Operador de inventario (debe preparar pedidos). -- Responsable de facturación (debe emitir facturas). -- Administración (visualiza pipeline confirmado). - -## Disparador - -El vendedor hace clic en "Confirmar" en la vista form del pedido. - -## Precondiciones +## Pre-condición +- El vendedor tiene sesión iniciada (`CU-AUTH-001`). - El pedido está en estado `draft` o `sent`. -- Cada línea tiene un `product_id` definido (validado por `_confirmation_error_message()`). -- El cliente tiene una dirección de entrega válida. -- Si `sale.group_auto_done_setting` está activo, el pedido se lockea automáticamente al confirmar. +- Cada línea tiene un `product_id` definido. +- El cliente tiene una dirección de entrega válida (`partner_shipping_id`). -## Garantías mínimas +## Post-condición -El sistema cambia el estado del pedido de `draft`/`sent` a `sale` o muestra un error explicativo. - -## Garantías de éxito - -- Estado del pedido: `sale`. -- `date_order` queda con la fecha/hora actual. +- El pedido queda en estado `sale`. +- El campo `date_order` queda con la fecha/hora de confirmación. - Si `sale.group_auto_done_setting` está activo, el pedido queda `locked=True`. -- Se ejecutan los efectos downstream (`_action_confirm`): reserva de stock, programación de entregas. +- Se generan las entregas (`stock.picking`) automáticamente. -## Flujo principal +## Pasos trascendentes (camino feliz, en voz activa) -1. Vendedor hace clic en "Confirmar" → sistema invoca `action_confirm()`. -2. Sistema valida cada pedido con `_confirmation_error_message()`: - - Si el estado no es `draft` o `sent`, retorna error. - - Si alguna línea no tiene `product_id`, retorna error. -3. Si pasa validación, sistema prepara valores con `_prepare_confirmation_values()`: - - `state = 'sale'` - - `date_order = fields.Datetime.now()` -4. Sistema escribe esos valores con `self.write(...)`. -5. Sistema llama a `self.with_context(context)._action_confirm()` que dispara el flujo downstream. -6. Si `sale.group_auto_done_setting` está activo, sistema invoca `action_lock()` sobre los pedidos filtrados. -7. Si el contexto trae `send_email=True`, sistema envía email de confirmación. -8. Retorna `True`. +1. El vendedor **presiona** "Confirmar" en el form del pedido. +2. El sistema **invoca** `action_confirm()`. +3. El sistema **valida** el pedido con `_confirmation_error_message()`. +4. El sistema **lee** el estado y las líneas del pedido. +5. El sistema **verifica** que cada línea tenga `product_id`. +6. Si todo está OK, el sistema **prepara** los valores de confirmación con `_prepare_confirmation_values()`. +7. El sistema **escribe** `state='sale'` y `date_order=now` en el pedido. +8. El sistema **dispara** `_action_confirm()` que **genera** los pickings de stock. +9. El sistema **genera** las entregas (`stock.picking`) con sus movimientos (`stock.move`). +10. El sistema **retorna** `True`. -## Flujos alternativos +## Caminos alternativos (en voz activa) -### FA-01 — Confirmación masiva +### FA-01 — El vendedor confirma múltiples pedidos -1. Vendedor selecciona múltiples presupuestos desde vista tree. -2. Hace clic en "Confirmar" (acción masiva). -3. Sistema itera sobre cada pedido y aplica el flujo principal. -4. Si alguno falla, sistema retorna UserError con el mensaje del primer pedido que falló. +1. El vendedor **selecciona** varios presupuestos desde la vista tree. +2. El vendedor **presiona** "Confirmar" (acción masiva). +3. El sistema **itera** sobre cada pedido. +4. Para cada pedido, el sistema **ejecuta** los pasos trascendentes. +5. Si alguno falla, el sistema **muestra** el error del primer pedido que falló. -### FA-02 — Lock automático +### FA-02 — El sistema lockea el pedido automáticamente -1. Sistema detecta que `sale.group_auto_done_setting` está activo. -2. Después de confirmar, llama a `action_lock()`. -3. Pedido queda `locked=True`, no se puede modificar. +1. El sistema **detecta** que `sale.group_auto_done_setting` está activo. +2. Después de confirmar, el sistema **invoca** `action_lock()` sobre los pedidos filtrados. +3. El sistema **marca** `locked=True` en el pedido. +4. El sistema **impide** modificaciones futuras. -## Excepciones +### FA-03 — El sistema envía email de confirmación -### EX-01 — Estado inválido +1. El sistema **detecta** que el contexto trae `send_email=True`. +2. El sistema **invoca** `_send_order_confirmation_mail()`. +3. El sistema **busca** el template de email de confirmación. +4. El sistema **envía** el email al cliente. + +## Excepciones (en voz activa) + +### EX-01 — El pedido está en estado inválido 1. El pedido está en estado `sale` o `cancel`. -2. Sistema retorna `_("Some orders are not in a state requiring confirmation.")`. +2. El sistema **detecta** el estado inválido. +3. El sistema **muestra** el error "Some orders are not in a state requiring confirmation". -### EX-02 — Líneas sin producto +### EX-02 — Alguna línea no tiene producto -1. Alguna línea tiene `display_type` vacío y `is_downpayment=False` y `product_id` vacío. -2. Sistema retorna `_("Some order lines are missing a product, you need to correct them before going further.")`. +1. Alguna línea tiene `display_type` vacío, `is_downpayment=False` y `product_id` vacío. +2. El sistema **detecta** la línea inválida. +3. El sistema **muestra** el error "Some order lines are missing a product". ## Reglas de negocio - **RN-VEN-004**: Solo se puede confirmar un pedido en estado `draft` o `sent`. - **RN-VEN-005**: Toda línea debe tener un producto antes de confirmar. -- **RN-VEN-006**: Al confirmar, se dispara el flujo de stock (CU-ENT-002) y luego de cuenta (CU-FAC-001). +- **RN-VEN-006**: Al confirmar, se dispara el flujo de stock (CU-ENT-002). -## Datos de entrada +## Relaciones con otros CU -- Pedido en estado `draft` o `sent`. -- Contexto opcional: `send_email=True` (envía email de confirmación). +- **<> CU-AUTH-001**: Valida la sesión. +- **<> CU-GENPICK-001**: Genera los pickings de entrega. -## Datos de salida +## Diagrama de robustez asociado -- Pedido en estado `sale`. -- Reservas de stock (CU-ENT-002). -- Programación de entregas (CU-ENT-004). +`diagrams/plantuml/d_rob_ven_004_confirmar_pedido.puml` -## Estados involucrados +## Verbos clave (para validar la voz activa) -- `draft` → `sale` (transición principal). -- `sent` → `sale` (transición alternativa). -- Opcionalmente `locked=True` si `sale.group_auto_done_setting` está activo. - -## Pantallas involucradas - -- `view_sale_order_form` — botón "Confirmar" en el header del form. - -## Modelos de Odoo relacionados - -- `sale.order` (principal). -- `sale.order.line` (líneas validadas). -- `stock.picking` (entregas generadas). -- `account.move` (facturas generadas). - -## Métodos de Odoo relacionados - -- `action_confirm()` — entry point (ver `addons/sale/models/sale_order.py:1166`). -- `_confirmation_error_message()` — valida (ver `addons/sale/models/sale_order.py:1203`). -- `_prepare_confirmation_values()` — prepara valores (ver `addons/sale/models/sale_order.py:1218`). -- `_action_confirm()` — lógica de confirmación (interno, dispara stock y cuenta). -- `_should_be_locked()` — determina si lockea (ver `addons/sale/models/sale_order.py:1198`). -- `action_lock()` — lockea el pedido. - -## Permisos requeridos - -- `sales_team.group_sale_salesman` (puede confirmar sus propios pedidos). -- `sales_team.group_sale_manager` (puede confirmar cualquier pedido). - -## Configuraciones relevantes - -- `sale.group_auto_done_setting` — si está activo, lockea automáticamente al confirmar. - -## Casos de uso relacionados - -- CU-VEN-001 Crear presupuesto (precondición). -- CU-ENT-002 Reservar productos (downstream). -- CU-FAC-001 Crear factura (downstream). - -## Criterios de aceptación - -- [ ] Un pedido en `draft` puede confirmarse si todas las líneas tienen producto. -- [ ] Un pedido sin productos en alguna línea muestra error claro. -- [ ] El estado cambia correctamente a `sale`. -- [ ] Si auto_done está activo, el pedido queda `locked=True`. -- [ ] Las reservas de stock se generan automáticamente. - -## Evidencias de ingeniería inversa - -- **EV-COD-006**: `addons/sale/models/sale_order.py:1166-1196` — método `action_confirm` completo. - ```python - def action_confirm(self): - for order in self: - error_msg = order._confirmation_error_message() - if error_msg: - raise UserError(error_msg) - self.order_line._validate_analytic_distribution() - self.write(self._prepare_confirmation_values()) - ... - self.with_context(context)._action_confirm() - self.filtered(lambda so: so._should_be_locked()).action_lock() - ... - ``` -- **EV-COD-007**: `addons/sale/models/sale_order.py:1203-1216` — método `_confirmation_error_message` (validaciones). -- **EV-COD-008**: `addons/sale/models/sale_order.py:1218-1229` — método `_prepare_confirmation_values` (devuelve `{'state': 'sale', 'date_order': fields.Datetime.now()}`). -- **EV-COD-009**: `addons/sale/models/sale_order.py:1198-1201` — método `_should_be_locked` (chequea `sale.group_auto_done_setting`). - -## Supuestos y aspectos pendientes de validación - -- **EV-INF-004**: `_action_confirm()` (sin guion bajo prefijo público) es el método que dispara el flujo downstream de stock y cuenta. Su implementación interna no fue leída en detalle. -- **EV-INF-005**: El efecto sobre `stock.picking` y `account.move` se valida en CU-ENT-002 y CU-FAC-001 respectivamente. \ No newline at end of file +| Verbo | Actor | Acción sobre | +|-------|-------|--------------| +| **presiona** | Vendedor | Botón "Confirmar" | +| **invoca** | Sistema | `action_confirm()` | +| **valida** | Sistema | `_confirmation_error_message()` | +| **lee** | Sistema | Estado y líneas | +| **verifica** | Sistema | `product_id` por línea | +| **prepara** | Sistema | `_prepare_confirmation_values()` | +| **escribe** | Sistema | `state='sale'`, `date_order` | +| **dispara** | Sistema | `_action_confirm()` | +| **genera** | Sistema | `stock.picking`, `stock.move` | +| **retorna** | Sistema | `True` | +| **iterar** | Sistema | Lista de pedidos | +| **detecta** | Sistema | Estado / configuración | +| **marca** | Sistema | `locked=True` | +| **impide** | Sistema | Modificaciones | +| **busca** | Sistema | Template de email | +| **envía** | Sistema | Email de confirmación | +| **muestra** | Sistema | Error | \ No newline at end of file diff --git a/docs/09_trazabilidad/matriz_trazabilidad.md b/docs/09_trazabilidad/matriz_trazabilidad.md index bb743ff..d07a2b3 100644 --- a/docs/09_trazabilidad/matriz_trazabilidad.md +++ b/docs/09_trazabilidad/matriz_trazabilidad.md @@ -2,23 +2,46 @@ > Documento vivo. Última actualización: 2026-06-18. -**Versión Odoo analizada:** 19.0 Community -**Rama:** 19.0 -**Edición:** Community -**Path local código fuente:** `~/proyectos/odoo_src/odoo` -**Path local repo proyecto:** `~/proyectos/sap_tfi_2026` +## Diagrama de CU principal + +`D-CU-GEN-002` — Casos de Uso con extend/include +- **5 includes**: CU-AUTH-001, CU-CALC-001, CU-GENPICK-001, CU-VALLIN-001, CU-GENJOUR-001 +- **5 extends**: CU-VEN-001-EMAIL, CU-VEN-001-DISC, CU-ENT-002-MTO, CU-ENT-004-BACK, CU-FAC-002-VAL + +## Versión Odoo analizada + +- **19.0 Community** +- **Rama**: `19.0` +- **Path local código fuente**: `~/proyectos/odoo_src/odoo` +- **Path local repo proyecto**: `~/proyectos/sap_tfi_2026` ## Matriz principal -| Requisito | Caso de uso | Regla | Pantalla | Robustez | Secuencia | Clase | Modelo Odoo | Evidencia | Estado | -|-----------|-------------|-------|----------|----------|-----------|-------|-------------|-----------|--------| -| REQ-VEN-001 | CU-VEN-001 | RN-VEN-001, RN-VEN-002 | view_sale_order_form | (futuro) | (futuro) | (futuro) | sale.order | EV-COD-001..005 | Verificado | -| REQ-VEN-004 | CU-VEN-004 | RN-VEN-004, RN-VEN-005, RN-VEN-006 | view_sale_order_form | D-ROB-VEN-004 | D-SEC-VEN-004 | (en D-CLA-INT-001) | sale.order | EV-COD-006..009 | Verificado | -| REQ-ENT-002 | CU-ENT-002 | RN-ENT-002, RN-ENT-003 | view_picking_form | (futuro) | (futuro) | (en D-CLA-INT-001) | stock.picking | EV-COD-010, EV-COD-011 | Verificado | -| REQ-ENT-004 | CU-ENT-004 | RN-ENT-004, RN-ENT-005 | view_picking_form | (futuro) | (futuro) | (en D-CLA-INT-001) | stock.picking | EV-COD-012 | Verificado | -| REQ-FAC-001 | CU-FAC-001 | RN-FAC-001, RN-FAC-002 | view_sale_order_form | (futuro) | (futuro) | (en D-CLA-INT-001) | sale.order, account.move | EV-COD-013, EV-COD-014 | Verificado | -| REQ-FAC-002 | CU-FAC-002 | RN-FAC-003, RN-FAC-004 | view_move_form | (futuro) | (futuro) | (en D-CLA-INT-001) | account.move | EV-COD-016, EV-COD-017, EV-COD-018 | Verificado | -| REQ-FAC-003 | CU-FAC-003 | RN-FAC-005, RN-FAC-006 | view_move_form | (futuro) | (futuro) | (en D-CLA-INT-001) | account.move | EV-COD-019, EV-COD-020 | Verificado | +| Requisito | Caso de uso | Reglas | Diagrama de robustez | Diagrama de secuencia | Clases | Modelo Odoo | Evidencia | +|-----------|-------------|--------|---------------------|----------------------|--------|-------------|-----------| +| REQ-VEN-001 | CU-VEN-001 | RN-VEN-001, RN-VEN-002, RN-VEN-003 | D-ROB-VEN-001 | D-SEC-VEN-001 | D-CLA-INT-001 | sale.order | EV-COD-001..005 | +| REQ-VEN-004 | CU-VEN-004 | RN-VEN-004, RN-VEN-005, RN-VEN-006 | D-ROB-VEN-004 | D-SEC-VEN-004 | D-CLA-INT-001 | sale.order | EV-COD-006..009, EV-COD-021, EV-COD-027, EV-COD-028, EV-COD-030 | +| REQ-ENT-002 | CU-ENT-002 | RN-ENT-002, RN-ENT-003 | D-ROB-ENT-002 | D-SEC-ENT-002 | D-CLA-INT-001 | stock.picking | EV-COD-010, EV-COD-011, EV-COD-022 | +| REQ-ENT-004 | CU-ENT-004 | RN-ENT-004, RN-ENT-005 | (no ROB) | (no SEC) | D-CLA-INT-001 | stock.picking | EV-COD-012, EV-COD-029 | +| REQ-FAC-001 | CU-FAC-001 | RN-FAC-001, RN-FAC-002 | D-ROB-FAC-001 | D-SEC-FAC-001 | D-CLA-INT-001 | sale.order, account.move | EV-COD-013, EV-COD-014, EV-COD-023 | +| REQ-FAC-002 | CU-FAC-002 | RN-FAC-003, RN-FAC-004 | (no ROB) | (no SEC) | D-CLA-INT-001 | account.move | EV-COD-016, EV-COD-017, EV-COD-018, EV-COD-026 | +| REQ-FAC-003 | CU-FAC-003 | RN-FAC-005, RN-FAC-006 | (no ROB) | (no SEC) | D-CLA-INT-001 | account.move | EV-COD-019, EV-COD-020, EV-COD-024, EV-COD-025 | + +## Tabla de CU includes y extends + +| CU Base | Relación | CU Relacionado | Tipo | +|---------|----------|----------------|------| +| CU-VEN-001 | <> | CU-AUTH-001 | Validación de sesión | +| CU-VEN-001 | <> | CU-CALC-001 | Cálculo de totales | +| CU-VEN-004 | <> | CU-AUTH-001 | Validación de sesión | +| CU-VEN-004 | <> | CU-GENPICK-001 | Generación de picking | +| CU-FAC-001 | <> | CU-VALLIN-001 | Validación de líneas | +| CU-FAC-002 | <> | CU-GENJOUR-001 | Generación de asiento | +| CU-VEN-001 | <> | CU-VEN-001-EMAIL | Envío de email (opcional) | +| CU-VEN-001 | <> | CU-VEN-001-DISC | Aplicar descuento (opcional) | +| CU-ENT-002 | <> | CU-ENT-002-MTO | Generar PO (MTO) (opcional) | +| CU-ENT-004 | <> | CU-ENT-004-BACK | Crear backorder (opcional) | +| CU-FAC-002 | <> | CU-FAC-002-VAL | Validar asiento anormal (opcional) | ## Leyenda de estados @@ -63,59 +86,9 @@ | Obsoleto | 0 | 0% | | **TOTAL** | **7** | **100%** | -## Evidencias generadas (20) - -| Código | Tipo | Descripción | Archivo | -|--------|------|-------------|---------| -| EV-COD-001 | EV-COD | `sale.order` definición de clase | `addons/sale/models/sale_order.py:34-36` | -| EV-COD-002 | EV-COD | `SALE_ORDER_STATE` constantes | `addons/sale/models/sale_order.py:26-31` | -| EV-COD-003 | EV-COD | `action_quotation_send` | `addons/sale/models/sale_order.py:1067` | -| EV-COD-004 | EV-COD | `action_confirm` | `addons/sale/models/sale_order.py:1166` | -| EV-COD-005 | EV-COD | `name` field | `addons/sale/models/sale_order.py:54-58` | -| EV-COD-006 | EV-COD | `action_confirm` cuerpo | `addons/sale/models/sale_order.py:1166-1196` | -| EV-COD-007 | EV-COD | `_confirmation_error_message` | `addons/sale/models/sale_order.py:1203-1216` | -| EV-COD-008 | EV-COD | `_prepare_confirmation_values` | `addons/sale/models/sale_order.py:1218-1229` | -| EV-COD-009 | EV-COD | `_should_be_locked` | `addons/sale/models/sale_order.py:1198-1201` | -| EV-COD-010 | EV-COD | `action_assign` (stock.picking) | `addons/stock/models/stock_picking.py:1195` | -| EV-COD-011 | EV-COD | `action_confirm` (stock.picking) | `addons/stock/models/stock_picking.py:1186` | -| EV-COD-012 | EV-COD | `button_validate` | `addons/stock/models/stock_picking.py:1398` | -| EV-COD-013 | EV-COD | `_create_invoices` | `addons/sale/models/sale_order.py:1550` | -| EV-COD-014 | EV-COD | `_prepare_invoice` | `addons/sale/models/sale_order.py:1411` | -| EV-COD-015 | EV-COD | `account.move` definición | `addons/account/models/account_move.py:72-73` | -| EV-COD-016 | EV-COD | `action_post` | `addons/account/models/account_move.py:6101` | -| EV-COD-017 | EV-COD | `AccountMove` class | `addons/account/models/account_move.py:72-73` | -| EV-COD-018 | EV-COD | `state` field (account.move) | `addons/account/models/account_move.py:129` | -| EV-COD-019 | EV-COD | `action_register_payment` | `addons/account/models/account_move.py:6022` | -| EV-COD-020 | EV-COD | `payment_state` field | `addons/account/models/account_move.py:600` | -| EV-COD-021 | EV-COD | `_action_confirm` stub | `addons/sale/models/sale_order.py:1231-1235` | -| EV-COD-022 | EV-COD | `action_assign` cuerpo | `addons/stock/models/stock_picking.py:1195-1208` | -| EV-COD-023 | EV-COD | `picking_ids` (sale_stock) | `addons/sale_stock/models/sale_order.py:31` | -| EV-COD-024 | EV-COD | `PAYMENT_STATE_SELECTION` | `addons/account/models/account_move.py:48-56` | -| EV-COD-025 | EV-COD | `payment_state` (computed) | `addons/account/models/account_move.py:600-606` | -| EV-COD-026 | EV-COD | `action_post` cuerpo | `addons/account/models/account_move.py:6101-6122` | -| EV-COD-027 | EV-COD | `_send_order_confirmation_mail` | `addons/sale/models/sale_order.py:1237-1244` | -| EV-COD-028 | EV-COD | `_trigger_scheduler()` | `addons/sale/models/sale_order.py:1192` | -| EV-COD-029 | EV-COD | `action_cancel` (stock) | `addons/stock/models/stock_picking.py:1210-1214` | -| EV-COD-030 | EV-COD | `_should_be_locked` | `addons/sale/models/sale_order.py:1198-1201` | - -## Inferencias pendientes (EV-INF) - -Total: **22 inferencias** documentadas en los CU y diagramas. Las más relevantes: - -- **EV-INF-004**: Implementación interna de `_action_confirm()` no leída. -- **EV-INF-005**: Efectos downstream sobre `stock.picking` y `account.move` se validan en CU específicos. -- **EV-INF-006, 007**: Lógica interna de `action_assign()` y `procurement.order` no leídas. -- **EV-INF-008, 009**: Lógica de `button_validate()` y backorder no leídas. -- **EV-INF-010, 011**: Lógica de agrupación de facturas no leída. -- **EV-INF-012, 013**: Lógica de `action_post()` y validaciones no leídas. -- **EV-INF-014, 015, 016**: Valores de `payment_state` y reconciliación no verificados. -- **EV-INF-017, 018**: Modelo conceptual aproximado, refinable. -- **EV-INF-019, 020**: Versión Community vs Enterprise. -- **EV-INF-021, 022**: Campos exactos del form y botones visibles. - ## Próximas acciones -- [ ] Validar las 22 EV-INF en iteraciones siguientes. -- [ ] Leer `_action_confirm()` de `sale.order` para refinar CU-VEN-004. -- [ ] Agregar CU de cancelación de pedido y factura. -- [ ] Generar diagramas de robustez y secuencia para los CU que faltan. \ No newline at end of file +- [ ] Validar las 8 EV-INF en iteraciones siguientes. +- [ ] Agregar diagramas de robustez/secuencia para CU-FAC-002, CU-FAC-003, CU-ENT-004. +- [ ] Documentar los 10 CU secundarios (5 includes + 5 extends). +- [ ] Generar diagramas de robustez y secuencia para cada uno. \ No newline at end of file