diff --git a/README.md b/README.md
index feadba9..8cd1756 100644
--- a/README.md
+++ b/README.md
@@ -89,7 +89,60 @@ flowchart LR
%% ===== Бизнес-сервисы =====
subgraph APPS["💼 Бизнес-сервисы"]
direction TB
- ExampleApp["example-app
HTTP :8080"]:::app
+
+ subgraph CORE["🧩 Платформа / Core"]
+ direction LR
+ Django["django
:8000 + srx-admin"]:::app
+ EAV["eav
атрибуты сущностей"]:::app
+ CI["control-interface
UI :80"]:::app
+ Workspaces["workspaces"]:::app
+ Projects["projects"]:::app
+ Subs["subscriptions"]:::app
+ SysLog["system-log"]:::app
+ MsgHub["message-hub"]:::app
+ FaaS["faas
functions runtime"]:::app
+ Flows["flows
оркестрация"]:::app
+ end
+
+ subgraph DOCS["📂 Документы / CDE"]
+ direction LR
+ Docs["documentations
filestream + pdm"]:::app
+ DocLink["document-link"]:::app
+ Attach["attachments
HelmRelease"]:::app
+ Transmittal["transmittal"]:::app
+ CDE["cde
common data env"]:::app
+ Drawings["drawings"]:::app
+ BIM["bim
3D-модели"]:::app
+ Stamp["stamp-verification"]:::app
+ end
+
+ subgraph QUALITY["✅ Контроль качества"]
+ direction LR
+ Inspect["inspections"]:::app
+ Checklists["checklists"]:::app
+ Remarks["remarks"]:::app
+ Issues["issues"]:::app
+ RFI["rfi
request for info"]:::app
+ Reviews["reviews"]:::app
+ Prescr["prescriptions"]:::app
+ Compare["comparisons
diff чертежей"]:::app
+ end
+
+ subgraph FIELD["📐 Полевые данные"]
+ direction LR
+ Measure["measurements"]:::app
+ Mapper["mapper"]:::app
+ XSection["cross-section"]:::app
+ Process["processing"]:::app
+ end
+
+ subgraph PMG["🏗 Управление проектом"]
+ direction LR
+ PM["pm
project mgmt"]:::app
+ Contracts["contracts"]:::app
+ Resources["resources"]:::app
+ Notes["notes"]:::app
+ end
end
%% ===== GitOps потоки =====
@@ -107,8 +160,13 @@ flowchart LR
%% ===== Внешний трафик =====
User ==>|HTTPS 443| Gateway
LE -. ACME HTTP-01 .-> Cert
- Gateway ==>|VirtualService
mTLS| ExampleApp
- Gateway ==>|VirtualService
mTLS| Camunda
+ Gateway ==>|VirtualService
mTLS| CI
+ Gateway ==>|/api| Django
+ Gateway ==>|/bim| BIM
+ Gateway ==>|/cde| CDE
+ Gateway ==>|/docs| Docs
+ Gateway ==>|/pm| PM
+ Gateway ==>|VirtualService| Camunda
Gateway ==>|VirtualService| Operate
Gateway ==>|/auth| Keycloak
Gateway ==>|/oauth| Zitadel
@@ -116,26 +174,80 @@ flowchart LR
Gateway ==>|/minio| MinIO
Admin -.->|kubectl| Dashboard
+ %% ===== Frontend → backend (через control-interface) =====
+ CI -- "API gateway" --> Django
+ CI -- "API gateway" --> PM
+ CI -- "API gateway" --> Projects
+ CI -- "API gateway" --> Workspaces
+
%% ===== Подключения к данным =====
+ Django -- "JDBC/ORM" --> PG
+ EAV -- "JDBC" --> PG
+ PM -- "JDBC" --> PG
+ Contracts -- "JDBC" --> PG
+ Resources -- "JDBC" --> PG
+ Projects -- "JDBC" --> PG
+ Workspaces -- "JDBC" --> PG
+ Subs -- "JDBC" --> PG
+ SysLog -- "JDBC" --> PG
+ Docs -- "JDBC" --> PG
+ DocLink -- "JDBC" --> PG
+ CDE -- "JDBC" --> PG
+ BIM -- "JDBC" --> PG
+ Drawings -- "JDBC" --> PG
+ Inspect -- "JDBC" --> PG
+ Checklists -- "JDBC" --> PG
+ Issues -- "JDBC" --> PG
+ Remarks -- "JDBC" --> PG
+ RFI -- "JDBC" --> PG
+ Reviews -- "JDBC" --> PG
+ Prescr -- "JDBC" --> PG
+ Compare -- "JDBC" --> PG
+ Measure -- "JDBC" --> PG
+ Mapper -- "JDBC" --> PG
+ XSection -- "JDBC" --> PG
+ Notes -- "JDBC" --> PG
+ Stamp -- "JDBC" --> PG
+ Transmittal -- "JDBC" --> PG
Camunda -- "JDBC" --> PG
Operate -- "JDBC" --> PG
- ExampleApp -- "JDBC" --> PG
Zitadel -- "JDBC" --> PG
Keycloak -- "JDBC" --> PG
- Camunda -- "cache TTL" --> Redis
- ExampleApp -- "cache + pub/sub" --> Redis
- Keycloak -- "session cache" --> Redis
+
+ %% ===== Redis (общий кэш / sessions) =====
+ Django -- "session/cache" --> Redis
+ CI -- "session" --> Redis
+ PM -- "cache" --> Redis
+ Workspaces -- "cache" --> Redis
+ Subs -- "pub/sub realtime" --> Redis
+ MsgHub -- "pub/sub" --> Redis
+ Flows -- "state" --> Redis
+ FaaS -- "queue" --> Redis
+ Camunda -- "cache" --> Redis
+ Keycloak -- "session" --> Redis
%% ===== S3 / объектное хранилище =====
- ExampleApp -- "PUT/GET" --> S3Proxy
- Camunda -- "attachments" --> S3Proxy
+ Attach -- "PUT/GET" --> S3Proxy
+ Docs -- "filestream" --> S3Proxy
+ BIM -- "IFC/RVT" --> S3Proxy
+ Drawings -- "DWG/PDF" --> S3Proxy
+ CDE -- "files" --> S3Proxy
+ Compare -- "rendered diff" --> S3Proxy
+ Stamp -- "signed PDF" --> S3Proxy
+ Transmittal -- "bundles" --> S3Proxy
+ Process -- "raw + результаты" --> S3Proxy
+ Mapper -- "tiles" --> S3Proxy
+ Measure -- "snapshots" --> S3Proxy
+ XSection -- "профили" --> S3Proxy
S3Proxy -- "S3 API" --> MinIO
- %% ===== Секреты =====
- ExampleApp -. "approle" .-> Vault
+ %% ===== Vault (secrets) =====
+ Django -. "kv" .-> Vault
Camunda -. "approle" .-> Vault
- Keycloak -. "kv/secrets" .-> Vault
- Zitadel -. "kv/secrets" .-> Vault
+ Keycloak -. "kv" .-> Vault
+ Zitadel -. "kv" .-> Vault
+ FaaS -. "approle" .-> Vault
+ Flows -. "approle" .-> Vault
%% ===== Storage / PVC =====
PG -.->|PVC| LPP
@@ -146,26 +258,87 @@ flowchart LR
MinIO -.->|PVC| LPP
Vault -.->|PVC| LPP
- %% ===== Межсервисные маршруты =====
- ExampleApp -- "REST POST /process
start workflow" --> Camunda
- Camunda -- "REST callback
job worker" --> ExampleApp
- Camunda -- "produce
topic: bpm.events" --> Kafka
- ExampleApp -- "consume
topic: bpm.events" --> Kafka
- ExampleApp -- "produce
topic: app.audit" --> Kafka
- Operate -- "consume
zeebe-records" --> Kafka
- ExampleApp -- "publish
queue: tasks" --> RMQ
- Camunda -- "consume
queue: tasks" --> RMQ
+ %% ===== Kafka (event bus) =====
+ SysLog -- "consume audit.*" --> Kafka
+ MsgHub -- "produce notify.*" --> Kafka
+ Subs -- "consume notify.*" --> Kafka
+ Flows -- "produce/consume flows.*" --> Kafka
+ Camunda -- "produce bpm.events" --> Kafka
+ Operate -- "consume zeebe-records" --> Kafka
+ BIM -- "produce bim.processed" --> Kafka
+ Drawings -- "produce drawings.uploaded" --> Kafka
+ Process -- "consume processing.jobs" --> Kafka
+ Compare -- "consume drawings.uploaded" --> Kafka
+ Inspect -- "produce inspect.events" --> Kafka
+ Issues -- "consume inspect.events" --> Kafka
+ Remarks -- "produce remarks.events" --> Kafka
+ Reviews -- "consume remarks.events" --> Kafka
+
+ %% ===== RabbitMQ (work queues) =====
+ FaaS -- "consume tasks.*" --> RMQ
+ Flows -- "publish tasks.*" --> RMQ
+ Process -- "publish jobs" --> RMQ
+ Mapper -- "consume tile.jobs" --> RMQ
+ XSection -- "consume xs.jobs" --> RMQ
+ Stamp -- "consume sign.jobs" --> RMQ
+ Camunda -- "consume bpm.tasks" --> RMQ
+
+ %% ===== Межсервисные REST маршруты =====
+ PM -- "REST" --> Projects
+ PM -- "REST" --> Contracts
+ PM -- "REST" --> Resources
+ Projects -- "REST" --> Workspaces
+ Contracts -- "REST" --> Resources
+ Inspect -- "REST" --> Checklists
+ Inspect -- "REST" --> Issues
+ Issues -- "REST" --> Remarks
+ Reviews -- "REST" --> RFI
+ Reviews -- "REST" --> Prescr
+ RFI -- "REST" --> DocLink
+ DocLink --> Docs
+ DocLink --> CDE
+ CDE -- "REST" --> Docs
+ CDE -- "REST" --> Drawings
+ CDE -- "REST" --> BIM
+ Transmittal -- "REST" --> CDE
+ Transmittal -- "REST" --> Docs
+ Drawings -- "REST" --> Compare
+ Drawings -- "REST" --> Stamp
+ Measure -- "REST" --> Mapper
+ Mapper -- "REST" --> XSection
+ XSection --> Process
+ BIM -- "REST" --> Process
+ Notes -- "REST" --> DocLink
+ Flows -- "trigger" --> FaaS
+ Flows -- "start" --> Camunda
+ Camunda -- "callback" --> Flows
+ EAV -- "schemas" --> Django
+ MsgHub -- "deliver email/push" --> Subs
%% ===== AuthN / AuthZ =====
- ExampleApp -. "validate JWT
JWKS" .-> Keycloak
- Camunda -. "validate JWT
JWKS" .-> Zitadel
- Operate -. "OIDC login" .-> Zitadel
+ Django -. "OIDC validate" .-> Keycloak
+ CI -. "OIDC login" .-> Keycloak
+ PM -. "JWT" .-> Keycloak
+ Camunda -. "JWT" .-> Zitadel
+ Operate -. "OIDC" .-> Zitadel
Dashboard -. "OIDC" .-> Keycloak
+ BIM -. "JWT" .-> Keycloak
+ CDE -. "JWT" .-> Keycloak
+ Docs -. "JWT" .-> Keycloak
- %% ===== Service mesh observability =====
- Camunda -. "envoy sidecar
metrics" .-> Pilot
- ExampleApp -. "envoy sidecar
metrics" .-> Pilot
- Operate -. "envoy sidecar" .-> Pilot
+ %% ===== Service mesh sidecar metrics =====
+ CI -. "envoy" .-> Pilot
+ Django -. "envoy" .-> Pilot
+ Camunda -. "envoy" .-> Pilot
+ BIM -. "envoy" .-> Pilot
+ Flows -. "envoy" .-> Pilot
+
+ %% ===== Стили подгрупп бизнес-сервисов =====
+ style CORE fill:#fdf2f8,stroke:#ec4899,stroke-width:1px
+ style DOCS fill:#fdf2f8,stroke:#ec4899,stroke-width:1px
+ style QUALITY fill:#fdf2f8,stroke:#ec4899,stroke-width:1px
+ style FIELD fill:#fdf2f8,stroke:#ec4899,stroke-width:1px
+ style PMG fill:#fdf2f8,stroke:#ec4899,stroke-width:1px
%% ===== Стили =====
classDef ext fill:#1f2937,stroke:#9ca3af,stroke-width:2px,color:#f9fafb