feat(iter-1-completa): PDFs, diagramas extra, EV-COD validadas, material educativo

Cambios desde el commit anterior:

PDFs y formatos visuales (Paso 1):
- 11 PNGs + 11 SVGs + 11 PDFs generados con PlantUML 1.2021.16
- Conversión PNG→PDF con fpdf2 (workaround para Java 8)

Diagramas adicionales (Paso 2):
- d_rob_ven_001_crear_presupuesto.puml + .pdf
- d_sec_ven_001_crear_presupuesto.puml + .pdf
- d_rob_ent_002_reservar_productos.puml + .pdf
- d_sec_ent_002_reservar_productos.puml + .pdf
- d_rob_fac_001_crear_factura.puml + .pdf
- d_sec_fac_001_crear_factura.puml + .pdf

EV-COD adicionales (Paso 3):
- EV-COD-021 a EV-COD-030 (10 nuevas evidencias)
- EV-INF reducidas de 22 a 8 (14 promovidas a EV-COD)
- evidence/index.md con catálogo completo de evidencias

Material educativo (Paso 4):
- docs/10_material_estudio/README.md
- docs/10_material_estudio/01_que_es_iconix.md
- docs/10_material_estudio/02_aplicacion_a_odoo.md
- docs/10_material_estudio/03_como_leer_los_cu.md
- docs/10_material_estudio/04_ejercicios_practicos.md

Matriz de trazabilidad actualizada con las nuevas EV-COD.
This commit is contained in:
saptfi2026-bot
2026-06-23 20:41:21 -03:00
parent 73e344edc8
commit dd3a98b8d5
49 changed files with 2388 additions and 3 deletions
@@ -1,4 +1,4 @@
@startuml D-CLA-INT-001 — Diagrama de Clases: Integración Venta/Stock/Contabilidad
@startuml D-CLA-INT-001 — Diagrama de Clases - Integracion Venta-Stock-Contabilidad
title SAP-TFI-2026 — Diagrama de Clases Técnicas (Integración Venta/Stock/Contabilidad)
@@ -0,0 +1,58 @@
@startuml D-ROB-ENT-002 — Diagrama de Robustez: Reservar Productos
title SAP-TFI-2026 — Diagrama de Robustez - Reservar Productos (CU-ENT-002)
skinparam shadowing false
skinparam handwritten false
skinparam defaultFontName Arial
skinparam defaultFontSize 12
skinparam linetype ortho
skinparam backgroundColor white
actor "Sistema\n(o Operario)" as A
boundary "Trigger\n(action_confirm o boton)" as B_Trig
control "StockPicking\n(action_assign)" as C_Assign
control "Reabastecimiento\n(procurement)" as C_Proc
entity "stock.picking" as E_Pick
entity "stock.move.line\n(reservas)" as E_ML
entity "stock.warehouse.orderpoint" as E_WO
entity "purchase.order\n(MTO)" as E_PO
A --> B_Trig : 1. Trigger reserva
B_Trig --> E_Pick : 2. Lee picking
B_Trig --> C_Assign : 3. action_assign()
C_Assign --> E_Pick : 4. Recorre lineas
C_Assign --> E_ML : 5. Busca stock disponible
E_ML --> C_Assign : 6. Cantidad disponible
alt Si hay stock
C_Assign --> E_ML : 7a. Reserva cantidad
E_ML --> C_Assign : 8a. reserved_availability
else Si no hay stock
C_Assign --> C_Proc : 7b. Busca reabastecimiento
C_Proc --> E_WO : 8b. Consulta reglas
E_WO --> C_Proc : 9b. orderpoints aplicables
C_Proc --> E_PO : 10b. Crea purchase order (MTO)
E_PO --> C_Proc : 11b. PO creado
C_Proc --> C_Assign : 12b. Programado
end
C_Assign --> E_Pick : 13. Actualiza estado
alt Si todas las lineas tienen reserva
E_Pick --> A : 14a. Estado = 'assigned'
else Si hay parcial
E_Pick --> A : 14b. Estado = 'partially_available'
end
legend right
Proyecto: SAP-TFI-2026
Agente: saptfi2026
Metodologia: ICONIX
Fuente: Ingenieria inversa de Odoo 19.0
endlegend
@enduml
@@ -0,0 +1,57 @@
@startuml D-ROB-FAC-001 — Diagrama de Robustez: Crear Factura
title SAP-TFI-2026 — Diagrama de Robustez - Crear Factura desde Pedido (CU-FAC-001)
skinparam shadowing false
skinparam handwritten false
skinparam defaultFontName Arial
skinparam defaultFontSize 12
skinparam linetype ortho
skinparam backgroundColor white
actor "Facturador\n(o Vendedor)" as A
boundary "Boton Crear Factura\n(en sale.order)" as B_Btn
control "SaleOrder\n(_create_invoices)" as C_Inv
entity "sale.order\n(state=sale)" as E_SO
entity "sale.order.line" as E_Line
entity "account.move\n(draft)" as E_AM
entity "account.move.line" as E_AML
entity "account.tax" as E_Tax
A --> B_Btn : 1. Click "Crear Factura"
B_Btn --> C_Inv : 2. _create_invoices()
C_Inv --> E_SO : 3. Lee pedido
E_SO --> C_Inv : 4. order, lines, taxes
C_Inv --> E_SO : 5. Verifica invoice_status
alt Si hay lineas a facturar
C_Inv --> E_Line : 6a. Lee lineas pendientes
C_Inv --> E_Tax : 7a. Aplica impuestos
loop Por cada linea
C_Inv --> E_AML : 8a. Crea account.move.line
E_AML --> C_Inv : 9a. OK
end
C_Inv --> E_AM : 10a. Crea account.move (draft)
E_AM --> C_Inv : 11a. id, name (sequence)
C_Inv --> E_SO : 12a. Asocia invoice_ids
C_Inv --> E_SO : 13a. Actualiza invoice_status
else Si nada que facturar
C_Inv --> A : 6b. Mensaje "Nothing to invoice"
end
C_Inv --> A : 14. Resultado (OK o error)
legend right
Proyecto: SAP-TFI-2026
Agente: saptfi2026
Metodologia: ICONIX
Fuente: Ingenieria inversa de Odoo 19.0
endlegend
@enduml
@@ -0,0 +1,48 @@
@startuml D-ROB-VEN-001 — Diagrama de Robustez: Crear Presupuesto
title SAP-TFI-2026 — Diagrama de Robustez - Crear Presupuesto (CU-VEN-001)
skinparam shadowing false
skinparam handwritten false
skinparam defaultFontName Arial
skinparam defaultFontSize 12
skinparam linetype ortho
skinparam backgroundColor white
actor "Vendedor" as V
boundary "Boton Nuevo\n(sale.menu)" as B_New
boundary "Form\n(view_sale_order_form)" as B_Form
control "SaleOrder\n(action_quotation_send)" as C_Send
control "Mail Compose\n(mail.compose.message)" as C_Mail
entity "sale.order\n(draft)" as E_SO
entity "mail.mail" as E_Mail
V --> B_New : 1. Click "Nuevo"
B_New --> E_SO : 2. Crea sale.order en draft
E_SO --> B_Form : 3. Abre form
B_Form --> V : 4. Muestra form
V --> B_Form : 5. Completa cliente y lineas
B_Form --> E_SO : 6. Actualiza partner_id y order_line
E_SO --> B_Form : 7. Calcula totales (_compute_amounts)
opt Si envia por email
V --> B_Form : 8. Click "Enviar"
B_Form --> C_Send : 9. action_quotation_send()
C_Send --> E_SO : 10. Cambia estado a 'sent'
C_Send --> C_Mail : 11. Crea mail.compose.message
C_Mail --> E_Mail : 12. Genera mail.mail
E_Mail --> V : 13. Envia email
end
legend right
Proyecto: SAP-TFI-2026
Agente: saptfi2026
Metodologia: ICONIX
Fuente: Ingenieria inversa de Odoo 19.0
endlegend
@enduml
@@ -1,6 +1,6 @@
@startuml D-ROB-VEN-004 — Diagrama de Robustez: Confirmar Pedido
title SAP-TFI-2026 — Diagrama de Robustez: Confirmar Pedido de Venta (CU-VEN-004)
title SAP-TFI-2026 — Diagrama de Robustez - Confirmar Pedido de Venta (CU-VEN-004)
skinparam shadowing false
skinparam handwritten false
@@ -0,0 +1,71 @@
@startuml D-SEC-ENT-002 — Diagrama de Secuencia: Reservar Productos
title SAP-TFI-2026 — Diagrama de Secuencia - Reservar Productos (CU-ENT-002)
skinparam shadowing false
skinparam handwritten false
skinparam defaultFontName Arial
skinparam defaultFontSize 12
skinparam linetype ortho
skinparam backgroundColor white
actor "Sistema" as S
participant "StockPicking\n(action_assign)" as SP
participant "StockMove\n(action_assign)" as SM
participant "Procurement\nOrder" as PO
database "PostgreSQL" as DB
S -> SP : 1. action_assign()
activate SP
SP -> DB : 2. SELECT picking + lines
DB --> SP : 3. picking, move_ids
loop Por cada move
SP -> SM : 4. action_assign() por linea
activate SM
SM -> DB : 5. SELECT stock.quant (available)
DB --> SM : 6. cantidad disponible
alt Cantidad >= requerida
SM -> DB : 7a. INSERT stock.move.line (reserved)
DB --> SM : 8a. OK
SM --> SP : 9a. Reserva exitosa
else Cantidad < requerida
SM -> DB : 7b. SELECT orderpoint WHERE product_id=...
DB --> SM : 8b. orderpoints aplicables
opt Si hay orderpoint MTO
SM -> PO : 9b. procurement.order.create()
activate PO
PO -> DB : 10b. INSERT procurement.order
PO -> DB : 11b. INSERT purchase.order (MTO)
DB --> PO : 12b. OK
PO --> SM : 13b. PO programado
deactivate PO
end
SM --> SP : 14b. Reserva parcial o programada
end
deactivate SM
end
SP -> DB : 15. UPDATE stock.picking SET state=...
DB --> SP : 16. OK
alt Si todas las lineas reservadas
SP --> S : 17a. Estado = 'assigned'
else Si hay parcial
SP --> S : 17b. Estado = 'partially_available'
end
deactivate SP
legend right
Proyecto: SAP-TFI-2026
Agente: saptfi2026
Metodologia: ICONIX
Fuente: Ingenieria inversa de Odoo 19.0
endlegend
@enduml
@@ -0,0 +1,61 @@
@startuml D-SEC-FAC-001 — Diagrama de Secuencia: Crear Factura
title SAP-TFI-2026 — Diagrama de Secuencia - Crear Factura desde Pedido (CU-FAC-001)
skinparam shadowing false
skinparam handwritten false
skinparam defaultFontName Arial
skinparam defaultFontSize 12
skinparam linetype ortho
skinparam backgroundColor white
actor "Facturador" as F
participant "Boton" as Btn
participant "SaleOrder\n(_create_invoices)" as SO
participant "AccountMove" as AM
database "PostgreSQL" as DB
F -> Btn : 1. Click "Crear Factura"
Btn -> SO : 2. _create_invoices()
activate SO
SO -> DB : 3. SELECT sale.order (state='sale')
DB --> SO : 4. order
SO -> SO : 5. Verifica invoice_status
alt Hay lineas a facturar
SO -> DB : 6a. SELECT sale.order.line (qty to invoice)
DB --> SO : 7a. lines
SO -> SO : 8a. _prepare_invoice() construye vals
activate AM
AM -> DB : 9a. INSERT account.move (move_type='out_invoice', state='draft')
DB --> AM : 10a. id
loop Por cada linea
AM -> DB : 11a. INSERT account.move.line
DB --> AM : 12a. id
end
AM -> DB : 13a. UPDATE sale.order SET invoice_ids=...
AM -> DB : 14a. UPDATE sale.order SET invoice_status=...
deactivate AM
SO --> Btn : 15a. Factura creada
Btn --> F : 16a. Mostrar factura
else Nada a facturar
SO --> Btn : 6b. raise UserError("Nothing to invoice")
Btn --> F : 7b. Mostrar error
end
deactivate SO
legend right
Proyecto: SAP-TFI-2026
Agente: saptfi2026
Metodologia: ICONIX
Fuente: Ingenieria inversa de Odoo 19.0
endlegend
@enduml
@@ -0,0 +1,81 @@
@startuml D-SEC-VEN-001 — Diagrama de Secuencia: Crear Presupuesto
title SAP-TFI-2026 — Diagrama de Secuencia - Crear Presupuesto (CU-VEN-001)
skinparam shadowing false
skinparam handwritten false
skinparam defaultFontName Arial
skinparam defaultFontSize 12
skinparam linetype ortho
skinparam backgroundColor white
actor "Vendedor" as V
participant "Form\n(view_sale_order_form)" as Form
participant "SaleOrder\nORM" as SO
participant "Mail\nComposer" as Mail
database "PostgreSQL" as DB
V -> Form : 1. Click "Nuevo"
activate Form
Form -> SO : 2. Create({})
activate SO
SO -> DB : 3. INSERT sale.order (state='draft')
DB --> SO : 4. id
SO --> Form : 5. sale.order record
deactivate SO
V -> Form : 6. Selecciona partner_id
Form -> SO : 7. write({partner_id: ...})
activate SO
SO -> DB : 8. UPDATE sale.order SET partner_id=...
DB --> SO : 9. OK
SO -> SO : 10. _onchange_partner_id() carga pricelist
SO -> DB : 11. SELECT product.pricelist
DB --> SO : 12. pricelist
SO --> Form : 13. pricelist_id actualizado
deactivate SO
V -> Form : 14. Agrega lineas
loop Por cada linea
Form -> SO : 15. order_line = [(0, 0, {product_id, qty})]
SO -> DB : 16. INSERT sale.order.line
DB --> SO : 17. id
end
V -> Form : 18. Sistema recalcula totales
Form -> SO : 19. _compute_amounts()
activate SO
SO -> DB : 20. SELECT tax, discount
DB --> SO : 21. datos
SO -> DB : 22. UPDATE amounts
SO --> Form : 23. amount_untaxed, amount_tax, amount_total
deactivate SO
opt Si envia por email
V -> Form : 24. Click "Enviar"
Form -> SO : 25. action_quotation_send()
activate SO
SO -> SO : 26. _validate_analytic_distribution()
SO -> SO : 27. mark_so_as_sent = True
SO -> DB : 28. UPDATE state='sent'
SO -> Mail : 29. mail.compose.message.create
activate Mail
Mail -> DB : 30. INSERT mail.mail
DB --> Mail : 31. id
Mail --> SO : 32. OK
deactivate Mail
SO --> Form : 33. wizard closed
deactivate SO
end
Form --> V : 34. Estado actualizado
deactivate Form
legend right
Proyecto: SAP-TFI-2026
Agente: saptfi2026
Metodologia: ICONIX
Fuente: Ingenieria inversa de Odoo 19.0
endlegend
@enduml
@@ -1,6 +1,6 @@
@startuml D-SEC-VEN-004 — Diagrama de Secuencia: Confirmar Pedido
title SAP-TFI-2026 — Diagrama de Secuencia: Confirmar Pedido de Venta (CU-VEN-004)
title SAP-TFI-2026 — Diagrama de Secuencia - Confirmar Pedido de Venta (CU-VEN-004)
skinparam shadowing false
skinparam handwritten false