docs: add architecture and veins documentation
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

- System overview, artery hierarchy, build flow, room config diagrams
- Veins docs: Jira, Slack, Google OAuth
- Shunts docs: MercadoPago mock
- DOT source files with generated SVGs
- HTML viewers with navigation and full-screen mode

Solves:
- Freelance work standardization
- Missing infrastructure replication (shunts)
- Reliable testing environment (BDD -> Gherkin -> Tests)
This commit is contained in:
buenosairesam
2026-01-02 22:09:13 -03:00
parent 05e7ead081
commit 22356fed66
22 changed files with 2887 additions and 0 deletions

View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.1 (0)
-->
<!-- Title: RoomConfig Pages: 1 -->
<svg width="2212pt" height="193pt"
viewBox="0.00 0.00 2212.00 193.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 188.75)">
<title>RoomConfig</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-188.75 2208,-188.75 2208,4 -4,4"/>
<text xml:space="preserve" text-anchor="middle" x="1102" y="-165.55" font-family="Helvetica,sans-Serif" font-size="16.00">Soleprint &#45; Room Configuration Structure</text>
<g id="clust1" class="cluster">
<title>cluster_room</title>
<polygon fill="#e8f5e9" stroke="#e8f5e9" points="8,-14.75 8,-149.25 1854,-149.25 1854,-14.75 8,-14.75"/>
<text xml:space="preserve" text-anchor="middle" x="931" y="-130.05" font-family="Helvetica,sans-Serif" font-size="16.00">cfg/&lt;room&gt;/</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_data</title>
<polygon fill="#dcedc8" stroke="#dcedc8" points="16,-34.25 16,-113.75 392,-113.75 392,-34.25 16,-34.25"/>
<text xml:space="preserve" text-anchor="middle" x="204" y="-94.55" font-family="Helvetica,sans-Serif" font-size="16.00">data/</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_docker</title>
<polygon fill="#ffecb3" stroke="#ffecb3" points="400,-34.25 400,-113.75 932,-113.75 932,-34.25 400,-34.25"/>
<text xml:space="preserve" text-anchor="middle" x="666" y="-94.55" font-family="Helvetica,sans-Serif" font-size="16.00">Docker</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_soleprint</title>
<polygon fill="#e1bee7" stroke="#e1bee7" points="940,-34.25 940,-113.75 1176,-113.75 1176,-34.25 940,-34.25"/>
<text xml:space="preserve" text-anchor="middle" x="1058" y="-94.55" font-family="Helvetica,sans-Serif" font-size="16.00">soleprint/</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_extras</title>
<polygon fill="#b2ebf2" stroke="#b2ebf2" points="1184,-34.25 1184,-113.75 1672,-113.75 1672,-34.25 1184,-34.25"/>
<text xml:space="preserve" text-anchor="middle" x="1428" y="-94.55" font-family="Helvetica,sans-Serif" font-size="16.00">Room&#45;specific</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_examples</title>
<polygon fill="none" stroke="gray" stroke-dasharray="5,2" points="1862,-8 1862,-140 2196,-140 2196,-8 1862,-8"/>
<text xml:space="preserve" text-anchor="middle" x="2029" y="-120.8" font-family="Helvetica,sans-Serif" font-size="16.00">Examples</text>
</g>
<!-- config_json -->
<g id="node1" class="node">
<title>config_json</title>
<path fill="#c8e6c9" stroke="black" d="M1833.5,-97.75C1833.5,-97.75 1694.5,-97.75 1694.5,-97.75 1688.5,-97.75 1682.5,-91.75 1682.5,-85.75 1682.5,-85.75 1682.5,-34.75 1682.5,-34.75 1682.5,-28.75 1688.5,-22.75 1694.5,-22.75 1694.5,-22.75 1833.5,-22.75 1833.5,-22.75 1839.5,-22.75 1845.5,-28.75 1845.5,-34.75 1845.5,-34.75 1845.5,-85.75 1845.5,-85.75 1845.5,-91.75 1839.5,-97.75 1833.5,-97.75"/>
<text xml:space="preserve" text-anchor="middle" x="1764" y="-83.3" font-family="Helvetica,sans-Serif" font-size="11.00">config.json</text>
<text xml:space="preserve" text-anchor="middle" x="1764" y="-56.8" font-family="Helvetica,sans-Serif" font-size="11.00">Framework branding</text>
<text xml:space="preserve" text-anchor="middle" x="1764" y="-43.3" font-family="Helvetica,sans-Serif" font-size="11.00">Terminology customization</text>
<text xml:space="preserve" text-anchor="middle" x="1764" y="-29.8" font-family="Helvetica,sans-Serif" font-size="11.00">(can rebrand soleprint)</text>
</g>
<!-- veins_json -->
<g id="node2" class="node">
<title>veins_json</title>
<path fill="#aed581" stroke="black" d="M83.75,-78.25C83.75,-78.25 36.25,-78.25 36.25,-78.25 30.25,-78.25 24.25,-72.25 24.25,-66.25 24.25,-66.25 24.25,-54.25 24.25,-54.25 24.25,-48.25 30.25,-42.25 36.25,-42.25 36.25,-42.25 83.75,-42.25 83.75,-42.25 89.75,-42.25 95.75,-48.25 95.75,-54.25 95.75,-54.25 95.75,-66.25 95.75,-66.25 95.75,-72.25 89.75,-78.25 83.75,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="60" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">veins.json</text>
</g>
<!-- shunts_json -->
<g id="node3" class="node">
<title>shunts_json</title>
<path fill="#aed581" stroke="black" d="M180.5,-78.25C180.5,-78.25 125.5,-78.25 125.5,-78.25 119.5,-78.25 113.5,-72.25 113.5,-66.25 113.5,-66.25 113.5,-54.25 113.5,-54.25 113.5,-48.25 119.5,-42.25 125.5,-42.25 125.5,-42.25 180.5,-42.25 180.5,-42.25 186.5,-42.25 192.5,-48.25 192.5,-54.25 192.5,-54.25 192.5,-66.25 192.5,-66.25 192.5,-72.25 186.5,-78.25 180.5,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="153" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">shunts.json</text>
</g>
<!-- depots_json -->
<g id="node4" class="node">
<title>depots_json</title>
<path fill="#aed581" stroke="black" d="M277.88,-78.25C277.88,-78.25 222.12,-78.25 222.12,-78.25 216.12,-78.25 210.12,-72.25 210.12,-66.25 210.12,-66.25 210.12,-54.25 210.12,-54.25 210.12,-48.25 216.12,-42.25 222.12,-42.25 222.12,-42.25 277.88,-42.25 277.88,-42.25 283.88,-42.25 289.88,-48.25 289.88,-54.25 289.88,-54.25 289.88,-66.25 289.88,-66.25 289.88,-72.25 283.88,-78.25 277.88,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="250" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">depots.json</text>
</g>
<!-- rooms_json -->
<g id="node5" class="node">
<title>rooms_json</title>
<path fill="#aed581" stroke="black" d="M372.38,-78.25C372.38,-78.25 319.62,-78.25 319.62,-78.25 313.62,-78.25 307.62,-72.25 307.62,-66.25 307.62,-66.25 307.62,-54.25 307.62,-54.25 307.62,-48.25 313.62,-42.25 319.62,-42.25 319.62,-42.25 372.38,-42.25 372.38,-42.25 378.38,-42.25 384.38,-48.25 384.38,-54.25 384.38,-54.25 384.38,-66.25 384.38,-66.25 384.38,-72.25 378.38,-78.25 372.38,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="346" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">rooms.json</text>
</g>
<!-- docker_compose -->
<g id="node6" class="node">
<title>docker_compose</title>
<path fill="#ffe082" stroke="black" d="M525.62,-78.25C525.62,-78.25 420.38,-78.25 420.38,-78.25 414.38,-78.25 408.38,-72.25 408.38,-66.25 408.38,-66.25 408.38,-54.25 408.38,-54.25 408.38,-48.25 414.38,-42.25 420.38,-42.25 420.38,-42.25 525.62,-42.25 525.62,-42.25 531.62,-42.25 537.62,-48.25 537.62,-54.25 537.62,-54.25 537.62,-66.25 537.62,-66.25 537.62,-72.25 531.62,-78.25 525.62,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="473" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">docker&#45;compose.yml</text>
</g>
<!-- dockerfile_be -->
<g id="node7" class="node">
<title>dockerfile_be</title>
<path fill="#ffe082" stroke="black" d="M664.12,-78.25C664.12,-78.25 567.88,-78.25 567.88,-78.25 561.88,-78.25 555.88,-72.25 555.88,-66.25 555.88,-66.25 555.88,-54.25 555.88,-54.25 555.88,-48.25 561.88,-42.25 567.88,-42.25 567.88,-42.25 664.12,-42.25 664.12,-42.25 670.12,-42.25 676.12,-48.25 676.12,-54.25 676.12,-54.25 676.12,-66.25 676.12,-66.25 676.12,-72.25 670.12,-78.25 664.12,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="616" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">Dockerfile.backend</text>
</g>
<!-- dockerfile_fe -->
<g id="node8" class="node">
<title>dockerfile_fe</title>
<path fill="#ffe082" stroke="black" d="M803.5,-78.25C803.5,-78.25 706.5,-78.25 706.5,-78.25 700.5,-78.25 694.5,-72.25 694.5,-66.25 694.5,-66.25 694.5,-54.25 694.5,-54.25 694.5,-48.25 700.5,-42.25 706.5,-42.25 706.5,-42.25 803.5,-42.25 803.5,-42.25 809.5,-42.25 815.5,-48.25 815.5,-54.25 815.5,-54.25 815.5,-66.25 815.5,-66.25 815.5,-72.25 809.5,-78.25 803.5,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="755" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">Dockerfile.frontend</text>
</g>
<!-- env_example -->
<g id="node9" class="node">
<title>env_example</title>
<path fill="#ffe082" stroke="black" d="M912.12,-78.25C912.12,-78.25 845.88,-78.25 845.88,-78.25 839.88,-78.25 833.88,-72.25 833.88,-66.25 833.88,-66.25 833.88,-54.25 833.88,-54.25 833.88,-48.25 839.88,-42.25 845.88,-42.25 845.88,-42.25 912.12,-42.25 912.12,-42.25 918.12,-42.25 924.12,-48.25 924.12,-54.25 924.12,-54.25 924.12,-66.25 924.12,-66.25 924.12,-72.25 918.12,-78.25 912.12,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="879" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">.env.example</text>
</g>
<!-- spr_compose -->
<g id="node10" class="node">
<title>spr_compose</title>
<path fill="#ce93d8" stroke="black" d="M1084,-78.25C1084,-78.25 960,-78.25 960,-78.25 954,-78.25 948,-72.25 948,-66.25 948,-66.25 948,-54.25 948,-54.25 948,-48.25 954,-42.25 960,-42.25 960,-42.25 1084,-42.25 1084,-42.25 1090,-42.25 1096,-48.25 1096,-54.25 1096,-54.25 1096,-66.25 1096,-66.25 1096,-72.25 1090,-78.25 1084,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="1022" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">docker&#45;compose.yml</text>
<text xml:space="preserve" text-anchor="middle" x="1022" y="-49.8" font-family="Helvetica,sans-Serif" font-size="11.00">(soleprint for this room)</text>
</g>
<!-- spr_env -->
<g id="node11" class="node">
<title>spr_env</title>
<path fill="#ce93d8" stroke="black" d="M1156,-78.25C1156,-78.25 1126,-78.25 1126,-78.25 1120,-78.25 1114,-72.25 1114,-66.25 1114,-66.25 1114,-54.25 1114,-54.25 1114,-48.25 1120,-42.25 1126,-42.25 1126,-42.25 1156,-42.25 1156,-42.25 1162,-42.25 1168,-48.25 1168,-54.25 1168,-54.25 1168,-66.25 1168,-66.25 1168,-72.25 1162,-78.25 1156,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="1141" y="-56.55" font-family="Helvetica,sans-Serif" font-size="11.00">.env</text>
</g>
<!-- databrowse -->
<g id="node12" class="node">
<title>databrowse</title>
<path fill="#80deea" stroke="black" d="M1299.75,-78.25C1299.75,-78.25 1204.25,-78.25 1204.25,-78.25 1198.25,-78.25 1192.25,-72.25 1192.25,-66.25 1192.25,-66.25 1192.25,-54.25 1192.25,-54.25 1192.25,-48.25 1198.25,-42.25 1204.25,-42.25 1204.25,-42.25 1299.75,-42.25 1299.75,-42.25 1305.75,-42.25 1311.75,-48.25 1311.75,-54.25 1311.75,-54.25 1311.75,-66.25 1311.75,-66.25 1311.75,-72.25 1305.75,-78.25 1299.75,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="1252" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">databrowse/depot/</text>
<text xml:space="preserve" text-anchor="middle" x="1252" y="-49.8" font-family="Helvetica,sans-Serif" font-size="11.00">(DB schema)</text>
</g>
<!-- tester -->
<g id="node13" class="node">
<title>tester</title>
<path fill="#80deea" stroke="black" d="M1406,-78.25C1406,-78.25 1342,-78.25 1342,-78.25 1336,-78.25 1330,-72.25 1330,-66.25 1330,-66.25 1330,-54.25 1330,-54.25 1330,-48.25 1336,-42.25 1342,-42.25 1342,-42.25 1406,-42.25 1406,-42.25 1412,-42.25 1418,-48.25 1418,-54.25 1418,-54.25 1418,-66.25 1418,-66.25 1418,-72.25 1412,-78.25 1406,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="1374" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">tester/tests/</text>
<text xml:space="preserve" text-anchor="middle" x="1374" y="-49.8" font-family="Helvetica,sans-Serif" font-size="11.00">(Room tests)</text>
</g>
<!-- monitors -->
<g id="node14" class="node">
<title>monitors</title>
<path fill="#80deea" stroke="black" d="M1533.5,-78.25C1533.5,-78.25 1448.5,-78.25 1448.5,-78.25 1442.5,-78.25 1436.5,-72.25 1436.5,-66.25 1436.5,-66.25 1436.5,-54.25 1436.5,-54.25 1436.5,-48.25 1442.5,-42.25 1448.5,-42.25 1448.5,-42.25 1533.5,-42.25 1533.5,-42.25 1539.5,-42.25 1545.5,-48.25 1545.5,-54.25 1545.5,-54.25 1545.5,-66.25 1545.5,-66.25 1545.5,-72.25 1539.5,-78.25 1533.5,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="1491" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">monitors/</text>
<text xml:space="preserve" text-anchor="middle" x="1491" y="-49.8" font-family="Helvetica,sans-Serif" font-size="11.00">(Room monitors)</text>
</g>
<!-- models -->
<g id="node15" class="node">
<title>models</title>
<path fill="#80deea" stroke="black" d="M1652,-78.25C1652,-78.25 1576,-78.25 1576,-78.25 1570,-78.25 1564,-72.25 1564,-66.25 1564,-66.25 1564,-54.25 1564,-54.25 1564,-48.25 1570,-42.25 1576,-42.25 1576,-42.25 1652,-42.25 1652,-42.25 1658,-42.25 1664,-48.25 1664,-54.25 1664,-54.25 1664,-66.25 1664,-66.25 1664,-72.25 1658,-78.25 1652,-78.25"/>
<text xml:space="preserve" text-anchor="middle" x="1614" y="-63.3" font-family="Helvetica,sans-Serif" font-size="11.00">models/</text>
<text xml:space="preserve" text-anchor="middle" x="1614" y="-49.8" font-family="Helvetica,sans-Serif" font-size="11.00">(Room models)</text>
</g>
<!-- standalone -->
<g id="node16" class="node">
<title>standalone</title>
<path fill="#f5f5f5" stroke="black" d="M1982,-97.75C1982,-97.75 1882,-97.75 1882,-97.75 1876,-97.75 1870,-91.75 1870,-85.75 1870,-85.75 1870,-34.75 1870,-34.75 1870,-28.75 1876,-22.75 1882,-22.75 1882,-22.75 1982,-22.75 1982,-22.75 1988,-22.75 1994,-28.75 1994,-34.75 1994,-34.75 1994,-85.75 1994,-85.75 1994,-91.75 1988,-97.75 1982,-97.75"/>
<text xml:space="preserve" text-anchor="middle" x="1932" y="-83.3" font-family="Helvetica,sans-Serif" font-size="11.00">cfg/standalone/</text>
<text xml:space="preserve" text-anchor="middle" x="1932" y="-56.8" font-family="Helvetica,sans-Serif" font-size="11.00">Base soleprint</text>
<text xml:space="preserve" text-anchor="middle" x="1932" y="-43.3" font-family="Helvetica,sans-Serif" font-size="11.00">Generic veins</text>
<text xml:space="preserve" text-anchor="middle" x="1932" y="-29.8" font-family="Helvetica,sans-Serif" font-size="11.00">No docker&#45;compose</text>
</g>
<!-- amar -->
<g id="node17" class="node">
<title>amar</title>
<path fill="#f5f5f5" stroke="black" d="M2176.25,-104.5C2176.25,-104.5 2023.75,-104.5 2023.75,-104.5 2017.75,-104.5 2011.75,-98.5 2011.75,-92.5 2011.75,-92.5 2011.75,-28 2011.75,-28 2011.75,-22 2017.75,-16 2023.75,-16 2023.75,-16 2176.25,-16 2176.25,-16 2182.25,-16 2188.25,-22 2188.25,-28 2188.25,-28 2188.25,-92.5 2188.25,-92.5 2188.25,-98.5 2182.25,-104.5 2176.25,-104.5"/>
<text xml:space="preserve" text-anchor="middle" x="2100" y="-90.05" font-family="Helvetica,sans-Serif" font-size="11.00">cfg/amar/</text>
<text xml:space="preserve" text-anchor="middle" x="2100" y="-63.55" font-family="Helvetica,sans-Serif" font-size="11.00">AMAR veterinary app</text>
<text xml:space="preserve" text-anchor="middle" x="2100" y="-50.05" font-family="Helvetica,sans-Serif" font-size="11.00">amar + mercadopago shunts</text>
<text xml:space="preserve" text-anchor="middle" x="2100" y="-36.55" font-family="Helvetica,sans-Serif" font-size="11.00">Full Docker setup</text>
<text xml:space="preserve" text-anchor="middle" x="2100" y="-23.05" font-family="Helvetica,sans-Serif" font-size="11.00">Custom monitors (turnos)</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB