mirror of
https://github.com/cursos-uai/sap_tfi_2026.git
synced 2026-07-31 20:48:30 -03:00
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.
71 lines
17 KiB
XML
71 lines
17 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="902px" preserveAspectRatio="none" style="width:1280px;height:902px;background:#FFFFFF;" version="1.1" viewBox="0 0 1280 902" width="1280px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="524" x="374.75" y="23.1387">SAP-TFI-2026 — Diagrama de Secuencia - Crear Factura desde Pedido (CU-FAC-001)</text><rect fill="#FFFFFF" height="557.4063" style="stroke:#A80036;stroke-width:1.0;" width="10" x="501.5" y="167.875"/><rect fill="#FFFFFF" height="202.7813" style="stroke:#A80036;stroke-width:1.0;" width="10" x="758.5" y="379.6563"/><rect fill="#FFFFFF" height="438.5" style="stroke:#000000;stroke-width:2.0;" width="1253.5" x="10" y="279.7813"/><rect fill="#FFFFFF" height="71.9063" style="stroke:#000000;stroke-width:2.0;" width="548.5" x="705" y="455.5938"/><rect fill="#FFFFFF" height="71.9063" style="stroke:none;stroke-width:1.0;" width="1253.5" x="10" y="646.375"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="57" x2="57" y1="109.9375" y2="735.2813"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="225" x2="225" y1="109.9375" y2="735.2813"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="506" x2="506" y1="109.9375" y2="735.2813"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="763" x2="763" y1="109.9375" y2="735.2813"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="1204.5" x2="1204.5" y1="109.9375" y2="735.2813"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="69" x="20" y="107.1074">Facturador</text><ellipse cx="57.5" cy="42.9688" fill="#FEFECE" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M57.5,50.9688 L57.5,77.9688 M44.5,58.9688 L70.5,58.9688 M57.5,77.9688 L44.5,92.9688 M57.5,77.9688 L70.5,92.9688 " fill="none" style="stroke:#A80036;stroke-width:2.0;"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="69" x="20" y="745.4199">Facturador</text><ellipse cx="57.5" cy="758.25" fill="#FEFECE" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M57.5,766.25 L57.5,793.25 M44.5,774.25 L70.5,774.25 M57.5,793.25 L44.5,808.25 M57.5,793.25 L70.5,808.25 " fill="none" style="stroke:#A80036;stroke-width:2.0;"/><rect fill="#FEFECE" height="27.9688" style="stroke:#A80036;stroke-width:1.5;" width="51" x="200" y="80.9688"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="37" x="207" y="99.1074">Boton</text><rect fill="#FEFECE" height="27.9688" style="stroke:#A80036;stroke-width:1.5;" width="51" x="200" y="734.2813"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="37" x="207" y="752.4199">Boton</text><rect fill="#FEFECE" height="41.9375" style="stroke:#A80036;stroke-width:1.5;" width="127" x="443" y="67"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="62" x="475.5" y="85.1387">SaleOrder</text><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="113" x="450" y="99.1074">(_create_invoices)</text><rect fill="#FEFECE" height="41.9375" style="stroke:#A80036;stroke-width:1.5;" width="127" x="443" y="734.2813"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="62" x="475.5" y="752.4199">SaleOrder</text><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="113" x="450" y="766.3887">(_create_invoices)</text><rect fill="#FEFECE" height="27.9688" style="stroke:#A80036;stroke-width:1.5;" width="97" x="715" y="80.9688"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="83" x="722" y="99.1074">AccountMove</text><rect fill="#FEFECE" height="27.9688" style="stroke:#A80036;stroke-width:1.5;" width="97" x="715" y="734.2813"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="83" x="722" y="752.4199">AccountMove</text><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="72" x="1165.5" y="107.1074">PostgreSQL</text><path d="M1186.5,59.9688 C1186.5,49.9688 1204.5,49.9688 1204.5,49.9688 C1204.5,49.9688 1222.5,49.9688 1222.5,59.9688 L1222.5,85.9688 C1222.5,95.9688 1204.5,95.9688 1204.5,95.9688 C1204.5,95.9688 1186.5,95.9688 1186.5,85.9688 L1186.5,59.9688 " fill="#FEFECE" style="stroke:#000000;stroke-width:1.5;"/><path d="M1186.5,59.9688 C1186.5,69.9688 1204.5,69.9688 1204.5,69.9688 C1204.5,69.9688 1222.5,69.9688 1222.5,59.9688 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="72" x="1165.5" y="745.4199">PostgreSQL</text><path d="M1186.5,758.25 C1186.5,748.25 1204.5,748.25 1204.5,748.25 C1204.5,748.25 1222.5,748.25 1222.5,758.25 L1222.5,784.25 C1222.5,794.25 1204.5,794.25 1204.5,794.25 C1204.5,794.25 1186.5,794.25 1186.5,784.25 L1186.5,758.25 " fill="#FEFECE" style="stroke:#000000;stroke-width:1.5;"/><path d="M1186.5,758.25 C1186.5,768.25 1204.5,768.25 1204.5,768.25 C1204.5,768.25 1222.5,768.25 1222.5,758.25 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><rect fill="#FFFFFF" height="557.4063" style="stroke:#A80036;stroke-width:1.0;" width="10" x="501.5" y="167.875"/><rect fill="#FFFFFF" height="202.7813" style="stroke:#A80036;stroke-width:1.0;" width="10" x="758.5" y="379.6563"/><polygon fill="#A80036" points="213.5,135.9063,223.5,139.9063,213.5,143.9063,217.5,139.9063" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="57.5" x2="219.5" y1="139.9063" y2="139.9063"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="144" x="64.5" y="135.0762">1. Click "Crear Factura"</text><polygon fill="#A80036" points="489.5,163.875,499.5,167.875,489.5,171.875,493.5,167.875" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="225.5" x2="495.5" y1="167.875" y2="167.875"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="129" x="232.5" y="163.0449">2. _create_invoices()</text><polygon fill="#A80036" points="1192.5,191.8438,1202.5,195.8438,1192.5,199.8438,1196.5,195.8438" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="511.5" x2="1198.5" y1="195.8438" y2="195.8438"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="218" x="518.5" y="191.0137">3. SELECT sale.order (state='sale')</text><polygon fill="#A80036" points="522.5,219.8125,512.5,223.8125,522.5,227.8125,518.5,223.8125" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="516.5" x2="1203.5" y1="223.8125" y2="223.8125"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="50" x="528.5" y="218.9824">4. order</text><line style="stroke:#A80036;stroke-width:1.0;" x1="511.5" x2="553.5" y1="251.7813" y2="251.7813"/><line style="stroke:#A80036;stroke-width:1.0;" x1="553.5" x2="553.5" y1="251.7813" y2="264.7813"/><line style="stroke:#A80036;stroke-width:1.0;" x1="512.5" x2="553.5" y1="264.7813" y2="264.7813"/><polygon fill="#A80036" points="522.5,260.7813,512.5,264.7813,522.5,268.7813,518.5,264.7813" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="155" x="518.5" y="246.9512">5. Verifica invoice_status</text><path d="M10,279.7813 L74,279.7813 L74,284.7813 L64,294.7813 L10,294.7813 L10,279.7813 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="438.5" style="stroke:#000000;stroke-width:2.0;" width="1253.5" x="10" y="279.7813"/><text fill="#000000" font-family="Arial" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="19" x="25" y="291.9199">alt</text><text fill="#000000" font-family="Arial" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="158" x="89" y="292.9199">[Hay lineas a facturar]</text><polygon fill="#A80036" points="1192.5,311.7188,1202.5,315.7188,1192.5,319.7188,1196.5,315.7188" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="511.5" x2="1198.5" y1="315.7188" y2="315.7188"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="260" x="518.5" y="310.8887">6a. SELECT sale.order.line (qty to invoice)</text><polygon fill="#A80036" points="522.5,339.6875,512.5,343.6875,522.5,347.6875,518.5,343.6875" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="516.5" x2="1203.5" y1="343.6875" y2="343.6875"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="53" x="528.5" y="338.8574">7a. lines</text><line style="stroke:#A80036;stroke-width:1.0;" x1="511.5" x2="558.5" y1="366.6563" y2="366.6563"/><line style="stroke:#A80036;stroke-width:1.0;" x1="558.5" x2="558.5" y1="366.6563" y2="379.6563"/><line style="stroke:#A80036;stroke-width:1.0;" x1="517.5" x2="558.5" y1="379.6563" y2="379.6563"/><polygon fill="#A80036" points="527.5,375.6563,517.5,379.6563,527.5,383.6563,523.5,379.6563" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="233" x="523.5" y="361.8262">8a. _prepare_invoice() construye vals</text><polygon fill="#A80036" points="1192.5,408.625,1202.5,412.625,1192.5,416.625,1196.5,412.625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="768.5" x2="1198.5" y1="412.625" y2="412.625"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="412" x="775.5" y="407.7949">9a. INSERT account.move (move_type='out_invoice', state='draft')</text><polygon fill="#A80036" points="779.5,436.5938,769.5,440.5938,779.5,444.5938,775.5,440.5938" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="773.5" x2="1203.5" y1="440.5938" y2="440.5938"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="43" x="785.5" y="435.7637">10a. id</text><path d="M705,455.5938 L781,455.5938 L781,460.5938 L771,470.5938 L705,470.5938 L705,455.5938 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="71.9063" style="stroke:#000000;stroke-width:2.0;" width="548.5" x="705" y="455.5938"/><text fill="#000000" font-family="Arial" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="31" x="720" y="467.7324">loop</text><text fill="#000000" font-family="Arial" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="111" x="796" y="468.7324">[Por cada linea]</text><polygon fill="#A80036" points="1192.5,487.5313,1202.5,491.5313,1192.5,495.5313,1196.5,491.5313" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="768.5" x2="1198.5" y1="491.5313" y2="491.5313"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="193" x="775.5" y="486.7012">11a. INSERT account.move.line</text><polygon fill="#A80036" points="779.5,515.5,769.5,519.5,779.5,523.5,775.5,519.5" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="773.5" x2="1203.5" y1="519.5" y2="519.5"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="43" x="785.5" y="514.6699">12a. id</text><polygon fill="#A80036" points="1192.5,550.4688,1202.5,554.4688,1192.5,558.4688,1196.5,554.4688" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="768.5" x2="1198.5" y1="554.4688" y2="554.4688"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="269" x="775.5" y="549.6387">13a. UPDATE sale.order SET invoice_ids=...</text><polygon fill="#A80036" points="1192.5,578.4375,1202.5,582.4375,1192.5,586.4375,1196.5,582.4375" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="763.5" x2="1198.5" y1="582.4375" y2="582.4375"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="291" x="770.5" y="577.6074">14a. UPDATE sale.order SET invoice_status=...</text><polygon fill="#A80036" points="236.5,606.4063,226.5,610.4063,236.5,614.4063,232.5,610.4063" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="230.5" x2="500.5" y1="610.4063" y2="610.4063"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="128" x="242.5" y="605.5762">15a. Factura creada</text><polygon fill="#A80036" points="68.5,634.375,58.5,638.375,68.5,642.375,64.5,638.375" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="62.5" x2="224.5" y1="638.375" y2="638.375"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="129" x="74.5" y="633.5449">16a. Mostrar factura</text><line style="stroke:#000000;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="10" x2="1263.5" y1="647.375" y2="647.375"/><text fill="#000000" font-family="Arial" font-size="12" font-weight="bold" lengthAdjust="spacing" textLength="121" x="15" y="658.5137">[Nada a facturar]</text><polygon fill="#A80036" points="236.5,678.3125,226.5,682.3125,236.5,686.3125,232.5,682.3125" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="230.5" x2="500.5" y1="682.3125" y2="682.3125"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="252" x="242.5" y="677.4824">6b. raise UserError("Nothing to invoice")</text><polygon fill="#A80036" points="68.5,706.2813,58.5,710.2813,68.5,714.2813,64.5,710.2813" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="62.5" x2="224.5" y1="710.2813" y2="710.2813"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="107" x="74.5" y="705.4512">7b. Mostrar error</text><rect fill="#DDDDDD" height="65.875" rx="5" ry="5" style="stroke:#000000;stroke-width:1.0;" width="264" x="1000.5" y="820.25"/><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="144" x="1006.5" y="836.3887">Proyecto: SAP-TFI-2026</text><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="120" x="1006.5" y="850.3574">Agente: saptfi2026</text><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="124" x="1006.5" y="864.3262">Metodologia: ICONIX</text><text fill="#000000" font-family="Arial" font-size="12" lengthAdjust="spacing" textLength="252" x="1006.5" y="878.2949">Fuente: Ingenieria inversa de Odoo 19.0</text><!--MD5=[7010743e307214efbed681ec3e40414c]
|
|
@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
|
|
|
|
PlantUML version 1.2021.16(Wed Dec 08 14:25:22 ART 2021)
|
|
(GPL source distribution)
|
|
Java Runtime: OpenJDK Runtime Environment
|
|
JVM: OpenJDK 64-Bit Server VM
|
|
Default Encoding: UTF-8
|
|
Language: es
|
|
Country: AR
|
|
--></g></svg> |