Index: docs/P0-ProjectDefinition/About.md
===================================================================
--- docs/P0-ProjectDefinition/About.md	(revision fe28254e92473e37e178fb19214e517a028ddb24)
+++ docs/P0-ProjectDefinition/About.md	(revision df058387ebe7d07864d874fd1376f15512418581)
@@ -6,4 +6,6 @@
 
 ## Short description
+
+Eduberza - Educational Market simulation
 
 This project is a simulation of a crypto exchange, intended for beginners and
@@ -67,5 +69,5 @@
 This is only for education purposes. The problem is fixing the financial literacy of the people.
 
-### Who uses the system? What types of users exist?
+### What types of users exist?
 
 Roles/Users that are expected to use this product are:
Index: docs/P1-ConceptualModel/ERModel.md
===================================================================
--- docs/P1-ConceptualModel/ERModel.md	(revision fe28254e92473e37e178fb19214e517a028ddb24)
+++ docs/P1-ConceptualModel/ERModel.md	(revision df058387ebe7d07864d874fd1376f15512418581)
@@ -1,14 +1,8 @@
-# Entity-Relationship Model v.01
+# Entity-Relationship Model v.02
 
 ## Diagram
 
-![ERModel_v01](ERModel_v01.png)
-
-Attachments for this page: `ERModel_v01.xml` (TerraER source) and `ERModel_v01.png`
-(exported image). Open the source with TerraER 3.11:
-
-```sh
-java -jar TerraER3.11.jar     # then File → Open → ERModel_v01.xml
-```
+![ERModel_v02](ERModel_v02.png)
+
 
 Notation: Chen. Rectangles are entity sets, diamonds are relationships, ellipses
Index: docs/P1-ConceptualModel/ERModel_v02.xml
===================================================================
--- docs/P1-ConceptualModel/ERModel_v02.xml	(revision df058387ebe7d07864d874fd1376f15512418581)
+++ docs/P1-ConceptualModel/ERModel_v02.xml	(revision df058387ebe7d07864d874fd1376f15512418581)
@@ -0,0 +1,1 @@
+<drawing><figures><ent id="0"><children><r id="1" x="831" y="612" w="210" h="72"/><t id="2" x="914.3098373413086" y="639.8279428482056"><a><text><string>Cryptos</string></text></a></t></children></ent><ent id="3"><children><r id="4" x="2127" y="612" w="210" h="72"/><t id="5" x="2209.0858306884766" y="639.8279428482056"><a><text><string>Markets</string></text></a></t></children></ent><ent id="6"><children><r id="7" x="2991" y="900" w="210" h="72"/><t id="8" x="3056.831718444824" y="927.8279428482056"><a><text><string>MarketTrades</string></text></a></t></children></ent><ent id="9"><children><r id="a" x="2991" y="1620" w="210" h="72"/><t id="b" x="3053.5976943969727" y="1647.8279428482056"><a><text><string>MarketCandles</string></text></a></t></children></ent><ent id="c"><children><r id="d" x="2127" y="2052" w="210" h="72"/><t id="e" x="2212.4098510742188" y="2079.8279428482056"><a><text><string>Orders</string></text></a></t></children></ent><ent id="f"><children><r id="10" x="1335" y="2340" w="210" h="72"/><t id="11" x="1404.0657501220703" y="2367.8279428482056"><a><text><string>Transactions</string></text></a></t></children></ent><ent id="12"><children><r id="13" x="543" y="1764" w="210" h="72"/><t id="14" x="632.0038757324219" y="1791.8279428482056"><a><text><string>Users</string></text></a></t></children></ent><ent id="15"><children><r id="16" x="183" y="1044" w="210" h="72"/><t id="17" x="259.289794921875" y="1071.8279428482056"><a><text><string>Watchlists</string></text></a></t></children></ent><rel id="18"><children><diamond id="19" x="1484" y="600" w="200" h="96"/><t id="1a" x="1554.3417892456055" y="639.8279428482056"><a><text><string>QuotedOn</string></text></a></t></children></rel><rel id="1b"><children><diamond id="1c" x="2600" y="708" w="200" h="96"/><t id="1d" x="2689.367919921875" y="747.8279428482056"><a><text><string>Fills</string></text></a></t></children></rel><rel id="1e"><children><diamond id="1f" x="2636" y="1212" w="200" h="96"/><t id="20" x="2703.44376373291" y="1251.8279428482056"><a><text><string>Aggregates</string></text></a></t></children></rel><rel id="21"><children><diamond id="22" x="2132" y="1320" w="200" h="96"/><t id="23" x="2205.107810974121" y="1359.8279428482056"><a><text><string>PlacedOn</string></text></a></t></children></rel><rel id="24"><children><diamond id="25" x="1736" y="2184" w="200" h="96"/><t id="26" x="1817.1838607788086" y="2223.8279428482056"><a><text><string>Settles</string></text></a></t></children></rel><rel id="27"><children><diamond id="28" x="944" y="2040" w="200" h="96"/><t id="29" x="1021.3318328857422" y="2079.8279428482056"><a><text><string>Records</string></text></a></t></children></rel><rel id="2a"><children><diamond id="2b" x="1340" y="1896" w="200" h="96"/><t id="2c" x="1422.31787109375" y="1935.8279428482056"><a><text><string>Places</string></text></a></t></children></rel><rel id="2d"><children><diamond id="2e" x="692" y="1176" w="200" h="96"/><t id="2f" x="775.811882019043" y="1215.8279428482056"><a><text><string>Holds</string></text></a></t></children></rel><rel id="30"><children><diamond id="31" x="368" y="1392" w="200" h="96"/><t id="32" x="452.01588439941406" y="1431.8279428482056"><a><text><string>Owns</string></text></a></t></children></rel><rel id="33"><children><diamond id="34" x="476" y="780" w="200" h="96"/><t id="35" x="551.2078247070312" y="819.8279428482056"><a><text><string>Contains</string></text></a></t></children></rel><llabelUm id="36"><points><p colinear="true" x="1041.5" y="648" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1483.5672689324151" y="648" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="37"><Owner><r ref="1"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="38"><Owner><diamond ref="19"/></Owner></diamondConnector></endConnector></llabelUm><llabelDoubleMuitos id="39"><points><p colinear="true" x="1684.4327310675847" y="648" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2126.5" y="648" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="3a"><Owner><diamond ref="19"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="3b"><Owner><r ref="4"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleMuitos><llabelUm id="3c"><points><p colinear="true" x="2337.5" y="672.3461538461538" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2631.861419777714" y="740.2757122563955" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="3d"><Owner><r ref="4"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="3e"><Owner><diamond ref="1c"/></Owner></diamondConnector></endConnector></llabelUm><llabelDoubleMuitos id="3f"><points><p colinear="true" x="2751.942569236337" y="779.6102587437896" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3015.7" y="899.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="40"><Owner><diamond ref="1c"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="41"><Owner><r ref="7"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleMuitos><llabelUm id="42"><points><p colinear="true" x="2262.0588235294117" y="684.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2707.254586641136" y="1225.0948552070938" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="43"><Owner><r ref="4"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="44"><Owner><diamond ref="1f"/></Owner></diamondConnector></endConnector></llabelUm><llabelDoubleMuitos id="45"><points><p colinear="true" x="2766.8155961466423" y="1293.8971557613065" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3062.818181818182" y="1619.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="46"><Owner><diamond ref="1f"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="47"><Owner><r ref="a"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleMuitos><llabelMuitos id="48"><points><p colinear="true" x="657.125" y="1763.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="781.1012874391325" y="1267.5948502434696" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="49"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="4a"><Owner><diamond ref="2e"/></Owner></diamondConnector></endConnector></llabelMuitos><llabelMuitos id="4b"><points><p colinear="true" x="802.8987125608675" y="1180.4051497565304" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="926.875" y="684.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="4c"><Owner><diamond ref="2e"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="4d"><Owner><r ref="1"/></Owner></rConnector></endConnector></llabelMuitos><llabelUm id="4e"><points><p colinear="true" x="629.75" y="1763.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="487.66358167889183" y="1479.3271633577838" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="4f"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="50"><Owner><diamond ref="31"/></Owner></diamondConnector></endConnector></llabelUm><llabelDoubleMuitos id="51"><points><p colinear="true" x="448.33641832110817" y="1400.6728366422162" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="306.25" y="1116.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="52"><Owner><diamond ref="31"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="53"><Owner><r ref="16"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleMuitos><llabelMuitos id="54"><points><p colinear="true" x="329.7142857142857" y="1043.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="540.0933786333907" y="859.4182936957832" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="55"><Owner><r ref="16"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="56"><Owner><diamond ref="34"/></Owner></diamondConnector></endConnector></llabelMuitos><llabelMuitos id="57"><points><p colinear="true" x="625.5502233131613" y="803.2248883434194" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="863" y="684.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="58"><Owner><diamond ref="34"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="59"><Owner><r ref="1"/></Owner></rConnector></endConnector></llabelMuitos><llabelUm id="5a"><points><p colinear="true" x="753.5" y="1819.1818181818182" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1366.8736476037463" y="1930.7042995643176" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="5b"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="5c"><Owner><diamond ref="2b"/></Owner></diamondConnector></endConnector></llabelUm><llabelDoubleMuitos id="5d"><points><p colinear="true" x="1513.1263523962534" y="1957.2957004356824" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2126.5" y="2068.818181818182" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="5e"><Owner><diamond ref="2b"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="5f"><Owner><r ref="d"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleMuitos><llabelUm id="60"><points><p colinear="true" x="2232" y="684.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2232" y="1319.0984769425318" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="61"><Owner><r ref="4"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="62"><Owner><diamond ref="22"/></Owner></diamondConnector></endConnector></llabelUm><llabelDoubleMuitos id="63"><points><p colinear="true" x="2232" y="1416.9015230574682" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2232" y="2051.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="64"><Owner><diamond ref="22"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="65"><Owner><r ref="d"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleMuitos><llabelUm id="66"><points><p colinear="true" x="698.1875" y="1836.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1003.7246828249872" y="2058.708860236354" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="67"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="68"><Owner><diamond ref="28"/></Owner></diamondConnector></endConnector></llabelUm><llabelDoubleMuitos id="69"><points><p colinear="true" x="1084.2753171750128" y="2117.291139763646" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1389.8125" y="2339.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="6a"><Owner><diamond ref="28"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="6b"><Owner><r ref="10"/></Owner></rConnector></endConnector><a><innerStrokeWidthFactor><double>3</double></innerStrokeWidthFactor></a></llabelDoubleMuitos><llabelUm id="6c"><points><p colinear="true" x="2131.625" y="2124.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1893.4943672237673" y="2211.0929573731755" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="6d"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><diamondConnector id="6e"><Owner><diamond ref="25"/></Owner></diamondConnector></endConnector></llabelUm><llabelMuitos id="6f"><points><p colinear="true" x="1778.5056327762327" y="2252.9070426268245" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1540.375" y="2339.5" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="70"><Owner><diamond ref="25"/></Owner></diamondConnector></startConnector><endConnector><rConnector id="71"><Owner><r ref="10"/></Owner></rConnector></endConnector></llabelMuitos><atr id="72" nullable="false" attributeType="VARCHAR2(128)"><children><e id="73" x="483.2879772722292" y="688.0138777184987" w="168" h="50"/><t id="74" x="537.7437725603152" y="704.8418205667043"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="75"><points><p colinear="true" x="830.5" y="666.602496464743" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="640.7466049810013" y="700.649303177978" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="76"><Owner><r ref="1"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="77"><Owner><e ref="73"/></Owner></ellipseConnector></endConnector></llabel><atr id="78" nullable="false" attributeType="VARCHAR2(128)"><children><e id="79" x="504.05228692947753" y="484.769218446131" w="168" h="49.99999999999994"/><t id="7a" x="571.9841793244971" y="501.5971612943365"><a><text><string>name</string></text></a></t></children></atr><llabel id="7b"><points><p colinear="true" x="844.1239982563161" y="611.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="639.6653378775244" y="530.5751342913637" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="7c"><Owner><r ref="1"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="7d"><Owner><e ref="79"/></Owner></ellipseConnector></endConnector></llabel><atr id="7e" nullable="false" attributeType="VARCHAR2(128)"><children><e id="7f" x="628.4238232664768" y="324.35488446364536" w="168" h="50"/><t id="80" x="692.0116757445041" y="341.18282731185093"><a><text><string>symbol</string></text></a></t></children></atr><llabel id="81"><points><p colinear="true" x="908.6748236410376" y="611.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="731.5447268935441" y="374.72802612097394" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="82"><Owner><r ref="1"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="83"><Owner><e ref="7f"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="84" nullable="false" attributeType="NUMBER"><children><e id="85" x="819.3688899152768" y="248.35489720331674" w="168" h="50"/><t id="86" x="897.7408534162533" y="265.1828400515223"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="87"><points><p colinear="true" x="932.8208966053434" y="611.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="906.0891405457884" y="299.3460932902019" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="88"><Owner><r ref="1"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="89"><Owner><e ref="85"/></Owner></ellipseConnector></endConnector></llabel><atr id="8a" nullable="false" attributeType="VARCHAR2(128)"><children><e id="8b" x="1841.3094746182014" y="408.2529822301684" w="168" h="50"/><t id="8c" x="1895.7652699062874" y="425.080925078374"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="8d"><points><p colinear="true" x="2179.872597753913" y="611.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1959.2534612709806" y="457.1707137922293" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="8e"><Owner><r ref="4"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="8f"><Owner><e ref="8b"/></Owner></ellipseConnector></endConnector></llabel><atr id="90" nullable="false" attributeType="VARCHAR2(128)"><children><e id="91" x="2019.9476583388696" y="271.17908277775587" w="168" h="50"/><t id="92" x="2080.469493666018" y="288.00702562596143"><a><text><string>is_active</string></text></a></t></children></atr><llabel id="93"><points><p colinear="true" x="2218.7150864492837" y="611.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2113.6734154443525" y="322.0266421024433" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="94"><Owner><r ref="4"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="95"><Owner><e ref="91"/></Owner></ellipseConnector></endConnector></llabel><atr id="96" nullable="false" attributeType="VARCHAR2(128)"><children><e id="97" x="2244.901850486384" y="261.3573706373728" w="168" h="50"/><t id="98" x="2285.0835445171456" y="278.1853134855784"><a><text><string>quote_currency</string></text></a></t></children></atr><llabel id="99"><points><p colinear="true" x="2241.780145523736" y="611.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2322.5913746299984" y="312.2744125571243" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="9a"><Owner><r ref="4"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="9b"><Owner><e ref="97"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="9c" nullable="false" attributeType="NUMBER"><children><e id="9d" x="2434.8070395037453" y="382.34031893335964" w="168" h="50"/><t id="9e" x="2513.179003004722" y="399.1682617815652"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="9f"><points><p colinear="true" x="2275.4990061296885" y="611.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2490.7104729582716" y="431.8356873746031" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="a0"><Owner><r ref="4"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="a1"><Owner><e ref="9d"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="a2" nullable="false" attributeType="NUMBER"><children><e id="a3" x="3196.5996567283373" y="515.1247586223913" w="168" h="50"/><t id="a4" x="3274.971620229314" y="531.9527014705968"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="a5"><points><p colinear="true" x="3113.0202295226572" y="899.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3269.3248233656054" y="565.8759702566165" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="a6"><Owner><r ref="7"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="a7"><Owner><e ref="a3"/></Owner></ellipseConnector></endConnector></llabel><atr id="a8" nullable="false" attributeType="VARCHAR2(128)"><children><e id="a9" x="3315.42677621649" y="596.7923752120772" w="168" h="50"/><t id="aa" x="3365.4605439166853" y="613.6203180602828"><a><text><string>executed_at</string></text></a></t></children></atr><llabel id="ab"><points><p colinear="true" x="3131.247640280458" y="899.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3376.285153628648" y="646.7739920689836" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="ac"><Owner><r ref="7"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="ad"><Owner><e ref="a9"/></Owner></ellipseConnector></endConnector></llabel><atr id="ae" nullable="false" attributeType="VARCHAR2(128)"><children><e id="af" x="3401.1916497654793" y="712.696949713766" w="168" h="50"/><t id="b0" x="3471.2115472264168" y="729.5248925619716"><a><text><string>price</string></text></a></t></children></atr><llabel id="b1"><points><p colinear="true" x="3167.635283450938" y="899.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3442.6308648073214" y="760.1375155251544" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="b2"><Owner><r ref="7"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="b3"><Owner><e ref="af"/></Owner></ellipseConnector></endConnector></llabel><atr id="b4" nullable="false" attributeType="VARCHAR2(128)"><children><e id="b5" x="3444.549092426318" y="850.2091895006434" w="168" h="50"/><t id="b6" x="3505.136937274951" y="867.037132348849"><a><text><string>quantity</string></text></a></t></children></atr><llabel id="b7"><points><p colinear="true" x="3201.5" y="921.1729419388977" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3452.448668365944" y="886.4746770366456" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="b8"><Owner><r ref="7"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="b9"><Owner><e ref="b5"/></Owner></ellipseConnector></endConnector></llabel><atr id="ba" nullable="false" attributeType="VARCHAR2(128)"><children><e id="bb" x="3440.7747537299397" y="994.3453691804748" w="168" h="50"/><t id="bc" x="3513.278667609334" y="1011.1733120286804"><a><text><string>side</string></text></a></t></children></atr><llabel id="bd"><points><p colinear="true" x="3201.5" y="956.5071226140293" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3454.236104973899" y="1006.0368546745498" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="be"><Owner><r ref="7"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="bf"><Owner><e ref="bb"/></Owner></ellipseConnector></endConnector></llabel><atr id="c0" nullable="false" attributeType="VARCHAR2(128)"><children><e id="c1" x="3390.279896373043" y="1129.4" w="168" h="50"/><t id="c2" x="3455.3257566635702" y="1146.2279428482057"><a><text><string>source</string></text></a></t></children></atr><llabel id="c3"><points><p colinear="true" x="3159.219854476264" y="972.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3435.6371144835134" y="1132.3009043392497" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="c4"><Owner><r ref="7"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="c5"><Owner><e ref="c1"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="c6" nullable="false" attributeType="NUMBER"><children><e id="c7" x="3464.4288472886956" y="1420.0289637390429" w="168" h="50"/><t id="c8" x="3542.800810789672" y="1436.8569065872484"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="c9"><points><p colinear="true" x="3174.2745025985987" y="1619.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3503.019110480273" y="1466.9370255966908" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="ca"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="cb"><Owner><e ref="c7"/></Owner></ellipseConnector></endConnector></llabel><atr id="cc" nullable="false" attributeType="VARCHAR2(128)"><children><e id="cd" x="3504.658472645275" y="1550.450205892103" w="168" h="50"/><t id="ce" x="3559.0482584118768" y="1567.2781487403086"><a><text><string>timeframe</string></text></a></t></children></atr><llabel id="cf"><points><p colinear="true" x="3201.5" y="1638.750721340985" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3514.8622954386924" y="1588.0976510478936" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="d0"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="d1"><Owner><e ref="cd"/></Owner></ellipseConnector></endConnector></llabel><atr id="d2" nullable="false" attributeType="VARCHAR2(128)"><children><e id="d3" x="3508.0611351787065" y="1686.8926664707712" w="168" h="50"/><t id="d4" x="3577.649033433101" y="1703.7206093189768"><a><text><string>open</string></text></a></t></children></atr><llabel id="d5"><points><p colinear="true" x="3201.5" y="1667.8869951594618" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3513.39890549264" y="1703.4732253229943" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="d6"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="d7"><Owner><e ref="d3"/></Owner></ellipseConnector></endConnector></llabel><atr id="d8" nullable="false" attributeType="VARCHAR2(128)"><children><e id="d9" x="3474.382480739866" y="1819.157066050806" w="168" h="50"/><t id="da" x="3545.728397487913" y="1835.9850088990115"><a><text><string>high</string></text></a></t></children></atr><llabel id="db"><points><p colinear="true" x="3185.6961294158787" y="1692.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3508.5485074731737" y="1824.1746880909268" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="dc"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="dd"><Owner><e ref="d9"/></Owner></ellipseConnector></endConnector></llabel><atr id="de" nullable="false" attributeType="VARCHAR2(128)"><children><e id="df" x="3406.1400394714774" y="1937.35644156019" w="168" h="50"/><t id="e0" x="3480.2459659851493" y="1954.1843844083955"><a><text><string>low</string></text></a></t></children></atr><llabel id="e1"><points><p colinear="true" x="3142.958736586195" y="1692.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3460.0573226090924" y="1939.0851639103305" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="e2"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="e3"><Owner><e ref="df"/></Owner></ellipseConnector></endConnector></llabel><atr id="e4" nullable="false" attributeType="VARCHAR2(128)"><children><e id="e5" x="3308.435036638292" y="2027.292451164345" w="168" h="50"/><t id="e6" x="3378.1189279346786" y="2044.1203940125506"><a><text><string>close</string></text></a></t></children></atr><llabel id="e7"><points><p colinear="true" x="3123.3027629103403" y="1692.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3374.3286659462065" y="2027.9183191033765" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="e8"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="e9"><Owner><e ref="e5"/></Owner></ellipseConnector></endConnector></llabel><atr id="ea" nullable="false" attributeType="VARCHAR2(128)"><children><e id="eb" x="3223.0394760805693" y="2103.2924102495735" w="168" h="50"/><t id="ec" x="3286.1113297182646" y="2120.120353097779"><a><text><string>volume</string></text></a></t></children></atr><llabel id="ed"><points><p colinear="true" x="3112.3096859271363" y="1692.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3296.2472404503374" y="2103.521132657545" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="ee"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="ef"><Owner><e ref="eb"/></Owner></ellipseConnector></endConnector></llabel><atr id="f0" nullable="false" attributeType="VARCHAR2(128)"><children><e id="f1" x="3021.039739054654" y="2128.3003932873994" w="168" h="50"/><t id="f2" x="3071.0915044965486" y="2145.128336135605"><a><text><string>candle_time</string></text></a></t></children></atr><llabel id="f3"><points><p colinear="true" x="3096.663483238599" y="1692.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3105.07621664273" y="2128.300776942971" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="f4"><Owner><r ref="a"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="f5"><Owner><e ref="f1"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="f6" nullable="false" attributeType="NUMBER"><children><e id="f7" x="2645.3003932873994" y="2019.491853220369" w="168" h="50.00000000000023"/><t id="f8" x="2723.672356788376" y="2036.3197960685748"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="f9"><points><p colinear="true" x="2337.5" y="2078.769945998015" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2648.642251542709" y="2052.09227057586" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="fa"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="fb"><Owner><e ref="f7"/></Owner></ellipseConnector></endConnector></llabel><atr id="fc" nullable="false" attributeType="VARCHAR2(128)"><children><e id="fd" x="2640.658472645275" y="2143.549794107897" w="168" h="50"/><t id="fe" x="2713.1623865246697" y="2160.3777369561026"><a><text><string>side</string></text></a></t></children></atr><llabel id="ff"><points><p colinear="true" x="2337.5" y="2105.249278659015" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2650.8622954386924" y="2156.9023489521064" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="100"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="101"><Owner><e ref="fd"/></Owner></ellipseConnector></endConnector></llabel><atr id="102" nullable="false" attributeType="VARCHAR2(128)"><children><e id="103" x="2605.5478781302922" y="2262.6260985404147" w="168" h="50"/><t id="104" x="2677.2477911551946" y="2279.45404138862"><a><text><string>type</string></text></a></t></children></atr><llabel id="105"><points><p colinear="true" x="2315.658888661668" y="2124.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2641.9793163146783" y="2267.1539994086" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="106"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="107"><Owner><e ref="103"/></Owner></ellipseConnector></endConnector></llabel><atr id="108" nullable="false" attributeType="VARCHAR2(128)"><children><e id="109" x="2542.1400394714774" y="2369.35644156019" w="168" h="50"/><t id="10a" x="2608.9859180725516" y="2386.1843844083955"><a><text><string>status</string></text></a></t></children></atr><llabel id="10b"><points><p colinear="true" x="2278.958736586195" y="2124.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2596.0573226090924" y="2371.0851639103303" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="10c"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="10d"><Owner><e ref="109"/></Owner></ellipseConnector></endConnector></llabel><atr id="10e" nullable="false" attributeType="VARCHAR2(128)"><children><e id="10f" x="2454.35644156019" y="2450.8439828185265" w="168" h="50"/><t id="110" x="2514.944286408823" y="2467.671925666732"><a><text><string>quantity</string></text></a></t></children></atr><llabel id="111"><points><p colinear="true" x="2260.83120690873" y="2124.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2519.2630564043266" y="2451.5389664883755" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="112"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="113"><Owner><e ref="10f"/></Owner></ellipseConnector></endConnector></llabel><atr id="114" nullable="false" attributeType="VARCHAR2(128)"><children><e id="115" x="2428.435791376831" y="2526.843934783243" w="168" h="50"/><t id="116" x="2498.4556888377683" y="2543.6718776314488"><a><text><string>price</string></text></a></t></children></atr><llabel id="117"><points><p colinear="true" x="2254.0675654410306" y="2124.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2497.7690944556634" y="2527.2580484809273" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="118"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="119"><Owner><e ref="115"/></Owner></ellipseConnector></endConnector></llabel><atr id="11a" nullable="false" attributeType="VARCHAR2(128)"><children><e id="11b" x="2226.889248622918" y="2555.658472645275" w="168" h="50"/><t id="11c" x="2284.1350677147148" y="2572.4864154934808"><a><text><string>placed_at</string></text></a></t></children></atr><llabel id="11d"><points><p colinear="true" x="2237.8447336940653" y="2124.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2307.3107007103577" y="2555.688193484461" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="11e"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="11f"><Owner><e ref="11b"/></Owner></ellipseConnector></endConnector></llabel><atr id="120" nullable="false" attributeType="VARCHAR2(128)"><children><e id="121" x="2025.3427058689322" y="2560.3003932873994" w="168" h="50"/><t id="122" x="2075.3764735691275" y="2577.128336135605"><a><text><string>executed_at</string></text></a></t></children></atr><llabel id="123"><points><p colinear="true" x="2222.997410627028" y="2124.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2116.1148360588404" y="2560.370737168798" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="124"><Owner><r ref="d"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="125"><Owner><e ref="121"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="126" nullable="false" attributeType="NUMBER"><children><e id="127" x="930.883058356455" y="2505.7299128405325" w="168" h="50"/><t id="128" x="1009.2550218574315" y="2522.557855688738"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="129"><points><p colinear="true" x="1339.7170741899063" y="2412.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1069.316739013257" y="2511.599658457038" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="12a"><Owner><r ref="10"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="12b"><Owner><e ref="127"/></Owner></ellipseConnector></endConnector></llabel><atr id="12c" nullable="false" attributeType="VARCHAR2(128)"><children><e id="12d" x="1053.2853136832525" y="2687.198719045973" w="168" h="50"/><t id="12e" x="1124.9852267081549" y="2704.0266618941787"><a><text><string>type</string></text></a></t></children></atr><llabel id="12f"><points><p colinear="true" x="1407.1352523831288" y="2412.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1159.9422415288407" y="2688.0909576904955" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="130"><Owner><r ref="10"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="131"><Owner><e ref="12d"/></Owner></ellipseConnector></endConnector></llabel><atr id="132" nullable="false" attributeType="VARCHAR2(128)"><children><e id="133" x="1246.5545344307102" y="2789.961786567261" w="168" h="50"/><t id="134" x="1308.366385932175" y="2806.7897294154664"><a><text><string>amount</string></text></a></t></children></atr><llabel id="135"><points><p colinear="true" x="1430.8995278962238" y="2412.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1337.3944779630237" y="2790.0336619281634" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="136"><Owner><r ref="10"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="137"><Owner><e ref="133"/></Owner></ellipseConnector></endConnector></llabel><atr id="138" nullable="false" attributeType="VARCHAR2(128)"><children><e id="139" x="1465.4454655692896" y="2789.961786567261" w="168" h="50"/><t id="13a" x="1524.8692936942896" y="2806.7897294154664"><a><text><string>currency</string></text></a></t></children></atr><llabel id="13b"><points><p colinear="true" x="1449.1004721037762" y="2412.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1543.605522036976" y="2790.0336619281634" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="13c"><Owner><r ref="10"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="13d"><Owner><e ref="139"/></Owner></ellipseConnector></endConnector></llabel><atr id="13e" nullable="false" attributeType="VARCHAR2(128)"><children><e id="13f" x="1658.7146863167472" y="2687.198719045973" w="168" h="50"/><t id="140" x="1713.1704816048332" y="2704.0266618941787"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="141"><points><p colinear="true" x="1472.8647476168712" y="2412.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1721.057758471159" y="2688.0909576904955" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="142"><Owner><r ref="10"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="143"><Owner><e ref="13f"/></Owner></ellipseConnector></endConnector></llabel><atr id="144" nullable="false" attributeType="VARCHAR2(128)"><children><e id="145" x="1781.116941643545" y="2505.7299128405325" w="168" h="50"/><t id="146" x="1833.5207120903224" y="2522.557855688738"><a><text><string>description</string></text></a></t></children></atr><llabel id="147"><points><p colinear="true" x="1540.2829258100937" y="2412.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1811.683260986743" y="2511.599658457038" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="148"><Owner><r ref="10"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="149"><Owner><e ref="145"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="14a" nullable="false" attributeType="NUMBER"><children><e id="14b" x="-92.14141057223696" y="1635.532837799447" w="168" h="50"/><t id="14c" x="-13.769447071260402" y="1652.3607806476525"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="14d"><points><p colinear="true" x="542.5" y="1777.5752827438127" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="61.44207870962204" y="1675.7169867493667" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="14e"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="14f"><Owner><e ref="14b"/></Owner></ellipseConnector></endConnector></llabel><atr id="150" nullable="false" attributeType="VARCHAR2(128)"><children><e id="151" x="-106.48713273326712" y="1795.485234661149" w="168" h="50"/><t id="152" x="-50.999332135122586" y="1812.3131775093545"><a><text><string>username</string></text></a></t></children></atr><llabel id="153"><points><p colinear="true" x="542.5" y="1803.223316528001" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="62.08309575110687" y="1818.4166568698076" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="154"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="155"><Owner><e ref="151"/></Owner></ellipseConnector></endConnector></llabel><atr id="156" nullable="false" attributeType="VARCHAR2(128)"><children><e id="157" x="-82.40330801234438" y="1954.2635026732946" w="168" h="50"/><t id="158" x="-13.859416105606101" y="1971.0914455215002"><a><text><string>email</string></text></a></t></children></atr><llabel id="159"><points><p colinear="true" x="542.5" y="1829.2577393983129" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="64.31455432892079" y="1962.5089623671254" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="15a"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="15b"><Owner><e ref="157"/></Owner></ellipseConnector></endConnector></llabel><atr id="15c" nullable="false" attributeType="VARCHAR2(128)"><children><e id="15d" x="-21.270321544432363" y="2102.7671287961575" w="168" h="50"/><t id="15e" x="35.12948924658326" y="2119.595071644363"><a><text><string>full_name</string></text></a></t></children></atr><llabel id="15f"><points><p colinear="true" x="582.8245603064811" y="1836.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="103.31399180642964" y="2105.818834711968" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="160"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="161"><Owner><e ref="15d"/></Owner></ellipseConnector></endConnector></llabel><atr id="162" nullable="false" attributeType="VARCHAR2(128)"><children><e id="163" x="73.40793695386031" y="2232.484499929924" w="168" h="50"/><t id="164" x="113.76963128979781" y="2249.3124427781295"><a><text><string>password_hash</string></text></a></t></children></atr><llabel id="165"><points><p colinear="true" x="608.8585420840991" y="1836.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="183.9249235586994" y="2233.72326742507" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="166"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="167"><Owner><e ref="163"/></Owner></ellipseConnector></endConnector></llabel><atr id="168" nullable="false" attributeType="VARCHAR2(128)"><children><e id="169" x="196.20490163804124" y="2333.6523416658747" w="168" h="50"/><t id="16a" x="230.73457235337327" y="2350.4802845140803"><a><text><string>available_balance</string></text></a></t></children></atr><llabel id="16b"><points><p colinear="true" x="623.9698114749144" y="1836.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="297.1712755917845" y="2334.1411916832512" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="16c"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="16d"><Owner><e ref="169"/></Owner></ellipseConnector></endConnector></llabel><atr id="16e" nullable="false" attributeType="VARCHAR2(128)"><children><e id="16f" x="296.32230639872284" y="2409.6523239014355" w="168" h="50"/><t id="170" x="331.9139735740158" y="2426.480266749641"><a><text><string>invested_balance</string></text></a></t></children></atr><llabel id="171"><points><p colinear="true" x="632.605372975891" y="1836.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="391.4913835562713" y="2409.856399833859" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="172"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="173"><Owner><e ref="16f"/></Owner></ellipseConnector></endConnector></llabel><atr id="174" nullable="false" attributeType="VARCHAR2(128)"><children><e id="175" x="498.0778410735205" y="2442.4248820427115" w="168" h="50"/><t id="176" x="552.5336363616065" y="2459.252824890917"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="177"><points><p colinear="true" x="644.3948620053657" y="1836.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="585.0953810392355" y="2442.43620202953" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="178"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="179"><Owner><e ref="175"/></Owner></ellipseConnector></endConnector></llabel><atr id="17a" nullable="false" attributeType="VARCHAR2(128)"><children><e id="17b" x="699.8333757483744" y="2439.2718205118454" w="168" h="50"/><t id="17c" x="751.943162735679" y="2456.099763360051"><a><text><string>updated_at</string></text></a></t></children></atr><llabel id="17d"><points><p colinear="true" x="655.463688902226" y="1836.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="779.1289174237263" y="2439.3202333224326" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="17e"><Owner><r ref="13"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="17f"><Owner><e ref="17b"/></Owner></ellipseConnector></endConnector></llabel><atr id="180" nullable="false" attributeType="VARCHAR2(128)"><children><e id="181" x="-19.694810176908106" y="1374.4692972727066" w="168" h="50"/><t id="182" x="34.76098511117783" y="1391.2972401209122"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="183"><points><p colinear="true" x="262.44242485534556" y="1116.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="82.27473420817215" y="1375.0202022804615" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="184"><Owner><r ref="16"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="185"><Owner><e ref="181"/></Owner></ellipseConnector></endConnector></llabel><atr id="186" nullable="false" attributeType="VARCHAR2(128)"><children><e id="187" x="-180.07502367476116" y="987.2772107098972" w="168" h="50"/><t id="188" x="-112.14313127974162" y="1004.1051535581028"><a><text><string>name</string></text></a></t></children></atr><llabel id="189"><points><p colinear="true" x="182.5" y="1061.3975035352569" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="-22.616395965989085" y="1025.641785250418" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="18a"><Owner><r ref="16"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="18b"><Owner><e ref="187"/></Owner></ellipseConnector></endConnector></llabel><atrchave id="18c" nullable="false" attributeType="NUMBER"><children><e id="18d" x="103.0605724100169" y="678.2889277472634" w="168" h="50"/><t id="18e" x="181.43253591099347" y="695.116870595469"><a><fontUnderlined><boolean>true</boolean></fontUnderlined><fontBold><boolean>true</boolean></fontBold><text><string>id</string></text></a></t></children></atrchave><llabel id="18f"><points><p colinear="true" x="278.219854476264" y="1043.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="194.3710482664023" y="729.205969667015" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><rConnector id="190"><Owner><r ref="16"/></Owner></rConnector></startConnector><endConnector><ellipseConnector id="191"><Owner><e ref="18d"/></Owner></ellipseConnector></endConnector></llabel><atr id="192" nullable="false" attributeType="VARCHAR2(128)"><children><e id="193" x="1045.7499074759312" y="1004" w="168" h="50"/><t id="194" x="1106.337752324564" y="1020.8279428482056"><a><text><string>quantity</string></text></a></t></children></atr><llabel id="195"><points><p colinear="true" x="837.9489148679422" y="1197.4713816320225" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1091.107125586402" y="1052.0990956607504" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="196"><Owner><diamond ref="2e"/></Owner></diamondConnector></startConnector><endConnector><ellipseConnector id="197"><Owner><e ref="193"/></Owner></ellipseConnector></endConnector></llabel><atrderivado id="198"><children><e id="199" x="1092.0750236747613" y="1131.2772107098972" w="168" h="50"><a><fillColor><color rgba="#ffffebeb"/></fillColor><strokeDashes><doubleArray><double>5</double></doubleArray></strokeDashes></a></e><t id="19a" x="1149.3268394706597" y="1148.1051535581028"><a><text><string>avg_price</string></text></a></t></children></atrderivado><llabel id="19b"><points><p colinear="true" x="865.7317959892898" y="1210.999095030996" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1103.616395965989" y="1169.641785250418" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="19c"><Owner><diamond ref="2e"/></Owner></diamondConnector></startConnector><endConnector><ellipseConnector id="19d"><Owner><e ref="199"/></Owner></ellipseConnector></endConnector></llabel><atr id="19e" nullable="false" attributeType="VARCHAR2(128)"><children><e id="19f" x="1092.0750236747613" y="1266.7227892901028" w="168" h="50"/><t id="1a0" x="1146.5308189628472" y="1283.5507321383084"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="1a1"><points><p colinear="true" x="865.7317959892898" y="1237.000904969004" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1103.616395965989" y="1279.358214749582" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="1a2"><Owner><diamond ref="2e"/></Owner></diamondConnector></startConnector><endConnector><ellipseConnector id="1a3"><Owner><e ref="19f"/></Owner></ellipseConnector></endConnector></llabel><atr id="1a4" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1a5" x="1045.7499074759312" y="1394" w="168" h="50"/><t id="1a6" x="1097.8596944632359" y="1410.8279428482056"><a><text><string>updated_at</string></text></a></t></children></atr><llabel id="1a7"><points><p colinear="true" x="837.9489148679422" y="1250.5286183679775" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1091.107125586402" y="1396.9009043392496" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="1a8"><Owner><diamond ref="2e"/></Owner></diamondConnector></startConnector><endConnector><ellipseConnector id="1a9"><Owner><e ref="1a5"/></Owner></ellipseConnector></endConnector></llabel><atr id="1aa" nullable="false" attributeType="VARCHAR2(128)"><children><e id="1ab" x="248.5457551736057" y="583.792813356838" w="168" h="50"/><t id="1ac" x="306.52958085719945" y="600.6207562050436"><a><text><string>added_at</string></text></a></t></children></atr><llabel id="1ad"><points><p colinear="true" x="540.7508898645601" y="796.2615586761499" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="359.8983404514223" y="633.4709897408368" c1x="0" c1y="0" c2x="0" c2y="0"/></points><startConnector><diamondConnector id="1ae"><Owner><diamond ref="34"/></Owner></diamondConnector></startConnector><endConnector><ellipseConnector id="1af"><Owner><e ref="1ab"/></Owner></ellipseConnector></endConnector></llabel></figures></drawing>
Index: docs/P2-RelationalDesign/RelationalDesign.md
===================================================================
--- docs/P2-RelationalDesign/RelationalDesign.md	(revision fe28254e92473e37e178fb19214e517a028ddb24)
+++ docs/P2-RelationalDesign/RelationalDesign.md	(revision df058387ebe7d07864d874fd1376f15512418581)
@@ -96,5 +96,5 @@
 ![relational_schema](relational_schema.jpg)
 
-Generated in **DBeaver** from the **live** `project` schema, in crow's-foot
+Generated in **Pgadmin** from the **live** `project` schema, in crow's-foot
 notation — not drawn by hand, so it is evidence that the deployed database
 actually matches the design described above. Each box is a table with its
@@ -103,21 +103,4 @@
 
 ### How to regenerate it
-
-**With DBeaver** (the tool the course recommends):
-
-1. Connect to the assigned FINKI PostgreSQL project database.
-2. Double-click the `project` schema → **ER Diagram** tab.
-3. Right-click in the diagram → **Notation** → **Crow's foot**.
-4. Arrange the tables to mirror the layout of
-   [`ERModel_v01.png`](../P1-ConceptualModel/ERModel_v01.png).
-5. Right-click → **Export diagram** → save as `relational_schema.jpg`.
-
-On Linux, install it with:
-
-```sh
-flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
-flatpak install --user flathub io.dbeaver.DBeaverCommunity
-# or:  sudo snap install dbeaver-ce
-```
 
 **With pgAdmin 4**, if DBeaver is unavailable — it reads the live schema the same
@@ -131,7 +114,2 @@
    `convert relational_schema.png relational_schema.jpg`
 
-Whichever tool is used, state it here so the choice is explicit rather than
-inferred. Do **not** substitute a tool that only reads the `.sql` file — such as
-dbdiagram.io — because the diagram would then show what the script says rather
-than what the deployed database contains, which is the thing this artefact is
-meant to demonstrate.
Index: docs/P3-UseCaseModel/UseCaseModel.md
===================================================================
--- docs/P3-UseCaseModel/UseCaseModel.md	(revision fe28254e92473e37e178fb19214e517a028ddb24)
+++ docs/P3-UseCaseModel/UseCaseModel.md	(revision df058387ebe7d07864d874fd1376f15512418581)
@@ -1,34 +1,113 @@
-# Use-case model
+= Use-case model =
 
-## List of Actors / Roles
+The detailed pages for this phase are kept in the project's GitHub repository,
+[https://github.com/StefanTrsunov/bp StefanTrsunov/bp], under `docs/P3-UseCaseModel/`. Every
+use-case link below opens the corresponding file there.
 
-- **Visitor** — Anyone browsing the platform without an account. Can only view public market information.
-  - [UC0001](UseCase0001.md) — Register new account
-  - [UC0002](UseCase0002.md) — Log in
+== Actors / Roles ==
 
-- **Trader** — A logged-in user managing their virtual funds and positions.
-  - [UC0003](UseCase0003.md) — Deposit virtual funds
-  - [UC0004](UseCase0004.md) — Place market BUY order
-  - [UC0005](UseCase0005.md) — Place market SELL order
-  - [UC0006](UseCase0006.md) — View portfolio and transaction history
-  - [UC0007](UseCase0007.md) — Manage watchlist
+'''Visitor''' – Anyone using EduBerza without an account, who can look at public market
+information, create an account, and log in.
 
-- **Market Simulator** — An external automated system (the bot in `bots/`) that inserts simulated trades and candles into the database so prices move in the simulation.
+'''Trader''' – A registered, logged-in user who deposits virtual funds, places market buy and
+sell orders, follows the value of their portfolio, and keeps a watchlist of assets they want to
+monitor.
 
-## Use-case model diagram (optional)
+'''Market Simulator''' – An external automated system (the bot in `bots/`) that writes simulated
+trades and candles into the database so prices move without a connection to a real exchange.
 
-*(Optional per the rubric; include one later if time allows.)*
+== Use-Cases ==
 
-## Realization details on selection of the most important use cases
+=== Visitor ===
 
-Solo project → **at least 3 use cases required** (rubric: "at least 3 per team-member"). **7 use cases documented** for a safety margin. All are implemented in the P4 prototype; see `server/` for the Go source and [PrototypeImplementation](../P4-Prototype/PrototypeImplementation.md) for documented runs.
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0001.md UC0001] –
+   '''Register new account''' – Visitor creates an account with a unique username and e-mail; the
+   password is stored as a SHA-256 hash.
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0002.md UC0002] –
+   '''Log in''' – Visitor authenticates with username and password so the system treats every
+   following action as a Trader.
 
-| Use case                               | Importance | Why documented                                                                            |
-|----------------------------------------|------------|-------------------------------------------------------------------------------------------|
-| [UC0001 — Register](UseCase0001.md)    | High       | Without it nothing else works; demonstrates `INSERT` with uniqueness check.               |
-| [UC0002 — Login](UseCase0002.md)       | High       | Authenticates every `Trader` action; demonstrates `SELECT` with parameter binding.        |
-| [UC0003 — Deposit](UseCase0003.md)     | High       | Shows a multi-row transaction: `UPDATE users` + `INSERT INTO transactions`.               |
-| [UC0004 — Buy](UseCase0004.md)         | Very high  | Core of the exchange: `INSERT orders`, `UPDATE users`, `UPSERT holdings`, ledger, trade.  |
-| [UC0005 — Sell](UseCase0005.md)        | Very high  | Dual of Buy; demonstrates row-level `FOR UPDATE` locking and cost-basis bookkeeping.      |
-| [UC0006 — Portfolio](UseCase0006.md)   | High       | Demonstrates joins over `holdings`, `markets`, `crypto`, and a view (`v_portfolio`).      |
-| [UC0007 — Watchlist](UseCase0007.md)   | Medium     | Demonstrates N-M relation handling and `ON CONFLICT` upsert semantics.                    |
+=== Trader ===
+
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0003.md UC0003] –
+   '''Deposit virtual funds''' – Trader tops up their virtual cash balance; the user row and the
+   ledger are written in one transaction.
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0004.md UC0004] –
+   '''Place market BUY order''' – Trader buys a crypto asset at the current market price, which
+   debits cash and upserts the holding at a running weighted-average price.
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0005.md UC0005] –
+   '''Place market SELL order''' – Trader sells part or all of a holding at the current market
+   price, which credits cash and preserves the cost basis.
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0006.md UC0006] –
+   '''View portfolio and transaction history''' – Trader inspects current holdings, unrealised
+   P/L, cash balances and the most recent ledger entries.
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0007.md UC0007] –
+   '''Manage watchlist''' – Trader lists, adds and removes crypto assets on a personal watchlist,
+   where adding an asset already on the list is a no-op.
+
+=== Market Simulator ===
+
+The Market Simulator initiates no use case of its own. It participates in
+[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0004.md UC0004] and
+[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0005.md UC0005]
+indirectly, by keeping `project.market_trades` populated so that `project.v_latest_prices`
+returns a current price for every active market.
+
+== Use-case model diagram ==
+
+{{{#!comment
+The diagram is optional for P3. Commit the exported image to
+docs/P3-UseCaseModel/use_case_diagram.png and then replace this comment with:
+
+[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/use_case_diagram.png Use-case model diagram]
+}}}
+
+== Detailed Use-Cases ==
+
+The following use-cases are documented in detail, with SQL tested against the P2 database:
+
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0001.md UseCase0001] – Visitor registers a new account
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0002.md UseCase0002] – Visitor logs in
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0003.md UseCase0003] – Trader deposits virtual funds
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0004.md UseCase0004] – Trader places a market BUY order
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0005.md UseCase0005] – Trader places a market SELL order
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0006.md UseCase0006] – Trader views portfolio and transaction history
+ * [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0007.md UseCase0007] – Trader manages a watchlist
+
+== Realization details on selection of the most important use cases ==
+
+This is a solo project, so '''at least 3 use cases''' are required. '''7 use cases''' are
+documented, for a safety margin. All seven are implemented in the P4 prototype; see
+[https://github.com/StefanTrsunov/bp/tree/main/server server/] for the Go source and
+[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/PrototypeImplementation.md PrototypeImplementation]
+for the documented runs.
+
+||=Use case=||=Importance=||=Why it was selected=||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0001.md UC0001 – Register]||High||Nothing else works without it; demonstrates `INSERT` with a uniqueness check.||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0002.md UC0002 – Log in]||High||Authenticates every Trader action; demonstrates `SELECT` with parameter binding.||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0003.md UC0003 – Deposit]||High||Shows a multi-row transaction: `UPDATE users` plus `INSERT INTO transactions`.||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0004.md UC0004 – Buy]||Very high||Core of the exchange: `INSERT orders`, `UPDATE users`, upsert `holdings`, ledger entry, market trade.||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0005.md UC0005 – Sell]||Very high||Dual of Buy; demonstrates row-level `FOR UPDATE` locking and cost-basis bookkeeping.||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0006.md UC0006 – Portfolio]||High||Demonstrates joins over `holdings`, `markets` and `crypto`, and the `v_portfolio` view.||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCase0007.md UC0007 – Watchlist]||Medium||Demonstrates N–M relation handling and `ON CONFLICT` upsert semantics.||
+
+== AI usage ==
+
+AI was used in this phase and is logged in full, per the course rule for P1 onward.
+
+ * '''Phase log:'''
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCaseModelAIUsage.md UseCaseModelAIUsage.md]
+   – service used, what the AI produced, and what I decided myself.
+ * '''Full conversation transcript:'''
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md ERModelAIUsage.md]
+   – the same conversation produced the P1–P4 artefacts, so the complete prompt/response log is
+   kept in one place. Direct links:
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md#session-1--2026-04-21 Session 1 – 2026-04-21],
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md#session-2--2026-08-06--2026-08-07 Session 2 – 2026-08-06/07].
+
+'''Service:''' Claude Code (Anthropic), https://claude.com/claude-code – Claude subscription,
+model Claude Opus 4.7 (1M context).
+
+'''In short:''' the AI proposed the actor taxonomy and drafted the seven use cases with their SQL
+in session 1. In session 2 the use-case model itself was '''not''' changed – the only work was
+re-executing every scenario, including the failure paths, against a live PostgreSQL 16 database.
Index: docs/P4-Prototype/PrototypeImplementation.md
===================================================================
--- docs/P4-Prototype/PrototypeImplementation.md	(revision fe28254e92473e37e178fb19214e517a028ddb24)
+++ docs/P4-Prototype/PrototypeImplementation.md	(revision df058387ebe7d07864d874fd1376f15512418581)
@@ -1,58 +1,108 @@
-# Prototype Implementation
+= Prototype Implementation =
 
-The prototype is a Go command-line application in `server/` that works against
-the `project` schema in PostgreSQL. It implements all seven use cases from
-[UseCaseModel](../P3-UseCaseModel/UseCaseModel.md) — the rubric requires at least three — with
-every database access shown as real, executed SQL. An auxiliary program in
-`bots/` simulates a live market so prices move while the prototype is running.
+The prototype is a Go command-line application in
+[https://github.com/StefanTrsunov/bp/tree/main/server server/] that works against the `project`
+schema in PostgreSQL. It implements all seven use cases from
+[https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCaseModel.md UseCaseModel]
+– the rubric requires at least three – with every database access shown as real, executed SQL.
+An auxiliary program in [https://github.com/StefanTrsunov/bp/tree/main/bots bots/] simulates a
+live market so prices move while the prototype is running.
 
-Build, configure, run and test instructions: [BuildInstructions](BuildInstructions.md).
+Build, configure, run and test instructions:
+[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/BuildInstructions.md BuildInstructions].
 
-## Implemented use-cases
+All pages listed below, together with the screenshots of each run, are kept in the project's
+GitHub repository, [https://github.com/StefanTrsunov/bp StefanTrsunov/bp], under
+`docs/P4-Prototype/`.
 
-| Page | Use-case | Source |
-|------|----------|--------|
-| [UseCase0001Implementation](UseCase0001Implementation.md) | Register a new account | `server/auth.go` |
-| [UseCase0002Implementation](UseCase0002Implementation.md) | Log in | `server/auth.go` |
-| [UseCase0003Implementation](UseCase0003Implementation.md) | Deposit virtual funds | `server/account.go` |
-| [UseCase0004Implementation](UseCase0004Implementation.md) | Place market BUY order | `server/trade.go` |
-| [UseCase0005Implementation](UseCase0005Implementation.md) | Place market SELL order | `server/trade.go` |
-| [UseCase0006Implementation](UseCase0006Implementation.md) | View portfolio and history | `server/portfolio.go` |
-| [UseCase0007Implementation](UseCase0007Implementation.md) | Manage watchlist | `server/watchlist.go` |
+== Implemented use-cases ==
 
-Each page mirrors its P3 use-case page and adds the actual SQL emitted by the Go
-code plus a screenshot of the corresponding run against the live database.
+||=Page=||=Use-case=||=Source=||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/UseCase0001Implementation.md UseCase0001Implementation]||Register a new account||[https://github.com/StefanTrsunov/bp/blob/main/server/auth.go server/auth.go]||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/UseCase0002Implementation.md UseCase0002Implementation]||Log in||[https://github.com/StefanTrsunov/bp/blob/main/server/auth.go server/auth.go]||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/UseCase0003Implementation.md UseCase0003Implementation]||Deposit virtual funds||[https://github.com/StefanTrsunov/bp/blob/main/server/account.go server/account.go]||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/UseCase0004Implementation.md UseCase0004Implementation]||Place market BUY order||[https://github.com/StefanTrsunov/bp/blob/main/server/trade.go server/trade.go]||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/UseCase0005Implementation.md UseCase0005Implementation]||Place market SELL order||[https://github.com/StefanTrsunov/bp/blob/main/server/trade.go server/trade.go]||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/UseCase0006Implementation.md UseCase0006Implementation]||View portfolio and history||[https://github.com/StefanTrsunov/bp/blob/main/server/portfolio.go server/portfolio.go]||
+||[https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/UseCase0007Implementation.md UseCase0007Implementation]||Manage watchlist||[https://github.com/StefanTrsunov/bp/blob/main/server/watchlist.go server/watchlist.go]||
 
-## What the prototype demonstrates about the database design
+Each page mirrors its P3 use-case page and adds the actual SQL emitted by the Go code plus a
+screenshot of the corresponding run against the live database. The screenshots are committed
+alongside the pages, in
+[https://github.com/StefanTrsunov/bp/tree/main/docs/P4-Prototype/screenshots docs/P4-Prototype/screenshots/].
 
-- **The current price is never stored as a column.** It is always the price of
-  the most recent row in `market_trades`, read through the `v_latest_prices`
-  view. Both the user's own fills and the bot's simulated trades feed the same
-  table, so there is exactly one definition of "the price".
-- **Money movements are transactional.** Buying touches five tables — `orders`,
-  `users`, `holdings`, `transactions`, `market_trades` — inside one transaction.
-  A failed balance check rolls the whole thing back: after a rejected purchase
-  there is no order row, no ledger entry and no holding. This is verified in the
-  failure-path tests in [BuildInstructions](BuildInstructions.md).
-- **Constraints do real work.** `UNIQUE (user_id, crypto_id)` on `holdings` is
-  what makes the `INSERT … ON CONFLICT DO UPDATE` upsert possible, so the
-  weighted-average entry price is recomputed by the database in one statement
-  instead of by a read-modify-write in application code.
-- **No identifiers are ever typed.** Markets are listed with their prices before
-  any choice is made, and everything else is selected by symbol.
+== What the prototype demonstrates about the database design ==
 
-## Known limitations
+ * '''The current price is never stored as a column.''' It is always the price of the most recent
+   row in `market_trades`, read through the `v_latest_prices` view. Both the user's own fills and
+   the bot's simulated trades feed the same table, so there is exactly one definition of "the
+   price".
+ * '''Money movements are transactional.''' Buying touches five tables – `orders`, `users`,
+   `holdings`, `transactions`, `market_trades` – inside one transaction. A failed balance check
+   rolls the whole thing back: after a rejected purchase there is no order row, no ledger entry
+   and no holding. This is verified in the failure-path tests in
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/BuildInstructions.md BuildInstructions].
+ * '''Constraints do real work.''' `UNIQUE (user_id, crypto_id)` on `holdings` is what makes the
+   `INSERT … ON CONFLICT DO UPDATE` upsert possible, so the weighted-average entry price is
+   recomputed by the database in one statement instead of by a read-modify-write in application
+   code.
+ * '''No identifiers are ever typed.''' Markets are listed with their prices before any choice is
+   made, and everything else is selected by symbol.
 
-Deliberately out of scope for a first prototype, and the natural content of the
-later phases:
+== Known limitations ==
 
-- Only `market` orders execute. `limit` is accepted by the schema
-  (`orders.type`) but the matching logic is not implemented.
-- Passwords are SHA-256 without a salt. Adequate to demonstrate that the
-  password itself is never stored; not adequate for real use. A proper
-  password hash belongs in P9 (security).
-- Money is handled as `float64` in Go while the database columns are `numeric`.
-  All arithmetic that must be exact — the weighted average — is done in SQL for
-  that reason, but the Go side would need a decimal type for real use.
-- There is no connection pooling configuration and no explicit isolation level;
-  both are P8 topics.
+Deliberately out of scope for a first prototype, and the natural content of the later phases:
+
+ * Only `market` orders execute. `limit` is accepted by the schema (`orders.type`) but the
+   matching logic is not implemented.
+ * Passwords are SHA-256 without a salt. Adequate to demonstrate that the password itself is
+   never stored; not adequate for real use. A proper password hash belongs in P9 (security).
+ * Money is handled as `float64` in Go while the database columns are `numeric`. All arithmetic
+   that must be exact – the weighted average – is done in SQL for that reason, but the Go side
+   would need a decimal type for real use.
+ * There is no connection pooling configuration and no explicit isolation level; both are P8
+   topics.
+== AI usage ==
+
+AI was used in this phase and is logged in full, per the course rule for P1 onward.
+
+ * '''Phase log:'''
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P3-UseCaseModel/UseCaseModelAIUsage.md UseCaseModelAIUsage.md]
+   – service used, what the AI produced, and what I decided myself.
+ * '''Full conversation transcript:'''
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md ERModelAIUsage.md]
+   – the same conversation produced the P1–P4 artefacts, so the complete prompt/response log is
+   kept in one place. Direct links:
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md#session-1--2026-04-21 Session 1 – 2026-04-21],
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md#session-2--2026-08-06--2026-08-07 Session 2 – 2026-08-06/07].
+
+'''Service:''' Claude Code (Anthropic), https://claude.com/claude-code – Claude subscription,
+model Claude Opus 4.7 (1M context).
+
+'''In short:''' the AI proposed the actor taxonomy and drafted the seven use cases with their SQL
+in session 1. In session 2 the use-case model itself was '''not''' changed – the only work was
+re-executing every scenario, including the failure paths, against a live PostgreSQL 16 database.
+
+== AI usage ==
+
+AI was used in this phase and is logged in full, per the course rule for P1 onward.
+
+ * '''Phase log:'''
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P4-Prototype/PrototypeImplementationAIUsage.md PrototypeImplementationAIUsage.md]
+   – service used, the bugs found and fixed, the test evidence, and what I decided myself.
+ * '''Full conversation transcript:'''
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md ERModelAIUsage.md]
+   – the same conversation produced the P1–P4 artefacts, so the complete prompt/response log is
+   kept in one place. Direct links:
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md#session-1--2026-04-21 Session 1 – 2026-04-21],
+   [https://github.com/StefanTrsunov/bp/blob/main/docs/P1-ConceptualModel/ERModelAIUsage.md#session-2--2026-08-06--2026-08-07 Session 2 – 2026-08-06/07].
+
+'''Service:''' Claude Code (Anthropic), https://claude.com/claude-code – Claude subscription,
+model Claude Opus 4.7 (1M context).
+
+'''In short:''' session 1 rewrote the existing Chi/HTTP backend as the CLI prototype covering
+UC0001–UC0007 and added the market bot. Session 2 was a review pass I asked for, which found and
+fixed three bugs – a path-resolution bug that made the documented build instructions fail, an
+infinite loop at end of input, and an error check in the wrong order that misreported database
+failures as "Insufficient holding" – and replaced the read-modify-write holding update with a
+single `INSERT … ON CONFLICT DO UPDATE`.
Index: docs/README.md
===================================================================
--- docs/README.md	(revision fe28254e92473e37e178fb19214e517a028ddb24)
+++ docs/README.md	(revision df058387ebe7d07864d874fd1376f15512418581)
@@ -77,6 +77,8 @@
 | File | Phase | What |
 |------|-------|------|
-| [`ERModel_v01.xml`](P1-ConceptualModel/ERModel_v01.xml) | P1 | TerraER source of the ER diagram |
-| [`ERModel_v01.png`](P1-ConceptualModel/ERModel_v01.png) | P1 | Exported diagram image |
+| [`ERModel_v02.xml`](P1-ConceptualModel/ERModel_v02.xml) | P1 | TerraER source, current version |
+| [`ERModel_v02.png`](P1-ConceptualModel/ERModel_v02.png) | P1 | Exported diagram image, current version |
+| [`ERModel_v01.xml`](P1-ConceptualModel/ERModel_v01.xml) | P1 | TerraER source, first version (kept per P1 rules) |
+| [`ERModel_v01.png`](P1-ConceptualModel/ERModel_v01.png) | P1 | Exported diagram image, first version |
 | [`../server/db/schema_creation.sql`](../server/db/schema_creation.sql) | P2 | DDL — drops and recreates the `project` schema |
 | [`../server/db/data_load.sql`](../server/db/data_load.sql) | P2 | DML — truncates and reloads sample data |
