Index: P1-ConceptualModel/ERModel.md
===================================================================
--- P1-ConceptualModel/ERModel.md	(revision d8ce4e224bde01e8f87558691226298db515617e)
+++ P1-ConceptualModel/ERModel.md	(revision d8ce4e224bde01e8f87558691226298db515617e)
@@ -0,0 +1,253 @@
+# Entity-Relationship Model v.01
+
+## 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
+```
+
+Notation: Chen. Rectangles are entity sets, diamonds are relationships, ellipses
+are attributes, underlined ellipses are primary keys, the dashed ellipse is a
+derived attribute. A double line between an entity set and a relationship marks
+**total participation** (every instance of that entity set must participate); a
+single line marks partial participation.
+
+Two deliberate modeling decisions worth stating up front:
+
+- **No foreign keys appear in the diagram.** Connections between entity sets are
+  expressed as relationships, per the notation. Foreign-key columns appear only
+  in the relational model in [RelationalDesign](../P2-RelationalDesign/RelationalDesign.md).
+- **`Holds` and `Contains` are relationships, not entity sets.** Both are M:N and
+  both carry their own attributes, which is exactly what a Chen relationship is
+  for. They become tables (`holdings`, `watchlist_items`) only in P2.
+
+## Data requirements
+
+### Entity sets
+
+#### Users
+Registered participants of the platform. Every action in the simulation is
+attributed to a user, and the two balance attributes are what makes the
+simulation work: cash that is free to trade is tracked separately from cash that
+is currently committed to open positions, so the platform can refuse a purchase
+without having to recompute the whole portfolio first.
+
+- **Candidate keys:** `{id}`, `{username}`, `{email}`. Primary key: **`id`**.
+  A surrogate UUID was chosen because it is opaque and stable — `username` and
+  `email` are both things a user may legitimately want to change later, and
+  every relationship in the diagram points at `Users`, so a mutable key would
+  propagate changes across the whole database.
+- **Attributes:**
+  - `id` — UUID, required, primary key.
+  - `username` — text, max 50, required, unique.
+  - `email` — text, max 255, required, unique, must contain `@`.
+  - `full_name` — text, max 200, optional.
+  - `password_hash` — text, max 255, required. Never the password itself; the
+    prototype stores a SHA-256 hex digest.
+  - `available_balance` — numeric(18,4), required, default 0, must be ≥ 0.
+  - `invested_balance` — numeric(18,4), required, default 0, must be ≥ 0.
+  - `created_at` — timestamp with time zone, required, defaults to now.
+  - `updated_at` — timestamp with time zone, optional (null until first change).
+
+#### Cryptos
+The catalog of crypto assets the platform knows about. Kept separate from
+`Markets` because an asset exists independently of the pairs it is traded in —
+the same asset can be quoted against several currencies, and a user's holding is
+in the *asset*, not in a particular pair.
+
+- **Candidate keys:** `{id}`, `{symbol}`. Primary key: **`id`**, for the same
+  reason as in `Users`; `symbol` is kept as a unique natural key because that is
+  what users type and see.
+- **Attributes:**
+  - `id` — UUID, required, primary key.
+  - `symbol` — text, max 20, required, unique (e.g. `BTC`).
+  - `name` — text, max 255, required (e.g. `Bitcoin`).
+  - `created_at` — timestamptz, required, defaults to now.
+
+#### Markets
+A tradeable pair: one crypto asset quoted in one currency, e.g. BTC/USD. This is
+where prices live, and it is the thing an order is placed *on*. Modeled as its
+own entity set rather than an attribute of `Cryptos` because a market has its own
+lifecycle — it can be deactivated without deleting the asset — and because
+trades, candles and orders all reference the pair, not the asset.
+
+- **Candidate keys:** `{id}`, `{crypto_id, quote_currency}` — that pair is
+  unique by definition, since a given asset can only be quoted once per
+  currency. Primary key: **`id`**, so that the many entity sets referencing a
+  market carry one narrow column instead of a composite key.
+- **Attributes:**
+  - `id` — UUID, required, primary key.
+  - `quote_currency` — text, exactly 3 characters, required, default `USD`.
+  - `is_active` — boolean, required, default true. Inactive markets are hidden
+    from the trading menus but keep their history.
+  - `created_at` — timestamptz, required, defaults to now.
+
+#### Orders
+A user's instruction to buy or sell on a market. Needed as a separate entity set
+because an order is a record of *intent* that outlives its execution: it keeps
+the requested quantity and price even after it has been filled, which is what
+makes the ledger auditable.
+
+- **Candidate keys:** `{id}` only. There is no natural key — the same user can
+  place two identical orders on the same market in the same second, and both are
+  legitimately distinct. Primary key: **`id`**.
+- **Attributes:**
+  - `id` — UUID, required, primary key.
+  - `side` — text, required, restricted to `buy` or `sell`.
+  - `type` — text, required, restricted to `market` or `limit`. The prototype
+    executes only `market` orders; `limit` exists so the model does not have to
+    change when limit orders are implemented.
+  - `status` — text, required, restricted to `open`, `executed`, `cancelled`.
+  - `quantity` — numeric(20,4), required, must be > 0.
+  - `price` — numeric(18,6), optional — null for a market order until it fills,
+    then the fill price.
+  - `placed_at` — timestamptz, required, defaults to now.
+  - `executed_at` — timestamptz, optional, set when the order fills.
+
+#### Transactions
+The financial ledger: every movement of virtual cash, in one place. This exists
+so that a balance is never just a number someone edited — it is the sum of an
+auditable list of entries, which is also what the "explain every step" goal of
+the project needs.
+
+- **Candidate keys:** `{id}` only. Primary key: **`id`**.
+- **Attributes:**
+  - `id` — UUID, required, primary key.
+  - `type` — text, required, restricted to `deposit`, `buy`, `sell`, `fee`.
+  - `amount` — numeric(18,4), required. Signed: negative for money leaving the
+    cash balance, positive for money arriving.
+  - `currency` — text, exactly 3 characters, required, default `USD`.
+  - `created_at` — timestamptz, required, defaults to now.
+  - `description` — text, optional, free-form human-readable explanation.
+
+#### MarketTrades
+Individual executed trades on a market, from the user's own fills and from the
+market simulator. This is the single source of truth for the current price: the
+price of a market is the price of its most recent trade, never a column someone
+writes directly.
+
+- **Candidate keys:** `{id}`. In principle `{market_id, executed_at}` looks
+  unique, but two trades can share a timestamp, so it is not a safe key.
+  Primary key: **`id`** (a plain auto-incrementing integer here rather than a
+  UUID, because this is the highest-volume entity set and it is only ever read
+  in timestamp order, never referenced by anything else).
+- **Attributes:**
+  - `id` — integer, required, primary key, auto-generated.
+  - `executed_at` — timestamptz, required.
+  - `price` — numeric(18,6), required, must be > 0.
+  - `quantity` — numeric(20,6), required, must be > 0.
+  - `side` — text, optional, `buy` or `sell`.
+  - `source` — text, max 50, required, default `simulation`. Distinguishes a
+    simulated trade from a user's own fill (`user`).
+
+#### MarketCandles
+OHLCV aggregates per market and timeframe — the data a price chart is drawn
+from. Stored rather than computed on the fly because the point of the project is
+a chart-driven interface, and re-aggregating the whole trade history for every
+screen refresh does not scale.
+
+- **Candidate keys:** `{id}`, and `{market_id, timeframe, candle_time}` — a
+  market has exactly one candle per timeframe per time bucket. Primary key:
+  **`id`**; the composite is enforced as a uniqueness rule because it is the
+  real-world constraint and it is what prevents duplicate candles.
+- **Attributes:**
+  - `id` — integer, required, primary key, auto-generated.
+  - `timeframe` — text, required, restricted to `1m`, `5m`, `1h`, `1d`.
+  - `open`, `high`, `low`, `close` — numeric(18,6), all required.
+  - `volume` — numeric(20,6), required.
+  - `candle_time` — timestamptz, required — the start of the bucket.
+
+#### Watchlists
+A named list of assets a user wants to monitor. A separate entity set rather than
+a flag on the relationship between users and assets, because a user may want
+several lists ("long term", "watching today") and each needs its own name.
+
+- **Candidate keys:** `{id}`. `{user_id, name}` would also work if list names
+  are required to be unique per user; the model does not impose that, so it is
+  not listed as a candidate key. Primary key: **`id`**.
+- **Attributes:**
+  - `id` — UUID, required, primary key.
+  - `name` — text, max 100, required.
+  - `created_at` — timestamptz, required, defaults to now.
+
+### Relationships
+
+#### QuotedOn — Cryptos (1) : Markets (N), total on Markets
+Ties a market to the asset it trades. One asset can be quoted in many markets;
+every market must have exactly one asset, hence total participation on the
+`Markets` side. No attributes of its own.
+
+#### PlacedOn — Markets (1) : Orders (N), total on Orders
+Records which market an order was placed on. Every order must name a market;
+a market may have no orders yet. No attributes.
+
+#### Places — Users (1) : Orders (N), total on Orders
+Records who placed an order. Every order belongs to exactly one user; a new user
+has no orders. No attributes.
+
+#### Records — Users (1) : Transactions (N), total on Transactions
+Attributes each ledger entry to a user. Every entry belongs to exactly one user.
+No attributes.
+
+#### Settles — Orders (1) : Transactions (N), partial on both sides
+Links a ledger entry to the order that caused it. Partial on the `Transactions`
+side because deposits have no originating order, and partial on the `Orders` side
+because an order that never executes never produces a ledger entry. This is why
+the corresponding column is nullable in P2. No attributes.
+
+#### Fills — Markets (1) : MarketTrades (N), total on MarketTrades
+Every executed trade happened on exactly one market. No attributes.
+
+#### Aggregates — Markets (1) : MarketCandles (N), total on MarketCandles
+Every candle summarises trades of exactly one market. No attributes.
+
+#### Owns — Users (1) : Watchlists (N), total on Watchlists
+Every watchlist belongs to exactly one user. No attributes.
+
+#### Holds — Users (M) : Cryptos (N), partial on both sides, **with attributes**
+A user's position in an asset. M:N because one user holds many assets and one
+asset is held by many users, and partial on both sides because a user may hold
+nothing and an asset may be held by nobody. Modeled as a relationship rather
+than an entity set because a position has no identity of its own — it is
+entirely described by *which user*, *which asset*, and how much.
+
+- **Attributes:**
+  - `quantity` — numeric(20,4), required, must be ≥ 0.
+  - `avg_price` — numeric(18,6), required, ≥ 0, **derived** (dashed ellipse):
+    the weighted average of the prices at which the position was accumulated.
+    It is derivable from the buy history, and is stored anyway so that
+    unrealised P/L can be shown without replaying the whole ledger.
+  - `created_at` — timestamptz, required, defaults to now.
+  - `updated_at` — timestamptz, optional.
+
+#### Contains — Watchlists (M) : Cryptos (N), partial on both sides, **with attribute**
+Which assets are on which watchlist. M:N: a list holds many assets, an asset
+appears on many lists. Partial on both sides — an empty list is valid and an
+asset need not be on any list.
+
+- **Attributes:**
+  - `added_at` — timestamptz, required, defaults to now. Recorded so a list can
+    be shown in the order the user built it.
+
+## Entity-Relationship Model History
+
+- **v01** — First complete version. Built from the entity notes in
+  [`ep-diagram.md`](ep-diagram.md) (the initial hand-written model), with three
+  changes made to that initial model while drawing it:
+  1. `Markets` was promoted from an implied attribute of the asset to its own
+     entity set, so that prices, orders, trades and candles can all reference a
+     pair rather than an asset.
+  2. `holdings` and `watchlist_items` were re-expressed as the M:N relationships
+     `Holds` and `Contains` with their own attributes, instead of entity sets
+     with foreign keys — the initial notes listed them as tables, which is a
+     relational concept that does not belong in a Chen ERD.
+  3. `avg_price` was marked as a derived attribute rather than a plain one, to
+     make the denormalisation explicit rather than hidden.
+
+Reasoning for the AI-assisted part of this phase, and the full interaction log,
+are on [ERModelAIUsage](ERModelAIUsage.md).
Index: P1-ConceptualModel/ERModelAIUsage.md
===================================================================
--- P1-ConceptualModel/ERModelAIUsage.md	(revision d8ce4e224bde01e8f87558691226298db515617e)
+++ P1-ConceptualModel/ERModelAIUsage.md	(revision d8ce4e224bde01e8f87558691226298db515617e)
@@ -0,0 +1,177 @@
+# Entity-Relationship Model AI Usage
+
+## Name of AI service/solution that was used
+
+**Claude Code** (Anthropic)
+
+- **URL:** https://claude.com/claude-code
+- **Type of service/subscription:** Claude subscription. Session 1 used model
+  Claude Opus 4.7 (1M context); session 2 used Claude Opus 5 (1M context).
+
+## Final result
+
+### Diagram
+
+`ERModel_v01.xml` / `ERModel_v01.png`.
+
+**Declaration of how the diagram was produced.** The initial model is the
+student's own: the entity and attribute list in [`ep-diagram.md`](ep-diagram.md),
+written in Macedonian before any AI was involved. In session 2 the AI turned that
+list into the TerraER diagram file, and while doing so proposed three changes to
+the initial model, all three listed in the model history on
+[ERModel](ERModel.md#entity-relationship-model-history):
+promoting `Markets` to its own entity set, re-expressing `holdings` and
+`watchlist_items` as M:N relationships with attributes rather than entity sets
+with foreign keys, and marking `avg_price` as derived.
+
+The diagram was not drawn by hand in the TerraER GUI. It was generated
+programmatically by constructing TerraER's own figure objects
+(`EntidadeFigure`, `RelacionamentoFigure`, `AtributoFigure`,
+`AtributoChaveFigure`, `AtributoDerivadoFigure` and the labelled line-connection
+figures) and serialising them with TerraER's own
+`DOMStorableInputOutputFormat` — the same writer the application uses when you
+choose *Save*. The file is therefore a normal TerraER document: it was verified
+by reading it back through TerraER's own reader and comparing the figure count
+(144), and it opens and can be edited in TerraER 3.11 like any hand-drawn
+diagram. Subsequent versions (`ERModel_v02.xml` onward) are edited by the student
+in the GUI.
+
+### Model description
+
+See [ERModel](ERModel.md).
+
+## Summary of AI involvement
+
+Work on this project happened in two working sessions, several months apart.
+
+| | Session 1 | Session 2 |
+|---|---|---|
+| **When** | 2026-04-21 | 2026-08-06 / 2026-08-07 |
+| **Model** | Claude Opus 4.7 (1M context) | Claude Opus 5 (1M context) |
+| **Phases advanced** | P1, P2, P3 and the first working prototype | The ER diagram file, P4 documentation, bug fixes |
+| **My starting material** | `ep-diagram.md`, `opis.md`, my existing Go backend and draft SQL | Everything from session 1, plus the phase rubric |
+
+In **session 1** I brought my own data model (`ep-diagram.md`, written in
+Macedonian before any AI was involved) and my own draft schema and Go backend. I
+used the AI to review them, and it found real errors in my SQL that I had missed
+— most seriously that I had declared `crypto_id` as a foreign key to two
+different tables at once, in three separate tables. I decided the corrections to
+adopt, chose to go solo, chose a CLI prototype over an HTTP one, and chose
+English for the documentation. The output of that session was the corrected
+schema, the sample-data script, the use-case model and the working prototype.
+
+In **session 2** I came back to produce the deliverable I was still missing — the
+TerraER diagram file itself — and to finish the P4 documentation. I also asked
+for a review pass over the database and Go code, which turned up three further
+bugs (see [PrototypeImplementationAIUsage](../P4-Prototype/PrototypeImplementationAIUsage.md)).
+
+Below is the log, one entry per exchange. My prompts are quoted as **excerpts**:
+the wording is my own, unaltered, but I have left out scheduling remarks and
+other working chatter that says nothing about the model or the code. Typos are
+kept as they were. The *Intent* line above each prompt is my own note on what I
+was trying to achieve. AI responses are summarised rather than quoted in full,
+because several ran to many pages of code and file edits. The complete
+unabridged transcript is in my Claude Code session history and can be produced
+on request.
+
+## Entire AI usage log
+
+---
+
+### Session 1 — 2026-04-21
+
+**Intent:** hand the AI the whole project and the course rubric, and have it
+audit my existing model and code against the phase requirements before I commit
+to anything.
+
+**Prompt (student, excerpt):**
+> This is my project for my exam Database, go to the docs folder and README.md there you will find all of the documentation, afterwards take a look at the whole project. Delete everything you want add everything you want just make it work and make it fill in or to follow all of the needed instructions. Ask me anything, also tell me what do I need to do
+
+**Response (AI, summarised):**
+- Read `docs/opis.md`, `docs/ep-diagram.md`, `docs/dbdiagram.md`, `server/db/db.sql`, `server/db/schema.sql`, all Go sources.
+- Flagged bugs in the initial schema:
+  - `holdings.crypto_id` declared as a foreign key to both `users(id)` and `crypto(id)`; should be a separate `user_id` column.
+  - Same mistake in `orders` and `transactions`.
+  - `market_candles` referenced a non-existent `markets` table.
+  - `main.go` dropped and recreated all tables on every startup, wiping data.
+- Proposed a single authoritative schema, to be placed in `server/db/schema_creation.sql`, based on `docs/ep-diagram.md` and `docs/dbdiagram.md` with the above issues fixed.
+- Asked the student for decisions: team composition, prototype shape (CLI vs HTTP), whether to keep `available_balance`, `invested_balance`, `secret_question`, `secret_answer`, which use cases to implement, language of documentation.
+
+**Intent:** I had just pasted the course rubric into `README.md` and removed the
+half-finished frontend, so that the AI would plan against the actual phase
+requirements and against a backend-only prototype.
+
+**Prompt (student, excerpt):**
+> Read it now, just filled it in, also deleted the frontend we don' need that
+
+**Response (AI, summarised):**
+- Re-read `docs/README.md`, which now contained the course phase rubric (P0–P9).
+- Explained the constraints each phase places on AI usage (P0 forbids AI; P1–P4 allow AI only to improve the student's own initial model and require an AIUsage log).
+- Listed the deliverables per phase and asked the remaining questions.
+
+---
+
+### Session 2 — 2026-08-06 / 2026-08-07
+
+**Intent:** re-read the rubric from scratch after the gap, reduce it to a
+checklist of what each phase actually has to produce, confirm TerraER runs on
+this machine.
+
+**Prompt (student, excerpt):**
+> We will start from the begining in some ways, please read first docs/insturctions.md
+> The goal is to finish with milestone 0 so I can publish it […]
+> Read the Instuctions.md like I said and delete everything that you think we don't need
+> and for each phrase tell me what do I need to submit and how to do it. and can you also
+> do the thing with TerraER3.11.jar?
+
+**Response (AI, summarised):**
+- Read the phase rubric and condensed `Instructions.md` to a per-phase checklist
+  of deliverables, keeping every requirement and every load-bearing filename.
+- Confirmed TerraER 3.11 runs on the installed OpenJDK 21 and launched it.
+- Listed, per phase, what has to be submitted and how; flagged that P0's
+  deliverables are wiki pages, that the EPRMS proposal is a prerequisite.
+- Flagged `image.png` (a TradingView screenshot) as material the project has no
+  licence to publish.
+
+**Intent:** produce the artefacts still missing for P1–P4 — above all the TerraER
+diagram — while keeping P0 for myself, since AI use is forbidden there.
+
+**Prompt (student, excerpt):**
+> […] do all of the other Phases till m0.
+> opis.md It's p0 so I will take care of that. Delete anything that we don't need,
+> make all of the phases and terra diagram if you can, and delete anything
+> that we don't need and make a documentation about how to start it.
+
+**Intent:** ask for a review pass over the schema and the Go code rather than
+only documentation, on the grounds that a prototype I have to defend in person
+should not have known defects in it.
+
+**Prompt (student, excerpt, follow-up):**
+> Also fix some database things or golang things if you think we can do it better,
+
+**Response (AI, summarised) — the part relevant to P1:**
+- Read `ep-diagram.md` (the student's own initial model) and the existing
+  `schema_creation.sql`.
+- Reverse-engineered TerraER's file format from the distributed jar to learn the
+  element names it stores figures under (`ent`, `rel`, `atr`, `atrchave`,
+  `atrderivado`, `llabelUm`, `llabelMuitos`, `llabelDoubleUm`,
+  `llabelDoubleMuitos`, …).
+- Generated `ERModel_v01.xml` and `ERModel_v01.png` as described above, in Chen
+  notation: 8 entity sets, 10 relationships, 57 attributes, cardinality labels
+  on every relationship line and double lines for total participation.
+- Proposed the three changes to the initial model recorded in the model history.
+- Rewrote [ERModel](ERModel.md) with the per-entity documentation, candidate-key
+  justifications and attribute types the phase template requires.
+
+---
+
+> **Student action required.** Two things, in this order:
+>
+> 1. Open `ERModel_v01.xml` in TerraER, read the whole diagram, and change what
+>    you disagree with. Save the result as `ERModel_v02.xml` with a matching PNG
+>    and add a history line. The phase rules require that the model be yours;
+>    the generated v01 is a starting point to review and take over, not an
+>    answer to submit unread.
+> 2. Verify that this log matches your recollection and append the full text of
+>    any further prompts. The complete transcript is in your Claude Code session
+>    history.
Index: P1-ConceptualModel/ERModel_v01.xml
===================================================================
--- P1-ConceptualModel/ERModel_v01.xml	(revision d8ce4e224bde01e8f87558691226298db515617e)
+++ P1-ConceptualModel/ERModel_v01.xml	(revision d8ce4e224bde01e8f87558691226298db515617e)
@@ -0,0 +1,1 @@
+<drawing><figures><ent id="0"><children><r id="1" x="1195" y="864" w="210" h="72"/><t id="2" x="1278.3098373413086" y="891.8279428482056"><a><text><string>Cryptos</string></text></a></t></children></ent><ent id="3"><children><r id="4" x="2995" y="864" w="210" h="72"/><t id="5" x="3077.0858306884766" y="891.8279428482056"><a><text><string>Markets</string></text></a></t></children></ent><ent id="6"><children><r id="7" x="4195" y="1264" w="210" h="72"/><t id="8" x="4260.831718444824" y="1291.8279428482056"><a><text><string>MarketTrades</string></text></a></t></children></ent><ent id="9"><children><r id="a" x="4195" y="2264" w="210" h="72"/><t id="b" x="4257.597694396973" y="2291.8279428482056"><a><text><string>MarketCandles</string></text></a></t></children></ent><ent id="c"><children><r id="d" x="2995" y="2864" w="210" h="72"/><t id="e" x="3080.4098510742188" y="2891.8279428482056"><a><text><string>Orders</string></text></a></t></children></ent><ent id="f"><children><r id="10" x="1895" y="3264" w="210" h="72"/><t id="11" x="1964.0657501220703" y="3291.8279428482056"><a><text><string>Transactions</string></text></a></t></children></ent><ent id="12"><children><r id="13" x="795" y="2464" w="210" h="72"/><t id="14" x="884.0038757324219" y="2491.8279428482056"><a><text><string>Users</string></text></a></t></children></ent><ent id="15"><children><r id="16" x="295" y="1464" w="210" h="72"/><t id="17" x="371.289794921875" y="1491.8279428482056"><a><text><string>Watchlists</string></text></a></t></children></ent><rel id="18"><children><diamond id="19" x="2100" y="852" w="200" h="96"/><t id="1a" x="2170.3417892456055" y="891.8279428482056"><a><text><string>QuotedOn</string></text></a></t></children></rel><rel id="1b"><children><diamond id="1c" x="3650" y="1002" w="200" h="96"/><t id="1d" x="3739.367919921875" y="1041.8279428482056"><a><text><string>Fills</string></text></a></t></children></rel><rel id="1e"><children><diamond id="1f" x="3700" y="1702" w="200" h="96"/><t id="20" x="3767.44376373291" y="1741.8279428482056"><a><text><string>Aggregates</string></text></a></t></children></rel><rel id="21"><children><diamond id="22" x="3000" y="1852" w="200" h="96"/><t id="23" x="3073.107810974121" y="1891.8279428482056"><a><text><string>PlacedOn</string></text></a></t></children></rel><rel id="24"><children><diamond id="25" x="2450" y="3052" w="200" h="96"/><t id="26" x="2531.1838607788086" y="3091.8279428482056"><a><text><string>Settles</string></text></a></t></children></rel><rel id="27"><children><diamond id="28" x="1350" y="2852" w="200" h="96"/><t id="29" x="1427.3318328857422" y="2891.8279428482056"><a><text><string>Records</string></text></a></t></children></rel><rel id="2a"><children><diamond id="2b" x="1900" y="2652" w="200" h="96"/><t id="2c" x="1982.31787109375" y="2691.8279428482056"><a><text><string>Places</string></text></a></t></children></rel><rel id="2d"><children><diamond id="2e" x="1000" y="1652" w="200" h="96"/><t id="2f" x="1083.811882019043" y="1691.8279428482056"><a><text><string>Holds</string></text></a></t></children></rel><rel id="30"><children><diamond id="31" x="550" y="1952" w="200" h="96"/><t id="32" x="634.0158843994141" y="1991.8279428482056"><a><text><string>Owns</string></text></a></t></children></rel><rel id="33"><children><diamond id="34" x="700" y="1102" w="200" h="96"/><t id="35" x="775.2078247070312" y="1141.8279428482056"><a><text><string>Contains</string></text></a></t></children></rel><llabelUm id="36"><points><p colinear="true" x="1405.5" y="900" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2099.567268932415" y="900" 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="2300.4327310675844" y="900" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2994.5" y="900" 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="3205.5" y="924.3461538461538" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3681.861419777714" y="1034.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="3801.942569236337" y="1073.6102587437897" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4219.7" y="1263.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="3130.0588235294117" y="936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3771.254586641136" y="1715.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="3830.8155961466423" y="1783.8971557613065" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4266.818181818182" y="2263.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="909.125" y="2463.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1089.1012874391326" y="1743.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="1110.8987125608674" y="1656.4051497565304" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1290.875" y="936.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="881.75" y="2463.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="669.6635816788919" y="2039.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="630.3364183211081" y="1960.6728366422162" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="418.25" y="1536.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="441.7142857142857" y="1463.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="764.0933786333908" y="1181.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="849.5502233131613" y="1125.2248883434195" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1227" y="936.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="1005.5" y="2519.181818181818" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1926.8736476037463" y="2686.7042995643174" 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="2073.1263523962534" y="2713.295700435682" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2994.5" y="2880.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="3100" y="936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3100" y="1851.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="3100" y="1948.9015230574682" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3100" y="2863.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="950.1875" y="2536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1409.7246828249872" y="2870.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="1490.2753171750128" y="2929.291139763646" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1949.8125" y="3263.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="2999.625" y="2936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2607.4943672237673" y="3079.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="2492.5056327762327" y="3120.9070426268245" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2100.375" y="3263.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="743.2922785541401" y="958.3511252801267" w="168" h="50"/><t id="74" x="797.7480738422261" y="975.1790681283322"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="75"><points><p colinear="true" x="1194.5" y="918.6024964647431" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="900.7509062629122" y="970.986550739606" 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="769.9131883711252" y="697.7810492899115" w="168" h="50"/><t id="7a" x="837.8450807661447" y="714.6089921381171"><a><text><string>name</string></text></a></t></children></atr><llabel id="7b"><points><p colinear="true" x="1208.123998256316" y="863.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="905.5262393191721" y="743.5869651351443" 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="929.3638759826626" y="489.98086747757907" w="168" h="50"/><t id="80" x="992.95172846069" y="506.80881032578463"><a><text><string>symbol</string></text></a></t></children></atr><llabel id="81"><points><p colinear="true" x="1272.8267567949404" y="863.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1032.3862318241418" y="540.3607091332893" 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="1174.165243481124" y="396.82654491596213" w="168" h="50"/><t id="86" x="1252.5372069821005" y="413.6544877641677"><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="1296.8066637813038" y="863.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1260.8954272498743" y="447.81766203754734" 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="2622.807018741284" y="599.6833105514979" w="168" h="50"/><t id="8c" x="2677.26281402937" y="616.5112533997035"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="8d"><points><p colinear="true" x="3047.872597753913" y="863.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2740.751005394063" y="648.6010421135588" 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="2851.830331203679" y="423.94754202276397" w="168" h="50"/><t id="92" x="2912.3521665308276" y="440.77548487096954"><a><text><string>is_active</string></text></a></t></children></atr><llabel id="93"><points><p colinear="true" x="3086.7150864492837" y="863.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2945.556088309162" y="474.7951013474514" 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="3140.2331416492098" y="411.3556033812472" w="168" h="50"/><t id="98" x="3180.4148356799715" y="428.18354622945276"><a><text><string>quote_currency</string></text></a></t></children></atr><llabel id="99"><points><p colinear="true" x="3109.780145523736" y="863.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3217.9226657928243" y="462.2726453009987" 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="3383.7013326971096" y="566.4619473504612" w="168" h="50"/><t id="9e" x="3462.073296198086" y="583.2898901986667"><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="3143.4990061296885" y="863.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3439.604766151636" y="615.9573157917046" 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="4452.666226574792" y="767.4676392594761" w="168" h="50"/><t id="a4" x="4531.038190075768" y="784.2955821076816"><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="4317.020229522657" y="1263.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4525.39139321206" y="818.2188508937013" 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="4605.008687457039" y="872.1697118103555" w="168" h="50"/><t id="aa" x="4655.042455157234" y="888.997654658561"><a><text><string>executed_at</string></text></a></t></children></atr><llabel id="ab"><points><p colinear="true" x="4335.247640280459" y="1263.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4665.867064869197" y="922.1513286672619" 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="4714.963653545486" y="1020.7653201458538" w="168" h="50"/><t id="b0" x="4784.983551006423" y="1037.5932629940594"><a><text><string>price</string></text></a></t></children></atr><llabel id="b1"><points><p colinear="true" x="4371.635283450938" y="1263.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4756.402868587327" y="1068.2058859572421" 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="4770.550118495279" y="1197.0630634623633" w="168" h="50"/><t id="b6" x="4831.137963343912" y="1213.8910063105689"><a><text><string>quantity</string></text></a></t></children></atr><llabel id="b7"><points><p colinear="true" x="4405.5" y="1285.1729419388976" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4778.449694434905" y="1233.3285509983655" 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="4765.711222730692" y="1381.853037410865" w="168" h="50"/><t id="bc" x="4838.215136610086" y="1398.6809802590706"><a><text><string>side</string></text></a></t></children></atr><llabel id="bd"><points><p colinear="true" x="4405.5" y="1320.5071226140292" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4779.172573974651" y="1393.54452290494" 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="4700.974226119286" y="1555" w="168" h="50"/><t id="c2" x="4766.020086409813" y="1571.8279428482056"><a><text><string>source</string></text></a></t></children></atr><llabel id="c3"><points><p colinear="true" x="4363.219854476264" y="1336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4746.331444229757" y="1557.9009043392496" 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="4796.036983703456" y="2004.5243124859524" w="168" h="50.00000000000023"/><t id="c8" x="4874.4089472044325" y="2021.3522553341581"><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="4378.274502598599" y="2263.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4834.627246895033" y="2051.4323743436007" 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="4847.613426468301" y="2171.731033195004" w="168" h="50"/><t id="ce" x="4902.003212234903" y="2188.5589760432094"><a><text><string>timeframe</string></text></a></t></children></atr><llabel id="cf"><points><p colinear="true" x="4405.5" y="2282.750721340985" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4857.817249261719" y="2209.3784783507945" 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="4851.975814331675" y="2346.657264706117" w="168" h="50"/><t id="d4" x="4921.563712586069" y="2363.4852075543226"><a><text><string>open</string></text></a></t></children></atr><llabel id="d5"><points><p colinear="true" x="4405.5" y="2311.8869951594615" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4857.313584645609" y="2363.23782355834" 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="4808.798052230598" y="2516.2270077574435" w="168" h="50"/><t id="da" x="4880.143968978645" y="2533.054950605649"><a><text><string>high</string></text></a></t></children></atr><llabel id="db"><points><p colinear="true" x="4389.696129415879" y="2336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4842.964078963906" y="2521.2446297975644" 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="4721.30774291215" y="2667.7646686669104" w="168" h="50"/><t id="e0" x="4795.413669425822" y="2684.592611515116"><a><text><string>low</string></text></a></t></children></atr><llabel id="e1"><points><p colinear="true" x="4346.958736586194" y="2336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4775.225026049766" y="2669.4933910170507" 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="4596.044918767041" y="2789.9425790506675" w="168" h="50"/><t id="e6" x="4665.728810063428" y="2806.770521898873"><a><text><string>close</string></text></a></t></children></atr><llabel id="e7"><points><p colinear="true" x="4326.938225929132" y="2336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4662.175157620797" y="2790.552436559406" 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="4458.075940733153" y="2873.6277560953818" w="168" h="50"/><t id="ec" x="4521.147794370849" y="2890.4556989435873"><a><text><string>volume</string></text></a></t></children></atr><llabel id="ed"><points><p colinear="true" x="4314.760043694587" y="2336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4532.340064663027" y="2873.8155358682397" 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="4256.0768991837995" y="2912.564606778717" w="168" h="50"/><t id="f2" x="4306.128664625694" y="2929.3925496269226"><a><text><string>candle_time</string></text></a></t></children></atr><llabel id="f3"><points><p colinear="true" x="4302.294366413467" y="2336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="4338.974273978681" y="2912.5691934726883" 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="3653.564606778717" y="2819.220324641499" w="168" h="50"/><t id="f8" x="3731.9365702796936" y="2836.0482674897044"><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="3205.5" y="2890.769945998015" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3656.9064650340265" y="2851.8207419969895" 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="3647.6134264683014" y="2978.268966804996" w="168" h="50"/><t id="fe" x="3720.117340347696" y="2995.0969096532017"><a><text><string>side</string></text></a></t></children></atr><llabel id="ff"><points><p colinear="true" x="3205.5" y="2917.249278659015" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3657.8172492617186" y="2991.6215216492055" 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="3602.599843756785" y="3130.9308955646343" w="168" h="50"/><t id="104" x="3674.2997567816874" y="3147.75883841284"><a><text><string>type</string></text></a></t></children></atr><llabel id="105"><points><p colinear="true" x="3183.658888661668" y="2936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3639.031281941171" y="3135.45879643282" 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="3521.307742912151" y="3267.7646686669104" w="168" h="50"/><t id="10a" x="3588.153621513225" y="3284.592611515116"><a><text><string>status</string></text></a></t></children></atr><llabel id="10b"><points><p colinear="true" x="3146.958736586195" y="2936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3575.225026049766" y="3269.4933910170507" 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="3408.7646686669104" y="3380.3077429121504" w="168" h="50"/><t id="110" x="3469.3525135155433" y="3397.135685760356"><a><text><string>quantity</string></text></a></t></children></atr><llabel id="111"><points><p colinear="true" x="3128.3706525526854" y="2936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3473.9678234376524" y="3380.9815655952934" 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="3318.5234092424926" y="3461.599843756785" w="168" h="50"/><t id="116" x="3388.54330670343" y="3478.4277866049906"><a><text><string>price</string></text></a></t></children></atr><llabel id="117"><points><p colinear="true" x="3118.8239130215816" y="2936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3390.0288881184765" y="3461.903168629631" 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="3117.1400623390255" y="3506.6134264683014" w="168" h="50"/><t id="11c" x="3174.3858814308223" y="3523.441369316507"><a><text><string>placed_at</string></text></a></t></children></atr><llabel id="11d"><points><p colinear="true" x="3105.844733694178" y="2936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3197.5615144263866" y="3506.6431473074886" 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="2915.756715429611" y="3512.564606778717" w="168" h="50"/><t id="122" x="2965.7904831298065" y="3529.3925496269226"><a><text><string>executed_at</string></text></a></t></children></atr><llabel id="123"><points><p colinear="true" x="3094.2611621662854" y="2936.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="3004.261535044783" y="3512.5932621982847" 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="1370.9782799441732" y="3473.371683128888" w="168" h="50"/><t id="128" x="1449.3502434451498" y="3490.1996259770935"><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="1899.7170741899063" y="3336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1509.411960600975" y="3479.2414287453935" 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="1527.9042483118624" y="3706.0239987768887" w="168" h="50"/><t id="12e" x="1599.6041613367647" y="3722.8519416250942"><a><text><string>type</string></text></a></t></children></atr><llabel id="12f"><points><p colinear="true" x="1967.1352523831288" y="3336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1634.5611761574505" y="3706.916237421411" 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="1775.6853005521928" y="3837.771521240078" w="168" h="50"/><t id="134" x="1837.4971520536576" y="3854.5994640882836"><a><text><string>amount</string></text></a></t></children></atr><llabel id="135"><points><p colinear="true" x="1990.8995278962238" y="3336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1866.5252440845063" y="3837.8433966009807" 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="2056.314699447807" y="3837.771521240078" w="168" h="50"/><t id="13a" x="2115.738527572807" y="3854.5994640882836"><a><text><string>currency</string></text></a></t></children></atr><llabel id="13b"><points><p colinear="true" x="2009.1004721037762" y="3336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2134.4747559154935" y="3837.8433966009807" 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="2304.0957516881376" y="3706.0239987768887" w="168" h="50"/><t id="140" x="2358.5515469762236" y="3722.8519416250942"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="141"><points><p colinear="true" x="2032.8647476168712" y="3336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2366.4388238425495" y="3706.916237421411" 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="2461.021720055827" y="3473.371683128888" w="168" h="50"/><t id="146" x="2513.425490502604" y="3490.1996259770935"><a><text><string>description</string></text></a></t></children></atr><llabel id="147"><points><p colinear="true" x="2100.2829258100937" y="3336.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="2491.588039399025" y="3479.2414287453935" 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="-25.20693663107295" y="2296.195945896727" w="168" h="50"/><t id="14c" x="53.16502686990361" y="2313.0238887449327"><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="794.5" y="2477.5752827438127" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="128.3765526507861" y="2336.380094846647" 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="-43.59888811957319" y="2501.2631213604473" w="168" h="50"/><t id="152" x="11.888912478571342" y="2518.091064208653"><a><text><string>username</string></text></a></t></children></atr><llabel id="153"><points><p colinear="true" x="794.5" y="2503.2233165280013" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="124.9713403648008" y="2524.194543569106" 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="-12.722189759415869" y="2704.825003427301" w="168" h="50"/><t id="158" x="55.82170214732241" y="2721.6529462755066"><a><text><string>email</string></text></a></t></children></atr><llabel id="159"><points><p colinear="true" x="794.5" y="2529.257739398313" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="133.99567258184928" y="2713.070463121132" 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="65.65343391739452" y="2895.2142676873814" w="168" h="50"/><t id="15e" x="122.05324470841015" y="2912.042210535587"><a><text><string>full_name</string></text></a></t></children></atr><llabel id="15f"><points><p colinear="true" x="834.8245603064811" y="2536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="190.23774726825653" y="2898.265973603192" 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="187.0358166075133" y="3061.5185896537487" w="168" h="50"/><t id="164" x="227.3975109434508" y="3078.3465325019542"><a><text><string>password_hash</string></text></a></t></children></atr><llabel id="165"><points><p colinear="true" x="860.8585420840991" y="2536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="297.5528032123524" y="3062.7573571488947" 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="344.4678226128738" y="3194.206094029073" w="167.99999999999994" h="50"/><t id="16a" x="378.9974933282058" y="3211.0340368772786"><a><text><string>available_balance</string></text></a></t></children></atr><llabel id="16b"><points><p colinear="true" x="876.0695513879581" y="2536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="445.3684308903264" y="3194.691009195862" 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="528.3822006353158" y="3285.6716823392735" w="168" h="50"/><t id="170" x="563.9738678106088" y="3302.499625187479"><a><text><string>invested_balance</string></text></a></t></children></atr><llabel id="171"><points><p colinear="true" x="887.0501833164841" y="2536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="621.8779195902513" y="3285.8165943191393" 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="730.3821674372552" y="3330.672925695784" w="168" h="50"/><t id="176" x="784.8379627253412" y="3347.50086854399"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="177"><points><p colinear="true" x="896.3478441414994" y="2536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="817.4325112010669" y="3330.6845426733403" 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="935.6888668256563" y="3326.6305391177502" w="168" h="50"/><t id="17c" x="987.798653812961" y="3343.458481965956"><a><text><string>updated_at</string></text></a></t></children></atr><llabel id="17d"><points><p colinear="true" x="905.1297404666373" y="2536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1016.6082943801105" y="3326.65344234991" 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="29.211781824476816" y="1884.5760221444957" w="168" h="50"/><t id="182" x="83.66757711256275" y="1901.4039649927013"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="183"><points><p colinear="true" x="374.44242485534556" y="1536.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="131.18132620955708" y="1885.1269271522506" 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="-176.40387650610398" y="1388.175911166535" w="168" h="50"/><t id="188" x="-108.47198411108445" y="1405.0038540147405"><a><text><string>name</string></text></a></t></children></atr><llabel id="189"><points><p colinear="true" x="294.5" y="1481.3975035352569" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="-18.945248797331914" y="1426.5404857070557" 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="186.59047744873953" y="992.0370868554658" w="168" h="50"/><t id="18e" x="264.9624409497161" y="1008.8650297036713"><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="390.219854476264" y="1463.5" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="277.900953305125" y="1042.9541287752172" 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="1449.0127018922194" y="1425" w="168" h="50"/><t id="194" x="1509.6005467408522" y="1441.8279428482056"><a><text><string>quantity</string></text></a></t></children></atr><llabel id="195"><points><p colinear="true" x="1145.9489148679422" y="1673.4713816320225" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1494.3699200026902" y="1473.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="1508.403876506104" y="1588.175911166535" w="168" h="50"><a><fillColor><color rgba="#ffffebeb"/></fillColor><strokeDashes><doubleArray><double>5</double></doubleArray></strokeDashes></a></e><t id="19a" x="1565.6556923020025" y="1605.0038540147405"><a><text><string>avg_price</string></text></a></t></children></atrderivado><llabel id="19b"><points><p colinear="true" x="1173.7317959892898" y="1686.999095030996" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1519.945248797332" y="1626.5404857070557" 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="1508.403876506104" y="1761.824088833465" w="168" h="50"/><t id="1a0" x="1562.85967179419" y="1778.6520316816707"><a><text><string>created_at</string></text></a></t></children></atr><llabel id="1a1"><points><p colinear="true" x="1173.7317959892898" y="1713.000904969004" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1519.945248797332" y="1774.4595142929443" 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="1449.0127018922194" y="1925" w="168" h="50"/><t id="1a6" x="1501.122488879524" y="1941.8279428482056"><a><text><string>updated_at</string></text></a></t></children></atr><llabel id="1a7"><points><p colinear="true" x="1145.9489148679422" y="1726.5286183679775" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="1494.3699200026902" y="1927.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="403.8791732994945" y="843.9651453292795" w="168" h="50"/><t id="1ac" x="461.86299898308823" y="860.7930881774851"><a><text><string>added_at</string></text></a></t></children></atr><llabel id="1ad"><points><p colinear="true" x="764.7508898645601" y="1118.26155867615" c1x="0" c1y="0" c2x="0" c2y="0"/><p colinear="true" x="515.2317585773111" y="893.6433217132783" 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: P1-ConceptualModel/ep-diagram.md
===================================================================
--- P1-ConceptualModel/ep-diagram.md	(revision d8ce4e224bde01e8f87558691226298db515617e)
+++ P1-ConceptualModel/ep-diagram.md	(revision d8ce4e224bde01e8f87558691226298db515617e)
@@ -0,0 +1,197 @@
+Ентитети
+
+User – ентитет кој чува информации за корисниците на платформата
+
+id (uuid)
+
+username (varchar(50), not null, unique)
+
+email (varchar(255), not null, unique)
+
+password_hash (varchar(255), not null)
+
+full_name (varchar(200))
+
+created_at (timestamptz)
+
+updated_at (timestamptz)
+
+
+Crypto – ентитет кој ги чува податоците за криптовалутите со кои се тргува
+
+id (uuid)
+
+symbol (varchar(20), not null, unique)
+
+name (varchar(255))
+
+created_at (timestamptz)
+
+
+
+Market – ентитет кој ги дефинира пазарите (парови криптовалути и валути за котација(BTCUSDT, ADAUSDT, ADABTC))
+
+id (uuid)
+
+crypto_id (uuid, not null, FK → Crypto.id)
+
+quote_currency (char(3), not null) ADA, USDT, BTC, USDT
+
+is_active (boolean)
+
+created_at (timestamptz)
+
+
+
+Holding – ентитет кој ги чува позициите на корисниците во криптовалути
+
+id (uuid)
+
+user_id (uuid, not null, FK → User.id)
+
+crypto_id (uuid, not null, FK → Crypto.id)
+
+quantity (numeric(20,4), not null)
+
+avg_price (numeric(18,6))
+
+created_at (timestamptz)
+
+updated_at (timestamptz)
+
+
+
+Order – ентитет кој ги чува нарачките за купување/продавање
+
+id (uuid)
+
+user_id (uuid, not null, FK → User.id)
+
+market_id (uuid, not null, FK → Market.id)
+
+side (varchar(4), not null) — типично “buy” или “sell”
+
+type (varchar(20), not null) — тип на нарачка, пример “limit”, “market”
+
+status (varchar(20), not null) — статус на нарачка (open, executed, cancelled)
+
+quantity (numeric(20,4), not null)
+
+price (numeric(18,6))
+
+placed_at (timestamptz)
+
+executed_at (timestamptz)
+
+
+
+Transaction – ентитет кој ја следи финансиската активност на корисниците (депозити, купувања, продавања, провизии)
+
+id (uuid)
+
+user_id (uuid, not null, FK → User.id)
+
+type (varchar(50), not null) — пример: “deposit”, “buy”, “sell”, “fee”
+
+amount (numeric(18,4), not null)
+
+currency (char(3), not null)
+
+related_order (uuid, FK → Order.id)
+
+created_at (timestamptz)
+
+description (text)
+
+
+
+Market_Trade – ентитет кој ги евидентира извршените пазарни зделки кои ја формираат цената
+
+id (bigserial)
+
+market_id (uuid, not null, FK → Market.id)
+
+executed_at (timestamptz, not null)
+
+price (numeric(18,6), not null)
+
+quantity (numeric(20,6), not null)
+
+side (varchar(4))
+
+source (varchar(50))
+
+Market_Candle – ентитет кој ги агрегира податоците за цените и волуменот во временски интервали (целови)
+
+id (bigserial)
+
+market_id (uuid, not null, FK → Market.id)
+
+timeframe (varchar(5), not null) — пример: “1m”, “5m”, “1h”
+
+open (numeric(18,6), not null)
+
+high (numeric(18,6), not null)
+
+low (numeric(18,6), not null)
+
+close (numeric(18,6), not null)
+
+volume (numeric(20,6), not null)
+
+candle_time (timestamptz, not null)
+
+Watchlist – ентитет кој ги чува листите за следење на корисниците
+
+id (uuid)
+
+user_id (uuid, not null, FK → User.id)
+
+name (varchar(100))
+
+created_at (timestamptz)
+
+Watchlist_Item – ентитет кој ги чува криптовалутите кои се ставени во некоја листа за следење
+
+id (uuid)
+
+watchlist_id (uuid, not null, FK → Watchlist.id)
+
+crypto_id (uuid, not null, FK → Crypto.id)
+
+added_at (timestamptz)
+
+Релации
+
+User – Holding (1:N)
+Еден корисник може да има повеќе позиции во различни криптовалути.
+
+Crypto – Holding (1:N)
+Една криптовалута може да се држи од повеќе корисници.
+
+User – Order (1:N)
+Еден корисник може да има повеќе нарачки.
+
+Market – Order (1:N)
+Еден пазар има повеќе нарачки.
+
+User – Transaction (1:N)
+Еден корисник има повеќе трансакции.
+
+Order – Transaction (0..1 : N)
+Трансакцијата може да биде поврзана со една нарачка (пример купување/продажба).
+
+Market – Market_Trade (1:N)
+Еден пазар има многу извршени зделки.
+
+Market – Market_Candle (1:N)
+Еден пазар има многу временски агрегирани податоци.
+
+User – Watchlist (1:N)
+Еден корисник може да има повеќе листи за следење.
+
+Watchlist – Watchlist_Item (1:N)
+Една листа може да содржи повеќе криптовалути.
+
+Crypto – Watchlist_Item (1:N)
+Една криптовалута може да биде во повеќе листи за следење.
