Files
inventorym/uml/classdiagram.svg

462 lines
39 KiB
XML
Raw Normal View History

2025-10-28 11:43:15 -04:00
<?xml version="1.0" standalone="no"?>
2025-10-30 14:14:02 -04:00
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="2005pt" height="1413pt" viewBox="0.00 0.00 2005.20 1413.20">
<g id="graph0" class="graph" transform="translate(-190.69420915524893,1522.1968719923593) scale(1.1486983549970349)" data-name="InventoryMClassDiagram">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="white" stroke="none" points="-4,4 -4,-1409.2 2001.2,-1409.2 2001.2,4 -4,4" style=""/>
2025-10-28 11:43:15 -04:00
<!-- InventoryPiece -->
2025-10-29 13:14:10 -04:00
<g id="node1" class="node" pointer-events="visible" data-name="InventoryPiece">
2025-10-30 14:14:02 -04:00
<polygon fill="lightyellow" stroke="black" points="1173.38,-229.5 1173.38,-421.5 1343.81,-421.5 1343.81,-229.5 1173.38,-229.5" style=""/>
<text text-anchor="middle" x="1258.59" y="-404.9" font-family="Times,serif" font-size="14.00" style="">InventoryPiece</text>
<text text-anchor="middle" x="1258.59" y="-388.1" font-family="Times,serif" font-size="14.00" style="">«abstract»</text>
<polyline fill="none" stroke="black" points="1173.38,-379.9 1343.81,-379.9" style=""/>
<text text-anchor="start" x="1181.38" y="-363.3" font-family="Times,serif" font-size="14.00" style="">+ id : String</text>
<text text-anchor="start" x="1181.38" y="-346.5" font-family="Times,serif" font-size="14.00" style="">+ price : float</text>
<text text-anchor="start" x="1181.38" y="-329.7" font-family="Times,serif" font-size="14.00" style="">+ created : ZonedDateTime</text>
<text text-anchor="start" x="1181.38" y="-312.9" font-family="Times,serif" font-size="14.00" style="">+ title : String</text>
<text text-anchor="start" x="1181.38" y="-296.1" font-family="Times,serif" font-size="14.00" style="">+ description : String</text>
<text text-anchor="start" x="1181.38" y="-279.3" font-family="Times,serif" font-size="14.00" style="">+ Author : String</text>
<polyline fill="none" stroke="black" points="1173.38,-271.1 1343.81,-271.1" style=""/>
<text text-anchor="start" x="1181.38" y="-254.5" font-family="Times,serif" font-size="14.00" style="">+ getType() : String</text>
<text text-anchor="start" x="1181.38" y="-237.7" font-family="Times,serif" font-size="14.00" style="">+ computePrice() : float</text>
</g>
<!-- DataRepository -->
<g id="node15" class="node" pointer-events="visible" data-name="DataRepository">
<polygon fill="lightblue" stroke="black" points="667.47,-0.5 667.47,-175.7 901.71,-175.7 901.71,-0.5 667.47,-0.5" style=""/>
<text text-anchor="middle" x="784.59" y="-159.1" font-family="Times,serif" font-size="14.00" style="">DataRepository</text>
<polyline fill="none" stroke="black" points="667.47,-150.9 901.71,-150.9" style=""/>
<text text-anchor="start" x="675.47" y="-134.3" font-family="Times,serif" font-size="14.00" style="">- INSTANCE : DataRepository</text>
<polyline fill="none" stroke="black" points="667.47,-126.1 901.71,-126.1" style=""/>
<text text-anchor="start" x="675.47" y="-109.5" font-family="Times,serif" font-size="14.00" style="">+ getInstance() : DataRepository</text>
<text text-anchor="start" x="675.47" y="-92.7" font-family="Times,serif" font-size="14.00" style="">+ generateRandomID(int) : String</text>
<text text-anchor="start" x="675.47" y="-75.9" font-family="Times,serif" font-size="14.00" style="">+ generateRandom10DigitID() : String</text>
<text text-anchor="start" x="675.47" y="-59.1" font-family="Times,serif" font-size="14.00" style="">+ write(InventoryManager) : void</text>
<text text-anchor="start" x="675.47" y="-42.3" font-family="Times,serif" font-size="14.00" style="">+ write(CustomerManager) : void</text>
<text text-anchor="start" x="675.47" y="-25.5" font-family="Times,serif" font-size="14.00" style="">+ write(TransactionManager) : void</text>
<text text-anchor="start" x="675.47" y="-8.7" font-family="Times,serif" font-size="14.00" style="">+ WalkFileSystemTree(...) : void</text>
</g>
<!-- InventoryPiece&#45;&gt;DataRepository -->
<g id="edge26" class="edge" data-name="InventoryPiece-&gt;DataRepository">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1173.65,-254.56C1145.21,-233.31 1112.58,-211.12 1080.59,-194.2 1027.16,-165.94 964.51,-142.45 910.64,-124.89" style=""/>
<polygon fill="black" stroke="black" points="901.38,-121.91 912.28,-120.7 906.14,-123.44 910.9,-124.98 910.9,-124.98 910.9,-124.98 906.14,-123.44 909.52,-129.26 901.38,-121.91 901.38,-121.91" style=""/>
<text text-anchor="middle" x="1119.65" y="-198.4" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Drawing -->
2025-10-29 13:14:10 -04:00
<g id="node2" class="node" pointer-events="visible" data-name="Drawing">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="lightblue" stroke="black" points="1094.47,-525.7 1094.47,-633.7 1244.71,-633.7 1244.71,-525.7 1094.47,-525.7" style=""/>
<text text-anchor="middle" x="1169.59" y="-617.1" font-family="Times,serif" font-size="14.00" style="">Drawing</text>
<polyline fill="none" stroke="black" points="1094.47,-608.9 1244.71,-608.9" style=""/>
<text text-anchor="start" x="1102.47" y="-592.3" font-family="Times,serif" font-size="14.00" style="">+ style : String</text>
<text text-anchor="start" x="1102.47" y="-575.5" font-family="Times,serif" font-size="14.00" style="">+ technique : String</text>
<text text-anchor="start" x="1102.47" y="-558.7" font-family="Times,serif" font-size="14.00" style="">+ category : String</text>
<polyline fill="none" stroke="black" points="1094.47,-550.5 1244.71,-550.5" style=""/>
<text text-anchor="start" x="1102.47" y="-533.9" font-family="Times,serif" font-size="14.00" style="">+ computePrice() : float</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Drawing&#45;&gt;InventoryPiece -->
<g id="edge1" class="edge" data-name="Drawing-&gt;InventoryPiece">
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M1188.25,-525.83C1197.89,-498.53 1209.99,-464.21 1221.44,-431.78" style=""/>
<polygon fill="none" stroke="black" points="1224.59,-433.36 1224.62,-422.76 1217.99,-431.03 1224.59,-433.36" style=""/>
<text text-anchor="middle" x="1238.97" y="-444.2" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Painting -->
2025-10-29 13:14:10 -04:00
<g id="node3" class="node" pointer-events="visible" data-name="Painting">
2025-10-30 14:14:02 -04:00
<polygon fill="lightblue" stroke="black" points="1262.47,-508.9 1262.47,-650.5 1412.71,-650.5 1412.71,-508.9 1262.47,-508.9" style=""/>
<text text-anchor="middle" x="1337.59" y="-633.9" font-family="Times,serif" font-size="14.00" style="">Painting</text>
<polyline fill="none" stroke="black" points="1262.47,-625.7 1412.71,-625.7" style=""/>
<text text-anchor="start" x="1270.47" y="-609.1" font-family="Times,serif" font-size="14.00" style="">- height : int</text>
<text text-anchor="start" x="1270.47" y="-592.3" font-family="Times,serif" font-size="14.00" style="">- width : int</text>
<text text-anchor="start" x="1270.47" y="-575.5" font-family="Times,serif" font-size="14.00" style="">- style : String</text>
<text text-anchor="start" x="1270.47" y="-558.7" font-family="Times,serif" font-size="14.00" style="">- technique : String</text>
<text text-anchor="start" x="1270.47" y="-541.9" font-family="Times,serif" font-size="14.00" style="">- category : String</text>
<polyline fill="none" stroke="black" points="1262.47,-533.7 1412.71,-533.7" style=""/>
<text text-anchor="start" x="1270.47" y="-517.1" font-family="Times,serif" font-size="14.00" style="">+ computePrice() : float</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Painting&#45;&gt;InventoryPiece -->
<g id="edge2" class="edge" data-name="Painting-&gt;InventoryPiece">
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M1315.8,-509.12C1308.33,-485.28 1299.8,-458.05 1291.65,-432.02" style=""/>
<polygon fill="none" stroke="black" points="1295.08,-431.28 1288.75,-422.79 1288.4,-433.38 1295.08,-431.28" style=""/>
<text text-anchor="middle" x="1319.97" y="-444.2" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Print -->
2025-10-29 13:14:10 -04:00
<g id="node4" class="node" pointer-events="visible" data-name="Print">
2025-10-30 14:14:02 -04:00
<polygon fill="lightblue" stroke="black" points="1430.35,-534.1 1430.35,-625.3 1596.83,-625.3 1596.83,-534.1 1430.35,-534.1" style=""/>
<text text-anchor="middle" x="1513.59" y="-608.7" font-family="Times,serif" font-size="14.00" style="">Print</text>
<polyline fill="none" stroke="black" points="1430.35,-600.5 1596.83,-600.5" style=""/>
<text text-anchor="start" x="1438.35" y="-583.9" font-family="Times,serif" font-size="14.00" style="">- openEditionType : String</text>
<text text-anchor="start" x="1438.35" y="-567.1" font-family="Times,serif" font-size="14.00" style="">- category : String</text>
<polyline fill="none" stroke="black" points="1430.35,-558.9 1596.83,-558.9" style=""/>
<text text-anchor="start" x="1438.35" y="-542.3" font-family="Times,serif" font-size="14.00" style="">+ computePrice() : float</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Print&#45;&gt;InventoryPiece -->
<g id="edge3" class="edge" data-name="Print-&gt;InventoryPiece">
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M1476.12,-534.27C1459.81,-515.5 1440.21,-493.67 1421.59,-474.8 1399.7,-452.61 1375.22,-429.51 1352.03,-408.35" style=""/>
<polygon fill="none" stroke="black" points="1354.43,-405.79 1344.67,-401.66 1349.72,-410.97 1354.43,-405.79" style=""/>
<text text-anchor="middle" x="1421.97" y="-444.2" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Sculpture -->
2025-10-29 13:14:10 -04:00
<g id="node5" class="node" pointer-events="visible" data-name="Sculpture">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="lightblue" stroke="black" points="1614.47,-534.1 1614.47,-625.3 1764.71,-625.3 1764.71,-534.1 1614.47,-534.1" style=""/>
<text text-anchor="middle" x="1689.59" y="-608.7" font-family="Times,serif" font-size="14.00" style="">Sculpture</text>
<polyline fill="none" stroke="black" points="1614.47,-600.5 1764.71,-600.5" style=""/>
<text text-anchor="start" x="1622.47" y="-583.9" font-family="Times,serif" font-size="14.00" style="">- material : String</text>
<text text-anchor="start" x="1622.47" y="-567.1" font-family="Times,serif" font-size="14.00" style="">- weight : float</text>
<polyline fill="none" stroke="black" points="1614.47,-558.9 1764.71,-558.9" style=""/>
<text text-anchor="start" x="1622.47" y="-542.3" font-family="Times,serif" font-size="14.00" style="">+ computePrice() : float</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- Sculpture&#45;&gt;InventoryPiece -->
<g id="edge4" class="edge" data-name="Sculpture-&gt;InventoryPiece">
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M1661.15,-534.29C1646.48,-514.08 1627.15,-491.1 1605.59,-474.8 1529.51,-417.27 1427.73,-377.21 1354.1,-353.36" style=""/>
<polygon fill="none" stroke="black" points="1355.48,-350.13 1344.89,-350.42 1353.35,-356.79 1355.48,-350.13" style=""/>
<text text-anchor="middle" x="1593.97" y="-444.2" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-29 13:14:10 -04:00
<!-- Customer -->
2025-10-30 14:14:02 -04:00
<g id="node6" class="node" pointer-events="visible" data-name="Customer">
<polygon fill="lightblue" stroke="black" points="95.65,-475.3 95.65,-684.1 383.53,-684.1 383.53,-475.3 95.65,-475.3" style=""/>
<text text-anchor="middle" x="239.59" y="-667.5" font-family="Times,serif" font-size="14.00" style="">Customer</text>
<polyline fill="none" stroke="black" points="95.65,-659.3 383.53,-659.3" style=""/>
<text text-anchor="start" x="103.65" y="-642.7" font-family="Times,serif" font-size="14.00" style=""># id : String</text>
<text text-anchor="start" x="103.65" y="-625.9" font-family="Times,serif" font-size="14.00" style=""># updated : ZonedDateTime</text>
<text text-anchor="start" x="103.65" y="-609.1" font-family="Times,serif" font-size="14.00" style="">- phone : String</text>
<text text-anchor="start" x="103.65" y="-592.3" font-family="Times,serif" font-size="14.00" style="">- mailing : Address</text>
<text text-anchor="start" x="103.65" y="-575.5" font-family="Times,serif" font-size="14.00" style="">- email : String</text>
<text text-anchor="start" x="103.65" y="-558.7" font-family="Times,serif" font-size="14.00" style="">- nameFirst : String</text>
<text text-anchor="start" x="103.65" y="-541.9" font-family="Times,serif" font-size="14.00" style="">- nameLast : String</text>
<polyline fill="none" stroke="black" points="95.65,-533.7 383.53,-533.7" style=""/>
<text text-anchor="start" x="103.65" y="-517.1" font-family="Times,serif" font-size="14.00" style="">+ Customer(nameFirst, nameLast, phone, email)</text>
<text text-anchor="start" x="103.65" y="-500.3" font-family="Times,serif" font-size="14.00" style="">+ getId() : String</text>
<text text-anchor="start" x="103.65" y="-483.5" font-family="Times,serif" font-size="14.00" style="">+ getEmail() : String</text>
2025-10-29 13:14:10 -04:00
</g>
<!-- Address -->
2025-10-30 14:14:02 -04:00
<g id="node7" class="node" pointer-events="visible" data-name="Address">
<polygon fill="lightblue" stroke="black" points="320.76,-237.9 320.76,-413.1 518.43,-413.1 518.43,-237.9 320.76,-237.9" style=""/>
<text text-anchor="middle" x="419.59" y="-396.5" font-family="Times,serif" font-size="14.00" style="">Address</text>
<polyline fill="none" stroke="black" points="320.76,-388.3 518.43,-388.3" style=""/>
<text text-anchor="start" x="328.76" y="-371.7" font-family="Times,serif" font-size="14.00" style="">- street : String</text>
<text text-anchor="start" x="328.76" y="-354.9" font-family="Times,serif" font-size="14.00" style="">- city : String</text>
<text text-anchor="start" x="328.76" y="-338.1" font-family="Times,serif" font-size="14.00" style="">- state : String</text>
<text text-anchor="start" x="328.76" y="-321.3" font-family="Times,serif" font-size="14.00" style="">- zip : String</text>
<polyline fill="none" stroke="black" points="320.76,-313.1 518.43,-313.1" style=""/>
<text text-anchor="start" x="328.76" y="-296.5" font-family="Times,serif" font-size="14.00" style="">+ Address(street, city, state, zip)</text>
<text text-anchor="start" x="328.76" y="-279.7" font-family="Times,serif" font-size="14.00" style="">+ toString() : String</text>
<text text-anchor="start" x="328.76" y="-262.9" font-family="Times,serif" font-size="14.00" style="">+ equals(Object) : boolean</text>
<text text-anchor="start" x="328.76" y="-246.1" font-family="Times,serif" font-size="14.00" style="">+ hashCode() : int</text>
2025-10-29 13:14:10 -04:00
</g>
<!-- Customer&#45;&gt;Address -->
2025-10-30 14:14:02 -04:00
<g id="edge12" class="edge" data-name="Customer-&gt;Address">
2025-10-29 13:14:10 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M313.32,-475.39C325.86,-457.83 338.83,-439.66 351.21,-422.3" style=""/>
<polygon fill="black" stroke="black" points="351.06,-422.52 351.29,-415.31 358.03,-412.75 357.8,-419.96 351.06,-422.52" style=""/>
<text text-anchor="middle" x="356.98" y="-444.2" font-family="Times,serif" font-size="14.00" style="">mailing</text>
</g>
<!-- Customer&#45;&gt;DataRepository -->
<g id="edge25" class="edge" data-name="Customer-&gt;DataRepository">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M225.85,-475.48C221.58,-398.59 229.34,-295.79 287.48,-229 335.9,-173.38 527.37,-131.47 658.05,-108.62" style=""/>
<polygon fill="black" stroke="black" points="667.74,-106.94 658.65,-113.08 662.81,-107.8 657.89,-108.65 657.89,-108.65 657.89,-108.65 662.81,-107.8 657.12,-104.21 667.74,-106.94 667.74,-106.94" style=""/>
<text text-anchor="middle" x="299.65" y="-321.3" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-29 13:14:10 -04:00
</g>
<!-- Transaction -->
2025-10-30 14:14:02 -04:00
<g id="node8" class="node" pointer-events="visible" data-name="Transaction">
<polygon fill="lightblue" stroke="black" points="378.2,-737.9 378.2,-963.5 616.98,-963.5 616.98,-737.9 378.2,-737.9" style=""/>
<text text-anchor="middle" x="497.59" y="-946.9" font-family="Times,serif" font-size="14.00" style="">Transaction</text>
<polyline fill="none" stroke="black" points="378.2,-938.7 616.98,-938.7" style=""/>
<text text-anchor="start" x="386.2" y="-922.1" font-family="Times,serif" font-size="14.00" style="">- id : String</text>
<text text-anchor="start" x="386.2" y="-905.3" font-family="Times,serif" font-size="14.00" style="">- created : ZonedDateTime</text>
<text text-anchor="start" x="386.2" y="-888.5" font-family="Times,serif" font-size="14.00" style="">- completed : ZonedDateTime</text>
<text text-anchor="start" x="386.2" y="-871.7" font-family="Times,serif" font-size="14.00" style="">- customerId : String</text>
<text text-anchor="start" x="386.2" y="-854.9" font-family="Times,serif" font-size="14.00" style="">- shipToAddress : Address</text>
<text text-anchor="start" x="386.2" y="-838.1" font-family="Times,serif" font-size="14.00" style="">- customerInventoryList : InventoryList</text>
<text text-anchor="start" x="386.2" y="-821.3" font-family="Times,serif" font-size="14.00" style="">- totalPrice : float</text>
<text text-anchor="start" x="386.2" y="-804.5" font-family="Times,serif" font-size="14.00" style="">- attributes : JsonArray</text>
<polyline fill="none" stroke="black" points="378.2,-796.3 616.98,-796.3" style=""/>
<text text-anchor="start" x="386.2" y="-779.7" font-family="Times,serif" font-size="14.00" style=""># Transaction(customer, cart)</text>
<text text-anchor="start" x="386.2" y="-762.9" font-family="Times,serif" font-size="14.00" style="">+ check() : void</text>
<text text-anchor="start" x="386.2" y="-746.1" font-family="Times,serif" font-size="14.00" style="">+ toString() : String</text>
</g>
<!-- Transaction&#45;&gt;Customer -->
<g id="edge15" class="edge" data-name="Transaction-&gt;Customer">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M390.42,-737.96C373.25,-720.06 355.55,-701.6 338.59,-683.92" style=""/>
<text text-anchor="middle" x="400.08" y="-706.8" font-family="Times,serif" font-size="14.00" style="">customerId</text>
2025-10-29 13:14:10 -04:00
</g>
<!-- Transaction&#45;&gt;Address -->
2025-10-30 14:14:02 -04:00
<g id="edge13" class="edge" data-name="Transaction-&gt;Address">
2025-10-29 13:14:10 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M494.91,-738.07C491.51,-663.04 483.84,-562.26 466.59,-474.8 463.34,-458.33 458.9,-441.11 454.04,-424.49" style=""/>
<polygon fill="black" stroke="black" points="454.07,-424.58 448.51,-419.98 450.61,-413.09 456.17,-417.68 454.07,-424.58" style=""/>
<text text-anchor="middle" x="534.98" y="-575.5" font-family="Times,serif" font-size="14.00" style="">shipToAddress</text>
2025-10-29 13:14:10 -04:00
</g>
<!-- InventoryList -->
2025-10-30 14:14:02 -04:00
<g id="node9" class="node" pointer-events="visible" data-name="InventoryList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="lightblue" stroke="black" points="755.15,-546.5 755.15,-612.9 952.03,-612.9 952.03,-546.5 755.15,-546.5" style=""/>
<text text-anchor="middle" x="853.59" y="-596.3" font-family="Times,serif" font-size="14.00" style="">InventoryList</text>
<polyline fill="none" stroke="black" points="755.15,-588.1 952.03,-588.1" style=""/>
<text text-anchor="start" x="763.15" y="-571.5" font-family="Times,serif" font-size="14.00" style="">+ InventoryList()</text>
<text text-anchor="start" x="763.15" y="-554.7" font-family="Times,serif" font-size="14.00" style="">+ add(InventoryPiece) : boolean</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-29 13:14:10 -04:00
<!-- Transaction&#45;&gt;InventoryList -->
2025-10-30 14:14:02 -04:00
<g id="edge14" class="edge" data-name="Transaction-&gt;InventoryList">
<path fill="none" stroke="black" d="M616.84,-771.06C640.91,-754.44 665.8,-736.68 688.59,-719.4 730.56,-687.57 776.27,-648.81 808.91,-620.36" style=""/>
<polygon fill="black" stroke="black" points="808.72,-620.52 810.6,-613.56 817.75,-612.63 815.87,-619.59 808.72,-620.52" style=""/>
<text text-anchor="middle" x="771.35" y="-706.8" font-family="Times,serif" font-size="14.00" style="">customerInventoryList</text>
</g>
<!-- Transaction&#45;&gt;DataRepository -->
<g id="edge27" class="edge" data-name="Transaction-&gt;DataRepository">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M562.19,-738.07C569.97,-720.64 576.83,-702.47 581.59,-684.6 633.82,-488.7 510.92,-408.81 604.59,-229 617.82,-203.61 637.94,-181.4 660,-162.6" style=""/>
<polygon fill="black" stroke="black" points="667.55,-156.36 662.71,-166.2 663.7,-159.55 659.84,-162.73 659.84,-162.73 659.84,-162.73 663.7,-159.55 656.97,-159.27 667.55,-156.36 667.55,-156.36" style=""/>
<text text-anchor="middle" x="590.65" y="-444.2" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-29 13:14:10 -04:00
<!-- InventoryList&#45;&gt;InventoryPiece -->
2025-10-30 14:14:02 -04:00
<g id="edge19" class="edge" data-name="InventoryList-&gt;InventoryPiece">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M905.3,-546.5C970.23,-506.07 1082.87,-435.92 1163.52,-385.7" style=""/>
<polygon fill="none" stroke="black" points="1163.5,-385.71 1166.48,-379.15 1173.69,-379.37 1170.71,-385.94 1163.5,-385.71" style=""/>
<text text-anchor="middle" x="1091.92" y="-444.2" font-family="Times,serif" font-size="14.00" style="">contains</text>
</g>
<!-- ArrayList -->
<g id="node20" class="node" pointer-events="visible" data-name="ArrayList">
<polygon fill="lightgray" stroke="black" stroke-dasharray="5,2" points="613.51,-304.7 613.51,-346.3 693.67,-346.3 693.67,-304.7 613.51,-304.7" style=""/>
<text text-anchor="middle" x="653.59" y="-329.7" font-family="Times,serif" font-size="14.00" style="">ArrayList</text>
<text text-anchor="middle" x="653.59" y="-312.9" font-family="Times,serif" font-size="14.00" style="">«Java Util»</text>
</g>
<!-- InventoryList&#45;&gt;ArrayList -->
<g id="edge5" class="edge" data-name="InventoryList-&gt;ArrayList">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M828.06,-546.5C788.67,-496.83 713.71,-402.31 676.18,-354.98" style=""/>
<polygon fill="none" stroke="black" points="679.09,-353.02 670.14,-347.36 673.61,-357.37 679.09,-353.02" style=""/>
<text text-anchor="middle" x="774.97" y="-444.2" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-29 13:14:10 -04:00
<!-- CustomerList -->
2025-10-30 14:14:02 -04:00
<g id="node10" class="node" pointer-events="visible" data-name="CustomerList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="lightblue" stroke="black" points="183.12,-825.9 183.12,-875.5 296.06,-875.5 296.06,-825.9 183.12,-825.9" style=""/>
<text text-anchor="middle" x="239.59" y="-858.9" font-family="Times,serif" font-size="14.00" style="">CustomerList</text>
<polyline fill="none" stroke="black" points="183.12,-850.7 296.06,-850.7" style=""/>
<text text-anchor="start" x="191.12" y="-834.1" font-family="Times,serif" font-size="14.00" style="">+ CustomerList()</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-29 13:14:10 -04:00
<!-- CustomerList&#45;&gt;Customer -->
2025-10-30 14:14:02 -04:00
<g id="edge20" class="edge" data-name="CustomerList-&gt;Customer">
<path fill="none" stroke="black" d="M239.59,-826.3C239.59,-797.01 239.59,-744.76 239.59,-695.96" style=""/>
<polygon fill="none" stroke="black" points="239.59,-695.97 235.59,-689.97 239.59,-683.97 243.59,-689.97 239.59,-695.97" style=""/>
<text text-anchor="middle" x="262.92" y="-706.8" font-family="Times,serif" font-size="14.00" style="">contains</text>
</g>
<!-- CustomerList&#45;&gt;ArrayList -->
<g id="edge6" class="edge" data-name="CustomerList-&gt;ArrayList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M271.2,-825.92C307.21,-796.89 364.65,-744.23 392.59,-684.6 412.54,-642.03 386.01,-507.46 419.83,-474.8 450.46,-445.22 577.3,-483.34 610.59,-456.8 640.52,-432.94 649.82,-387.7 652.59,-357.32" style=""/>
<polygon fill="none" stroke="black" points="656.07,-357.82 653.28,-347.6 649.09,-357.33 656.07,-357.82" style=""/>
<text text-anchor="middle" x="441.97" y="-575.5" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- TransactionList -->
2025-10-30 14:14:02 -04:00
<g id="node11" class="node" pointer-events="visible" data-name="TransactionList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="lightblue" stroke="black" points="535.48,-1063.3 535.48,-1129.7 713.7,-1129.7 713.7,-1063.3 535.48,-1063.3" style=""/>
<text text-anchor="middle" x="624.59" y="-1113.1" font-family="Times,serif" font-size="14.00" style="">TransactionList</text>
<polyline fill="none" stroke="black" points="535.48,-1104.9 713.7,-1104.9" style=""/>
<text text-anchor="start" x="543.48" y="-1088.3" font-family="Times,serif" font-size="14.00" style="">+ TransactionList()</text>
<text text-anchor="start" x="543.48" y="-1071.5" font-family="Times,serif" font-size="14.00" style="">+ add(Transaction) : boolean</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-29 13:14:10 -04:00
<!-- TransactionList&#45;&gt;Transaction -->
2025-10-30 14:14:02 -04:00
<g id="edge21" class="edge" data-name="TransactionList-&gt;Transaction">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M607.86,-1063.38C595.71,-1040.06 578.44,-1006.9 561.16,-973.74" style=""/>
<polygon fill="none" stroke="black" points="561.35,-974.1 555.03,-970.62 555.81,-963.45 562.13,-966.93 561.35,-974.1" style=""/>
<text text-anchor="middle" x="595.92" y="-986.2" font-family="Times,serif" font-size="14.00" style="">contains</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-30 14:14:02 -04:00
<!-- TransactionList&#45;&gt;ArrayList -->
<g id="edge7" class="edge" data-name="TransactionList-&gt;ArrayList">
2025-10-29 13:14:10 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M625.8,-1063.44C630.54,-937.85 647.79,-480.31 652.43,-357.19" style=""/>
<polygon fill="none" stroke="black" points="655.92,-357.66 652.8,-347.54 648.92,-357.4 655.92,-357.66" style=""/>
<text text-anchor="middle" x="660.97" y="-706.8" font-family="Times,serif" font-size="14.00" style="">extends</text>
</g>
<!-- InventoryManager -->
<g id="node12" class="node" pointer-events="visible" data-name="InventoryManager">
<polygon fill="lightblue" stroke="black" points="774.71,-763.1 774.71,-938.3 1038.47,-938.3 1038.47,-763.1 774.71,-763.1" style=""/>
<text text-anchor="middle" x="906.59" y="-921.7" font-family="Times,serif" font-size="14.00" style="">InventoryManager</text>
<polyline fill="none" stroke="black" points="774.71,-913.5 1038.47,-913.5" style=""/>
<text text-anchor="start" x="782.71" y="-896.9" font-family="Times,serif" font-size="14.00" style="">+ INVENTORY : InventoryList</text>
<text text-anchor="start" x="782.71" y="-880.1" font-family="Times,serif" font-size="14.00" style="">- INSTANCE : InventoryManager</text>
<polyline fill="none" stroke="black" points="774.71,-871.9 1038.47,-871.9" style=""/>
<text text-anchor="start" x="782.71" y="-855.3" font-family="Times,serif" font-size="14.00" style="">+ getInstance() : InventoryManager</text>
<text text-anchor="start" x="782.71" y="-838.5" font-family="Times,serif" font-size="14.00" style="">+ add(InventoryPiece) : void</text>
<text text-anchor="start" x="782.71" y="-821.7" font-family="Times,serif" font-size="14.00" style="">+ find(String) : InventoryPiece</text>
<text text-anchor="start" x="782.71" y="-804.9" font-family="Times,serif" font-size="14.00" style="">+ Remove(InventoryPiece) : InventoryPiece</text>
<text text-anchor="start" x="782.71" y="-788.1" font-family="Times,serif" font-size="14.00" style="">+ save() : void</text>
<text text-anchor="start" x="782.71" y="-771.3" font-family="Times,serif" font-size="14.00" style="">+ load() : void</text>
2025-10-29 13:14:10 -04:00
</g>
<!-- InventoryManager&#45;&gt;InventoryList -->
2025-10-30 14:14:02 -04:00
<g id="edge16" class="edge" data-name="InventoryManager-&gt;InventoryList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M889.53,-763.11C880.38,-716.68 869.51,-661.49 862.14,-624.07" style=""/>
<polygon fill="black" stroke="black" points="862.19,-624.35 857.11,-619.24 859.87,-612.58 864.96,-617.69 862.19,-624.35" style=""/>
<text text-anchor="middle" x="921.42" y="-706.8" font-family="Times,serif" font-size="14.00" style="">INVENTORY</text>
</g>
<!-- InventoryManager&#45;&gt;DataRepository -->
<g id="edge22" class="edge" data-name="InventoryManager-&gt;DataRepository">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M952.62,-763.19C958.4,-748.91 963.39,-734 966.59,-719.4 978.22,-666.34 1110.13,-1121.57 960.59,-474.8 936.45,-370.36 882.81,-259.92 841.06,-184.11" style=""/>
<polygon fill="black" stroke="black" points="836.28,-175.5 845.07,-182.07 838.71,-179.88 841.13,-184.25 841.13,-184.25 841.13,-184.25 838.71,-179.88 837.2,-186.43 836.28,-175.5 836.28,-175.5" style=""/>
<text text-anchor="middle" x="967.65" y="-444.2" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- CustomerManager -->
2025-10-30 14:14:02 -04:00
<g id="node13" class="node" pointer-events="visible" data-name="CustomerManager">
<polygon fill="lightblue" stroke="black" points="65.82,-1017.3 65.82,-1175.7 281.37,-1175.7 281.37,-1017.3 65.82,-1017.3" style=""/>
<text text-anchor="middle" x="173.59" y="-1159.1" font-family="Times,serif" font-size="14.00" style="">CustomerManager</text>
<polyline fill="none" stroke="black" points="65.82,-1150.9 281.37,-1150.9" style=""/>
<text text-anchor="start" x="73.82" y="-1134.3" font-family="Times,serif" font-size="14.00" style="">+ CUSTOMERS : CustomerList</text>
<text text-anchor="start" x="73.82" y="-1117.5" font-family="Times,serif" font-size="14.00" style="">- INSTANCE : CustomerManager</text>
<polyline fill="none" stroke="black" points="65.82,-1109.3 281.37,-1109.3" style=""/>
<text text-anchor="start" x="73.82" y="-1092.7" font-family="Times,serif" font-size="14.00" style="">+ getInstance() : CustomerManager</text>
<text text-anchor="start" x="73.82" y="-1075.9" font-family="Times,serif" font-size="14.00" style="">+ add(Customer) : boolean</text>
<text text-anchor="start" x="73.82" y="-1059.1" font-family="Times,serif" font-size="14.00" style="">+ findByEmail(String) : Customer</text>
<text text-anchor="start" x="73.82" y="-1042.3" font-family="Times,serif" font-size="14.00" style="">+ save() : void</text>
<text text-anchor="start" x="73.82" y="-1025.5" font-family="Times,serif" font-size="14.00" style="">+ load() : void</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- CustomerManager&#45;&gt;CustomerList -->
2025-10-30 14:14:02 -04:00
<g id="edge17" class="edge" data-name="CustomerManager-&gt;CustomerList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M194.75,-1017.35C206.65,-973.37 220.93,-920.63 230.13,-886.67" style=""/>
<polygon fill="black" stroke="black" points="230.02,-887.06 227.73,-880.23 233.15,-875.48 235.45,-882.32 230.02,-887.06" style=""/>
<text text-anchor="middle" x="245.6" y="-986.2" font-family="Times,serif" font-size="14.00" style="">CUSTOMERS</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-30 14:14:02 -04:00
<!-- CustomerManager&#45;&gt;DataRepository -->
<g id="edge23" class="edge" data-name="CustomerManager-&gt;DataRepository">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M112.71,-1017.54C83.01,-971.84 53.59,-911.5 53.59,-851.7 53.59,-851.7 53.59,-851.7 53.59,-324.5 53.59,-199.08 448.41,-130.87 657.72,-103.51" style=""/>
<polygon fill="black" stroke="black" points="667.55,-102.24 658.21,-107.99 662.59,-102.89 657.63,-103.53 657.63,-103.53 657.63,-103.53 662.59,-102.89 657.05,-99.06 667.55,-102.24 667.55,-102.24" style=""/>
<text text-anchor="middle" x="65.65" y="-575.5" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- TransactionManager -->
2025-10-30 14:14:02 -04:00
<g id="node14" class="node" pointer-events="visible" data-name="TransactionManager">
<polygon fill="lightblue" stroke="black" points="513.27,-1229.5 513.27,-1404.7 857.91,-1404.7 857.91,-1229.5 513.27,-1229.5" style=""/>
<text text-anchor="middle" x="685.59" y="-1388.1" font-family="Times,serif" font-size="14.00" style="">TransactionManager</text>
<polyline fill="none" stroke="black" points="513.27,-1379.9 857.91,-1379.9" style=""/>
<text text-anchor="start" x="521.27" y="-1363.3" font-family="Times,serif" font-size="14.00" style="">+ TRANSACTIONS : TransactionList</text>
<text text-anchor="start" x="521.27" y="-1346.5" font-family="Times,serif" font-size="14.00" style="">- INSTANCE : TransactionManager</text>
<polyline fill="none" stroke="black" points="513.27,-1338.3 857.91,-1338.3" style=""/>
<text text-anchor="start" x="521.27" y="-1321.7" font-family="Times,serif" font-size="14.00" style="">+ getInstance() : TransactionManager</text>
<text text-anchor="start" x="521.27" y="-1304.9" font-family="Times,serif" font-size="14.00" style="">+ TransactRequest(Customer, InventoryList) : Transaction</text>
<text text-anchor="start" x="521.27" y="-1288.1" font-family="Times,serif" font-size="14.00" style="">+ complete(Transaction) : void</text>
<text text-anchor="start" x="521.27" y="-1271.3" font-family="Times,serif" font-size="14.00" style="">+ compute(Transaction) : void</text>
<text text-anchor="start" x="521.27" y="-1254.5" font-family="Times,serif" font-size="14.00" style="">+ save() : void</text>
<text text-anchor="start" x="521.27" y="-1237.7" font-family="Times,serif" font-size="14.00" style="">+ load() : void</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- TransactionManager&#45;&gt;Customer -->
2025-10-30 14:14:02 -04:00
<g id="edge28" class="edge" data-name="TransactionManager-&gt;Customer">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M513.39,-1298.41C349.97,-1278.1 120.16,-1239.2 56.59,-1176.2 -74.46,-1046.31 50.43,-825.07 148.34,-691.93" style=""/>
<polygon fill="black" stroke="black" points="154.15,-684.08 151.81,-694.79 151.18,-688.09 148.2,-692.11 148.2,-692.11 148.2,-692.11 151.18,-688.09 144.58,-689.43 154.15,-684.08 154.15,-684.08" style=""/>
<text text-anchor="middle" x="16.65" y="-986.2" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-29 13:14:10 -04:00
<!-- TransactionManager&#45;&gt;InventoryList -->
2025-10-30 14:14:02 -04:00
<g id="edge29" class="edge" data-name="TransactionManager-&gt;InventoryList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M727.01,-1229.77C729.14,-1223.5 731.04,-1217.21 732.59,-1211 783.78,-1006.3 629.52,-898.66 765.59,-737.4 787.42,-711.53 817.37,-744.93 839.59,-719.4 862.3,-693.33 864.02,-653.16 861.11,-622.75" style=""/>
<polygon fill="black" stroke="black" points="859.97,-612.85 865.58,-622.27 860.54,-617.82 861.11,-622.78 861.11,-622.78 861.11,-622.78 860.54,-617.82 856.64,-623.3 859.97,-612.85 859.97,-612.85" style=""/>
<text text-anchor="middle" x="737.65" y="-986.2" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- TransactionManager&#45;&gt;TransactionList -->
2025-10-30 14:14:02 -04:00
<g id="edge18" class="edge" data-name="TransactionManager-&gt;TransactionList">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" d="M632.37,-1229.79C629.88,-1223.57 627.72,-1217.28 626.03,-1211 619.93,-1188.47 619.17,-1162.5 620.11,-1141.09" style=""/>
<polygon fill="black" stroke="black" points="620.09,-1141.37 616.46,-1135.15 620.81,-1129.4 624.44,-1135.62 620.09,-1141.37" style=""/>
<text text-anchor="middle" x="679.87" y="-1198.4" font-family="Times,serif" font-size="14.00" style="">TRANSACTIONS</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-30 14:14:02 -04:00
<!-- TransactionManager&#45;&gt;DataRepository -->
<g id="edge24" class="edge" data-name="TransactionManager-&gt;DataRepository">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M857.7,-1251.46C958.67,-1208.03 1066.59,-1149.45 1066.59,-1097.5 1066.59,-1097.5 1066.59,-1097.5 1066.59,-324.5 1066.59,-236.84 985.29,-175.45 910,-137.39" style=""/>
<polygon fill="black" stroke="black" points="901.33,-133.1 912.29,-133.5 905.81,-135.32 910.29,-137.54 910.29,-137.54 910.29,-137.54 905.81,-135.32 908.29,-141.57 901.33,-133.1 901.33,-133.1" style=""/>
<text text-anchor="middle" x="1078.65" y="-706.8" font-family="Times,serif" font-size="14.00" style="">uses</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-30 14:14:02 -04:00
<!-- InvalidArtOperationException -->
<g id="node16" class="node" pointer-events="visible" data-name="InvalidArtOperationException">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="lightcoral" stroke="black" points="978.59,-1292.3 978.59,-1341.9 1220.59,-1341.9 1220.59,-1292.3 978.59,-1292.3" style=""/>
<text text-anchor="middle" x="1099.59" y="-1325.3" font-family="Times,serif" font-size="14.00" style="">InvalidArtOperationException</text>
<polyline fill="none" stroke="black" points="978.59,-1317.1 1220.59,-1317.1" style=""/>
<text text-anchor="start" x="986.59" y="-1300.5" font-family="Times,serif" font-size="14.00" style="">+ InvalidArtOperationException(String)</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-30 14:14:02 -04:00
<!-- RuntimeException -->
<g id="node21" class="node" pointer-events="visible" data-name="RuntimeException">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<polygon fill="lightgray" stroke="black" stroke-dasharray="5,2" points="1421.1,-1075.7 1421.1,-1117.3 1542.08,-1117.3 1542.08,-1075.7 1421.1,-1075.7" style=""/>
<text text-anchor="middle" x="1481.59" y="-1100.7" font-family="Times,serif" font-size="14.00" style="">RuntimeException</text>
<text text-anchor="middle" x="1481.59" y="-1083.9" font-family="Times,serif" font-size="14.00" style="">«Java Lang»</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-30 14:14:02 -04:00
<!-- InvalidArtOperationException&#45;&gt;RuntimeException -->
<g id="edge8" class="edge" data-name="InvalidArtOperationException-&gt;RuntimeException">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1132.88,-1292.33C1158.77,-1274.2 1195.83,-1249.04 1229.59,-1229 1297.48,-1188.71 1378.93,-1147.42 1430.48,-1122.12" style=""/>
<polygon fill="none" stroke="black" points="1431.89,-1125.32 1439.34,-1117.79 1428.82,-1119.04 1431.89,-1125.32" style=""/>
<text text-anchor="middle" x="1312.97" y="-1198.4" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
2025-10-30 14:14:02 -04:00
<!-- InvalidRecordDataException -->
<g id="node17" class="node" pointer-events="visible" data-name="InvalidRecordDataException">
<polygon fill="lightcoral" stroke="black" points="1238.48,-1292.3 1238.48,-1341.9 1472.7,-1341.9 1472.7,-1292.3 1238.48,-1292.3" style=""/>
<text text-anchor="middle" x="1355.59" y="-1325.3" font-family="Times,serif" font-size="14.00" style="">InvalidRecordDataException</text>
<polyline fill="none" stroke="black" points="1238.48,-1317.1 1472.7,-1317.1" style=""/>
<text text-anchor="start" x="1246.48" y="-1300.5" font-family="Times,serif" font-size="14.00" style="">+ InvalidRecordDataException(String)</text>
</g>
<!-- InvalidRecordDataException&#45;&gt;RuntimeException -->
<g id="edge9" class="edge" data-name="InvalidRecordDataException-&gt;RuntimeException">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1369.08,-1292.71C1392.17,-1252.63 1439.26,-1170.94 1464.58,-1127.01" style=""/>
<polygon fill="none" stroke="black" points="1467.51,-1128.94 1469.47,-1118.53 1461.44,-1125.45 1467.51,-1128.94" style=""/>
<text text-anchor="middle" x="1443.97" y="-1198.4" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- InvalidTransactionException -->
2025-10-30 14:14:02 -04:00
<g id="node18" class="node" pointer-events="visible" data-name="InvalidTransactionException">
<polygon fill="lightcoral" stroke="black" points="1490.87,-1292.3 1490.87,-1341.9 1724.31,-1341.9 1724.31,-1292.3 1490.87,-1292.3" style=""/>
<text text-anchor="middle" x="1607.59" y="-1325.3" font-family="Times,serif" font-size="14.00" style="">InvalidTransactionException</text>
<polyline fill="none" stroke="black" points="1490.87,-1317.1 1724.31,-1317.1" style=""/>
<text text-anchor="start" x="1498.87" y="-1300.5" font-family="Times,serif" font-size="14.00" style="">+ InvalidTransactionException(String)</text>
</g>
<!-- InvalidTransactionException&#45;&gt;RuntimeException -->
<g id="edge10" class="edge" data-name="InvalidTransactionException-&gt;RuntimeException">
2025-10-28 11:43:15 -04:00
2025-10-30 14:14:02 -04:00
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1594.11,-1292.71C1571.01,-1252.63 1523.92,-1170.94 1498.6,-1127.01" style=""/>
<polygon fill="none" stroke="black" points="1501.74,-1125.45 1493.71,-1118.53 1495.67,-1128.94 1501.74,-1125.45" style=""/>
<text text-anchor="middle" x="1565.97" y="-1198.4" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
<!-- InvalidTransOperationException -->
2025-10-30 14:14:02 -04:00
<g id="node19" class="node" pointer-events="visible" data-name="InvalidTransOperationException">
<polygon fill="lightcoral" stroke="black" points="1741.98,-1292.3 1741.98,-1341.9 1997.2,-1341.9 1997.2,-1292.3 1741.98,-1292.3" style=""/>
<text text-anchor="middle" x="1869.59" y="-1325.3" font-family="Times,serif" font-size="14.00" style="">InvalidTransOperationException</text>
<polyline fill="none" stroke="black" points="1741.98,-1317.1 1997.2,-1317.1" style=""/>
<text text-anchor="start" x="1749.98" y="-1300.5" font-family="Times,serif" font-size="14.00" style="">+ InvalidTransOperationException(String)</text>
</g>
<!-- InvalidTransOperationException&#45;&gt;RuntimeException -->
<g id="edge11" class="edge" data-name="InvalidTransOperationException-&gt;RuntimeException">
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1834.62,-1292.49C1807.46,-1274.45 1768.65,-1249.32 1733.59,-1229 1665.09,-1189.3 1583.47,-1147.71 1532.08,-1122.19" style=""/>
<polygon fill="none" stroke="black" points="1533.77,-1119.12 1523.26,-1117.82 1530.67,-1125.4 1533.77,-1119.12" style=""/>
<text text-anchor="middle" x="1721.97" y="-1198.4" font-family="Times,serif" font-size="14.00" style="">extends</text>
2025-10-28 11:43:15 -04:00
</g>
</g>
</svg>