mirror of
https://github.com/cursos-uai/sap_tfi_2026.git
synced 2026-07-31 20:48:30 -03:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user