Files
contracts/History/architecture/block-diagram.md
T

70 lines
2.1 KiB
Markdown

# Блок-схема сервиса Contracts
## Полный пайплайн обработки допника
```mermaid
flowchart TD
A["📄 POST /api/contracts/{id}/supplements\n(file.docx)"] --> B["💾 documents.original_bytes\n(status=uploaded)"]
B --> C["🔧 parser.parse()\nbytes → elements JSON"]
C --> D["📝 textify.to_text()\nelements → линейный текст"]
D --> E["📄 documents.parsed_text\n(status=parsed)"]
E --> F["🤖 extractor.extract()\nтекст → LLM → строки JSON"]
F --> G["📊 spec_rows\n(row_num, name, price, qty, sum, date)"]
G --> H["🔄 differ.diff()\nсравнение с пред. допником"]
H --> I["📋 spec_history\n(added/changed/deleted/unchanged)"]
I --> J["✅ ответ API\n{rows, diff_summary}"]
```
## Архитектура слоёв
```mermaid
flowchart LR
subgraph "Внешний мир"
USER["👤 Пользователь"]
end
subgraph "Flask"
APP["app.py\nсборка"]
API["api.py\n/contracts"]
UPL["upload.py\n/upload"]
TEST["test_routes.py\n/test"]
end
subgraph "Бизнес-логика"
PARSER["parser.py\nbytes→JSON"]
TEXTIFY["textify.py\nJSON→текст"]
LLM["llm_client.py\nHTTP/2→LLM"]
EXTRACT["extractor.py\nтекст→строки"]
DIFF["differ.py\nсравнение"]
end
subgraph "Данные"
DB["db.py\nconnect/query"]
SCH["schema.py\nDDL"]
PG[("PostgreSQL\n5 таблиц")]
end
USER -->|"POST docx"| API
USER -->|"GET /test"| TEST
API --> PARSER
PARSER --> TEXTIFY
TEXTIFY --> EXTRACT
EXTRACT --> LLM
EXTRACT --> DIFF
API --> DB
DB --> PG
APP --> SCH
SCH --> DB
```
## Цепочка данных
```mermaid
flowchart LR
A["docx\n(байты)"] -->|parser| B["elements\nJSON"]
B -->|textify| C["текст\nстрока"]
C -->|extractor + LLM| D["spec_rows\nJSON"]
D -->|differ| E["changes\nJSON"]
E -->|api| F["ответ\nпользователю"]
```