nordabiz/docs/architecture/diagrams/a2-er-diagram.drawio

324 lines
32 KiB
Plaintext

<mxfile host="draw.io" modified="2026-02-12" agent="Claude Code" type="device">
<diagram id="a2-er" name="Schemat Bazy Danych (ER)">
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1800" pageHeight="1200" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="NordaBiz — Schemat Bazy Danych (Entity-Relationship)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=22;fontStyle=1;fontColor=#1a1a2e;" vertex="1" parent="1">
<mxGeometry x="430" y="15" width="620" height="36" as="geometry"/>
</mxCell>
<mxCell id="subtitle" value="19 domen funkcjonalnych | 80+ tabel | PostgreSQL | SQLAlchemy 2.0" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#888;" vertex="1" parent="1">
<mxGeometry x="480" y="48" width="480" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 1: USERS (lewy-góra) -->
<mxCell id="d1_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;shadow=1;" vertex="1" parent="1">
<mxGeometry x="30" y="80" width="260" height="195" as="geometry"/>
</mxCell>
<mxCell id="d1_title" value="&lt;b style=&quot;color:#1565C0&quot;&gt;1. Użytkownicy&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (5 tabel)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="40" y="86" width="170" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_t1" value="&lt;b&gt;users&lt;/b&gt; — konta, role, 2FA" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="110" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_t2" value="&lt;b&gt;user_companies&lt;/b&gt; — M:M multi-company" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="134" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_t3" value="&lt;b&gt;user_company_permissions&lt;/b&gt; — delegacje" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="158" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_t4" value="&lt;b&gt;user_sessions&lt;/b&gt; + &lt;b&gt;user_blocks&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBDEFB;strokeColor=#1565C0;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="182" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_t5" value="&lt;b&gt;oauth_tokens&lt;/b&gt; — Google/Meta OAuth" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="206" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d1_t6" value="&lt;b&gt;user_notifications&lt;/b&gt; — powiadomienia" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBDEFB;strokeColor=#1565C0;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="230" width="240" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 2: COMPANIES (centrum-góra) — HUB -->
<mxCell id="d2_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1a1a2e;strokeColor=#1a1a2e;shadow=1;" vertex="1" parent="1">
<mxGeometry x="340" y="80" width="340" height="275" as="geometry"/>
</mxCell>
<mxCell id="d2_title" value="&lt;b style=&quot;color:#fff;font-size:13px&quot;&gt;2. Katalog Firm (HUB)&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#aaa&quot;&gt; (14 tabel)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="350" y="86" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d2_t1" value="&lt;b style=&quot;color:#FFF59D&quot;&gt;companies&lt;/b&gt;&lt;font color=&quot;#ccc&quot;&gt; — 150 firm (centralny hub)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#263238;strokeColor=#FFF59D;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="110" width="320" height="22" as="geometry"/>
</mxCell>
<mxCell id="d2_t2" value="&lt;font color=&quot;#ccc&quot;&gt;&lt;b&gt;categories&lt;/b&gt; | &lt;b&gt;services&lt;/b&gt; | &lt;b&gt;competencies&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#37474F;strokeColor=#546E7A;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="138" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d2_t3" value="&lt;font color=&quot;#ccc&quot;&gt;&lt;b&gt;company_services&lt;/b&gt; | &lt;b&gt;company_competencies&lt;/b&gt; (M:M)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#37474F;strokeColor=#546E7A;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="162" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d2_t4" value="&lt;font color=&quot;#ccc&quot;&gt;&lt;b&gt;certifications&lt;/b&gt; | &lt;b&gt;awards&lt;/b&gt; | &lt;b&gt;company_events&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#37474F;strokeColor=#546E7A;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="186" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d2_t5" value="&lt;font color=&quot;#ccc&quot;&gt;&lt;b&gt;company_contacts&lt;/b&gt; | &lt;b&gt;company_social_media&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#37474F;strokeColor=#546E7A;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="210" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d2_t6" value="&lt;font color=&quot;#ccc&quot;&gt;&lt;b&gt;company_recommendations&lt;/b&gt; | &lt;b&gt;company_citations&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#37474F;strokeColor=#546E7A;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="234" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d2_t7" value="&lt;font color=&quot;#ccc&quot;&gt;&lt;b&gt;company_quality_tracking&lt;/b&gt; — jakość danych&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#37474F;strokeColor=#546E7A;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="258" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d2_hub" value="&lt;font style=&quot;font-size:8px;color:#FFF59D&quot;&gt;→ Połączona z 20+ tabelami (centralny hub)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="350" y="282" width="260" height="16" as="geometry"/>
</mxCell>
<!-- RELACJA Users ↔ Companies -->
<mxCell id="rel_uc" value="FK" style="strokeColor=#1565C0;strokeWidth=2;fontSize=9;fontColor=#1565C0;fontStyle=1;" edge="1" source="d1_bg" target="d2_bg" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- DOMAIN 3: DATA ENRICHMENT (prawy-góra) -->
<mxCell id="d3_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#2E7D32;shadow=1;" vertex="1" parent="1">
<mxGeometry x="730" y="80" width="260" height="145" as="geometry"/>
</mxCell>
<mxCell id="d3_title" value="&lt;b style=&quot;color:#2E7D32&quot;&gt;3. Wzbogacanie danych&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (5)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="740" y="86" width="230" height="20" as="geometry"/>
</mxCell>
<mxCell id="d3_t1" value="&lt;b&gt;people&lt;/b&gt; — osoby z KRS" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#2E7D32;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="110" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d3_t2" value="&lt;b&gt;company_person&lt;/b&gt; — M:M firmy↔osoby" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#2E7D32;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="134" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d3_t3" value="&lt;b&gt;company_pkd&lt;/b&gt; | &lt;b&gt;company_financial_report&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#2E7D32;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="158" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d3_t4" value="&lt;b&gt;ai_enrichment_proposals&lt;/b&gt; — AI sugestie" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#2E7D32;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="182" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="rel_d3" value="" style="strokeColor=#2E7D32;strokeWidth=1;dashed=1;" edge="1" source="d3_bg" target="d2_bg" parent="1"><mxGeometry relative="1" as="geometry"/></mxCell>
<!-- DOMAIN 4: WEBSITE ANALYSIS -->
<mxCell id="d4_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF3E0;strokeColor=#E65100;shadow=1;" vertex="1" parent="1">
<mxGeometry x="1040" y="80" width="260" height="145" as="geometry"/>
</mxCell>
<mxCell id="d4_title" value="&lt;b style=&quot;color:#E65100&quot;&gt;4. Analiza Stron WWW&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (4)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1050" y="86" width="230" height="20" as="geometry"/>
</mxCell>
<mxCell id="d4_t1" value="&lt;b&gt;company_website_content&lt;/b&gt; — HTML/text" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1050" y="110" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d4_t2" value="&lt;b&gt;company_ai_insights&lt;/b&gt; — AI ekstrakcja" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1050" y="134" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d4_t3" value="&lt;b&gt;company_website_analysis&lt;/b&gt; — 100+ kolumn" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE0B2;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="1050" y="158" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d4_note" value="&lt;font style=&quot;font-size:8px;color:#E65100&quot;&gt;SEO, CrUX, headers, GBP, GSC, images&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="1050" y="182" width="230" height="16" as="geometry"/>
</mxCell>
<!-- DOMAIN 5: AI CHAT -->
<mxCell id="d5_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F3E5F5;strokeColor=#7B1FA2;shadow=1;" vertex="1" parent="1">
<mxGeometry x="1350" y="80" width="230" height="145" as="geometry"/>
</mxCell>
<mxCell id="d5_title" value="&lt;b style=&quot;color:#7B1FA2&quot;&gt;5. AI Chat&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (5)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1360" y="86" width="130" height="20" as="geometry"/>
</mxCell>
<mxCell id="d5_t1" value="&lt;b&gt;ai_chat_conversations&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1360" y="110" width="210" height="20" as="geometry"/>
</mxCell>
<mxCell id="d5_t2" value="&lt;b&gt;ai_chat_messages&lt;/b&gt; — tokens/cost" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1360" y="134" width="210" height="20" as="geometry"/>
</mxCell>
<mxCell id="d5_t3" value="&lt;b&gt;ai_chat_feedback&lt;/b&gt; | &lt;b&gt;ai_api_costs&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1360" y="158" width="210" height="20" as="geometry"/>
</mxCell>
<mxCell id="d5_t4" value="&lt;b&gt;ai_usage_log&lt;/b&gt; | &lt;b&gt;ai_rate_limit&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1BEE7;strokeColor=#7B1FA2;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1360" y="182" width="210" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 6: DIGITAL MATURITY -->
<mxCell id="d6_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E0F7FA;strokeColor=#00838F;shadow=1;" vertex="1" parent="1">
<mxGeometry x="30" y="310" width="260" height="100" as="geometry"/>
</mxCell>
<mxCell id="d6_title" value="&lt;b style=&quot;color:#00838F&quot;&gt;6. Dojrzałość Cyfrowa&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (2)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="40" y="316" width="220" height="20" as="geometry"/>
</mxCell>
<mxCell id="d6_t1" value="&lt;b&gt;company_digital_maturity&lt;/b&gt; — dashboard" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#00838F;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="340" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d6_t2" value="&lt;b&gt;maturity_assessments&lt;/b&gt; — historia" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#00838F;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="364" width="240" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 7: FORUM -->
<mxCell id="d7_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEBEE;strokeColor=#C62828;shadow=1;" vertex="1" parent="1">
<mxGeometry x="30" y="440" width="260" height="170" as="geometry"/>
</mxCell>
<mxCell id="d7_title" value="&lt;b style=&quot;color:#C62828&quot;&gt;7. Forum i Dyskusje&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (8 tabel)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="40" y="446" width="230" height="20" as="geometry"/>
</mxCell>
<mxCell id="d7_t1" value="&lt;b&gt;forum_topics&lt;/b&gt; | &lt;b&gt;forum_replies&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="470" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d7_t2" value="&lt;b&gt;forum_attachments&lt;/b&gt; | &lt;b&gt;subscriptions&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="494" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d7_t3" value="&lt;b&gt;topic_reads&lt;/b&gt; | &lt;b&gt;reply_reads&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCDD2;strokeColor=#C62828;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="518" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d7_t4" value="&lt;b&gt;forum_reports&lt;/b&gt; | &lt;b&gt;forum_edit_history&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCDD2;strokeColor=#C62828;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="542" width="240" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 8-10: Rada + Events + Messages -->
<mxCell id="d8_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF9C4;strokeColor=#F9A825;shadow=1;" vertex="1" parent="1">
<mxGeometry x="340" y="390" width="340" height="145" as="geometry"/>
</mxCell>
<mxCell id="d8_title" value="&lt;b style=&quot;color:#F9A825&quot;&gt;8-10. Rada Izby | Wydarzenia | Wiadomości&lt;/b&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="350" y="396" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d8_t1" value="&lt;b&gt;board_meetings&lt;/b&gt; — posiedzenia Rady Izby" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#F9A825;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="420" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d8_t2" value="&lt;b&gt;board_documents&lt;/b&gt; — protokoły, uchwały" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#F9A825;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="444" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d8_t3" value="&lt;b&gt;norda_events&lt;/b&gt; | &lt;b&gt;event_attendees&lt;/b&gt; — RSVP" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#F9A825;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="468" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d8_t4" value="&lt;b&gt;private_messages&lt;/b&gt; — wiadomości (threaded)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#F9A825;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="492" width="320" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 11: CLASSIFIEDS -->
<mxCell id="d11_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#2E7D32;shadow=1;" vertex="1" parent="1">
<mxGeometry x="340" y="570" width="340" height="120" as="geometry"/>
</mxCell>
<mxCell id="d11_title" value="&lt;b style=&quot;color:#2E7D32&quot;&gt;11. Ogłoszenia B2B&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (4 tabele)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="350" y="576" width="230" height="20" as="geometry"/>
</mxCell>
<mxCell id="d11_t1" value="&lt;b&gt;classifieds&lt;/b&gt; — ogłoszenia (szukam/oferuję)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#2E7D32;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="600" width="320" height="20" as="geometry"/>
</mxCell>
<mxCell id="d11_t2" value="&lt;b&gt;classified_reads&lt;/b&gt; | &lt;b&gt;interests&lt;/b&gt; | &lt;b&gt;questions&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#2E7D32;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="350" y="624" width="320" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 12-14: GBP + Competitors + Reports -->
<mxCell id="d12_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF3E0;strokeColor=#E65100;shadow=1;" vertex="1" parent="1">
<mxGeometry x="730" y="260" width="260" height="170" as="geometry"/>
</mxCell>
<mxCell id="d12_title" value="&lt;b style=&quot;color:#E65100&quot;&gt;12-14. Audyty &amp; Raporty&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (5)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="740" y="266" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d12_t1" value="&lt;b&gt;gbp_audits&lt;/b&gt; — Google Business Profile" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="290" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d12_t2" value="&lt;b&gt;gbp_reviews&lt;/b&gt; — opinie + sentiment" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="314" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d12_t3" value="&lt;b&gt;company_competitors&lt;/b&gt; — monitoring" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="338" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d12_t4" value="&lt;b&gt;competitor_snapshots&lt;/b&gt; — periodic data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="362" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d12_t5" value="&lt;b&gt;audit_reports&lt;/b&gt; — raporty zbiorcze" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE0B2;strokeColor=#E65100;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="386" width="240" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 15: IT -->
<mxCell id="d15_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E0F7FA;strokeColor=#00838F;shadow=1;" vertex="1" parent="1">
<mxGeometry x="1040" y="260" width="260" height="100" as="geometry"/>
</mxCell>
<mxCell id="d15_title" value="&lt;b style=&quot;color:#00838F&quot;&gt;15. Infrastruktura IT&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (2)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1050" y="266" width="210" height="20" as="geometry"/>
</mxCell>
<mxCell id="d15_t1" value="&lt;b&gt;it_audits&lt;/b&gt; — 50+ kolumn oceny IT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#00838F;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1050" y="290" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d15_t2" value="&lt;b&gt;it_collaboration_matches&lt;/b&gt; — B2B IT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#00838F;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1050" y="314" width="240" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 16: MEMBERSHIP -->
<mxCell id="d16_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F3E5F5;strokeColor=#7B1FA2;shadow=1;" vertex="1" parent="1">
<mxGeometry x="1040" y="390" width="260" height="100" as="geometry"/>
</mxCell>
<mxCell id="d16_title" value="&lt;b style=&quot;color:#7B1FA2&quot;&gt;16. Składki Członkowskie&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (2)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1050" y="396" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d16_t1" value="&lt;b&gt;membership_fees&lt;/b&gt; — płatności" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1050" y="420" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d16_t2" value="&lt;b&gt;membership_fee_config&lt;/b&gt; — taryfy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1050" y="444" width="240" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 17: ZOPK (dół-prawo) -->
<mxCell id="d17_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#1B5E20;shadow=1;" vertex="1" parent="1">
<mxGeometry x="730" y="470" width="570" height="220" as="geometry"/>
</mxCell>
<mxCell id="d17_title" value="&lt;b style=&quot;font-size:13px;color:#1B5E20&quot;&gt;17. ZOPK — Zielony Okręg Przemysłowy Kaszubia&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (12 tabel — Knowledge Graph)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="740" y="476" width="520" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_t1" value="&lt;b&gt;zopk_projects&lt;/b&gt; — inicjatywy (wiatr, atom, DC)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="500" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_t2" value="&lt;b&gt;zopk_stakeholders&lt;/b&gt; | &lt;b&gt;stakeholder_project&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="524" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_t3" value="&lt;b&gt;zopk_news&lt;/b&gt; | &lt;b&gt;zopk_resources&lt;/b&gt; | &lt;b&gt;company_link&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="548" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_kg_title" value="&lt;font style=&quot;font-size:10px;color:#1B5E20&quot;&gt;&lt;b&gt;Knowledge Graph:&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="1020" y="502" width="130" height="18" as="geometry"/>
</mxCell>
<mxCell id="d17_t4" value="&lt;b&gt;zopk_knowledge_chunk&lt;/b&gt; — segmenty" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A5D6A7;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1020" y="524" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_t5" value="&lt;b&gt;zopk_knowledge_entity&lt;/b&gt; — encje" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A5D6A7;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1020" y="548" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_t6" value="&lt;b&gt;zopk_knowledge_fact&lt;/b&gt; — fakty" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A5D6A7;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="1020" y="572" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_t7" value="&lt;b&gt;entity_mention&lt;/b&gt; | &lt;b&gt;relation&lt;/b&gt; | &lt;b&gt;extraction_job&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A5D6A7;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="572" width="260" height="20" as="geometry"/>
</mxCell>
<mxCell id="d17_t8" value="&lt;b&gt;zopk_news_fetch_job&lt;/b&gt; — auto collection" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1B5E20;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="740" y="600" width="260" height="20" as="geometry"/>
</mxCell>
<!-- DOMAIN 19: ANALYTICS -->
<mxCell id="d19_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEBEE;strokeColor=#C62828;shadow=1;" vertex="1" parent="1">
<mxGeometry x="30" y="640" width="260" height="100" as="geometry"/>
</mxCell>
<mxCell id="d19_title" value="&lt;b style=&quot;color:#C62828&quot;&gt;19. Analytics&lt;/b&gt;&lt;font style=&quot;font-size:9px;color:#888&quot;&gt; (4 tabele)&lt;/font&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="40" y="646" width="180" height="20" as="geometry"/>
</mxCell>
<mxCell id="d19_t1" value="&lt;b&gt;page_views&lt;/b&gt; | &lt;b&gt;user_clicks&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="670" width="240" height="20" as="geometry"/>
</mxCell>
<mxCell id="d19_t2" value="&lt;b&gt;analytics_daily&lt;/b&gt; | &lt;b&gt;popular_pages_daily&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=9;align=left;spacingLeft=4;" vertex="1" parent="1">
<mxGeometry x="40" y="694" width="240" height="20" as="geometry"/>
</mxCell>
<!-- VIEWS & FUNCTIONS -->
<mxCell id="views_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#999;shadow=1;" vertex="1" parent="1">
<mxGeometry x="340" y="720" width="340" height="60" as="geometry"/>
</mxCell>
<mxCell id="views_t" value="&lt;b style=&quot;font-size:11px&quot;&gt;Views (3):&lt;/b&gt; v_companies_full | v_data_quality_stats | v_companies_incomplete&lt;br&gt;&lt;b style=&quot;font-size:11px&quot;&gt;Functions (2):&lt;/b&gt; calculate_data_quality() | update_all_data_quality()" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="350" y="726" width="330" height="28" as="geometry"/>
</mxCell>
<!-- PODSUMOWANIE -->
<mxCell id="summary" value="&lt;font style=&quot;font-size:11px;color:#888&quot;&gt;&lt;b&gt;80+ tabel&lt;/b&gt; | &lt;b&gt;19 domen&lt;/b&gt; | &lt;b&gt;3 widoki&lt;/b&gt; | &lt;b&gt;2 funkcje DB&lt;/b&gt; | &lt;b&gt;companies&lt;/b&gt; = centralny hub (20+ relacji) | &lt;b&gt;Multi-company&lt;/b&gt; via user_companies M:M&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="330" y="800" width="820" height="24" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>