Files
MAX/docs/clpr-vs-sprf-schema-diff.md
root 7cd3ccf21c MAX bot + n8n: webhook, нормализация, меню, доки, схемы БД
- register_max_webhook.py, fetch_schema.py
- n8n-code-node-max-normalize.js (max_id, callback из callback.user, contact из vcf_info)
- n8n-code-add-menu-buttons.js (меню с callback, request_contact, Главное меню)
- docs: max-webhook, max-curl-http-request, max-api (форматы, кнопки, контакт), clpr vs sprf
- README, SITUATION, схемы sprf_ и clpr_, .gitignore

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 09:23:51 +03:00

355 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Сравнение структуры таблиц clpr_ и sprf_
## 1. Состав: что только в одной схеме
| Только в **sprf_** | Только в **clpr_** |
|-------------------|--------------------|
| sprf_court_decisions (файлы судебных решений, OCR, вектор, nsfw, CRM) | clpr_menu_commands (команды меню: command, action, reply_text, menu_id) |
| sprf_court_decisions_view (view поверх court_decisions) | — |
Остальные таблицы есть в обеих схемах (с разными именами префикса).
---
## 2. Общие таблицы — отличия по колонкам и типам
### chat_messages
| Аспект | sprf | clpr |
|--------|------|------|
| sent_at | без default | default `now()` |
Остальные колонки совпадают.
---
### claim_documents
| Аспект | sprf | clpr |
|--------|------|------|
| Колонки | Базовый набор: id, claim_id, field_name, file_id, uploaded_at | Расширенный: + file_name, original_file_name, file_hash, ocr_status, ocr_processed_at, ocr_error, document_type, document_label, match_score, match_status, match_reason, match_checked_at, document_summary |
| id | uuid, NO, без default в схеме | uuid, NO, gen_random_uuid() |
| uploaded_at | без default | default now() |
**Итог:** в clpr заложена полноценная модель документов с OCR, матчингом и саммари; в sprf — минимальный набор под «файл к заявке».
---
### claim_statuses, claim_types
Структура совпадает (code, description).
---
### claims
| Аспект | sprf | clpr |
|--------|------|------|
| id | character varying, NO | uuid, NO, gen_random_uuid() |
| Доп. поля | — | expires_at, contact_id, phone |
| created_at / updated_at | без default в схеме | default now() |
Остальные поля (user_id, type_code, status_code, payload, session_token, unified_id, telegram_id, channel, is_confirmed) совпадают.
---
### conversation_state
Структура совпадает (user_id, current_step, data, updated_at).
---
### dialog_history_tg
| Аспект | sprf | clpr |
|--------|------|------|
| claim_id | character varying | uuid |
| created_at | default now() | default now() |
Остальные колонки те же.
---
### document_embeddings
| Аспект | sprf | clpr |
|--------|------|------|
| Модель | Чанки документа: document_id, chunk_index, embedding | Один объект на запись: id, embedding, text, metadata |
| Колонки | document_id, chunk_index, embedding | id, embedding, text, metadata |
Разная семантика: sprf — эмбеддинги чанков с привязкой к документу; clpr — эмбеддинг + текст + метаданные без явного document_id/chunk_index.
---
### documents
| Аспект | sprf | clpr |
|--------|------|------|
| id | uuid, NO, без default в схеме | uuid, NO, gen_random_uuid() |
| created_at | без default | default now() |
Остальное совпадает (source, content, metadata).
---
### operators
Структура совпадает. В clpr у created_at указан default now(), в sprf в схеме default не показан.
---
### sessions
Структура совпадает (id uuid, user_id, session_token, created_at, last_activity, expires_at). В clpr created_at = now().
---
### user_accounts
Структура совпадает (user_id, channel, channel_user_id).
---
### users
| Аспект | sprf | clpr |
|--------|------|------|
| Доп. поле | — | contact_data_confirmed_at |
| created_at / updated_at | без default в схеме | default now() |
Остальное совпадает (universal_id, unified_id, phone).
---
### users_tg
Набор полей совпадает. В clpr у created_at и updated_at default now(); в sprf в схеме default не показан.
---
### wizard_questions
Структура совпадает (claim_type, step_key, question_text, answer_type, step_order, options, is_required).
---
## 3. Краткая сводка
- **Только sprf:** судебные решения (court_decisions + view) — загрузка файлов, OCR, вектор, nsfw, CRM.
- **Только clpr:** меню команд (menu_commands).
- **clpr в среднем «богаче»:** в claims — uuid, expires_at, contact_id, phone; в claim_documents — OCR, матчинг, саммари; в users — contact_data_confirmed_at; чаще default now() на датах.
- **sprf.claims.id** — varchar, **clpr.claims.id** — uuid.
- **document_embeddings** устроены по-разному: sprf — по чанкам (document_id, chunk_index), clpr — id + text + metadata.
Если делать общий слой поверх двух схем (например, для MAX/Telegram), маппинг по именам таблиц 1:1, но нужно учитывать типы (claim_id, id в claims) и наличие/отсутствие полей (contact_id, phone, expires_at, OCR/match в claim_documents).
---
## 4. Детальное сравнение по полям (тип, NULL, default)
Для каждой общей таблицы: колонка | sprf тип / NULL / default | clpr тип / NULL / default | примечание.
### chat_messages
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|-------------|---------------------------------|----------------------------------|--------------|
| id | integer / NO / nextval | integer / NO / nextval | одинаково |
| claim_id | uuid / YES / — | uuid / YES / — | одинаково |
| from_user | boolean / YES / — | boolean / YES / — | одинаково |
| message_text| text / YES / — | text / YES / — | одинаково |
| file_id | text / YES / — | text / YES / — | одинаково |
| sent_at | timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
---
### claim_documents
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|--------------------|-----------------------------|-----------------------------|-----------------|
| id | uuid / NO / — | uuid / NO / gen_random_uuid() | разный default |
| claim_id | character varying / YES / — | character varying / YES / — | одинаково |
| field_name | text / YES / — | text / YES / — | одинаково |
| file_id | text / YES / — | text / YES / — | одинаково |
| uploaded_at | timestamptz / YES / — | timestamptz / YES / now() | разный default |
| file_name | — | text / YES / — | только clpr |
| original_file_name | — | text / YES / — | только clpr |
| file_hash | — | varchar(64) / YES / — | только clpr |
| ocr_status | — | varchar(20) / YES / 'pending'| только clpr |
| ocr_processed_at | — | timestamptz / YES / — | только clpr |
| ocr_error | — | text / YES / — | только clpr |
| document_type | — | varchar(50) / YES / — | только clpr |
| document_label | — | varchar(255) / YES / — | только clpr |
| match_score | — | integer / YES / — | только clpr |
| match_status | — | varchar(20) / YES / 'pending'| только clpr |
| match_reason | — | text / YES / — | только clpr |
| match_checked_at | — | timestamp / YES / — | только clpr |
| document_summary | — | text / YES / — | только clpr |
---
### claim_statuses
| Колонка | sprf | clpr | Примечание |
|-------------|------|------|------------|
| code | text / NO / — | text / NO / — | одинаково |
| description | text / YES / — | text / YES / — | одинаково |
---
### claim_types
| Колонка | sprf | clpr | Примечание |
|-------------|------|------|------------|
| code | text / NO / — | text / NO / — | одинаково |
| description | text / YES / — | text / YES / — | одинаково |
---
### claims
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|---------------|-----------------------------|-----------------------------|-----------------|
| id | **character varying** / NO / — | **uuid** / NO / gen_random_uuid() | разный тип и default |
| session_token | varchar / YES / — | varchar / YES / — | одинаково |
| unified_id | varchar / YES / — | varchar / YES / — | одинаково |
| telegram_id | bigint / YES / — | bigint / YES / — | одинаково |
| channel | text / YES / — | text / YES / — | одинаково |
| user_id | integer / YES / — | integer / YES / — | одинаково |
| type_code | text / YES / — | text / YES / — | одинаково |
| status_code | text / YES / — | text / YES / — | одинаково |
| policy_number | text / YES / — | text / YES / — | одинаково |
| payload | jsonb / YES / — | jsonb / YES / — | одинаково |
| is_confirmed | boolean / YES / false | boolean / YES / false | одинаково |
| created_at | timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
| updated_at | timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
| expires_at | — | timestamptz / YES / — | только clpr |
| contact_id | — | text / YES / — | только clpr |
| phone | — | text / YES / — | только clpr |
---
### conversation_state
| Колонка | sprf | clpr | Примечание |
|--------------|------|------|------------|
| user_id | integer / NO / — | integer / NO / — | одинаково |
| current_step | text / YES / — | text / YES / — | одинаково |
| data | jsonb / YES / — | jsonb / YES / — | одинаково |
| updated_at | timestamptz / YES / — | timestamptz / YES / — | одинаково |
---
### dialog_history_tg
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|---------------|-----------------------------|-----------------------------|----------------|
| id | integer / NO / nextval | integer / NO / nextval | одинаково |
| telegram_id | bigint / YES / — | bigint / YES / — | одинаково |
| role | varchar / YES / — | varchar / YES / — | одинаково |
| message | text / YES / — | text / YES / — | одинаково |
| created_at | timestamptz / YES / now() | timestamptz / YES / now() | одинаково |
| session_token | varchar / YES / — | varchar / YES / — | одинаково |
| claim_id | **character varying** / YES / — | **uuid** / YES / — | разный тип |
| message_type | text / YES / — | text / YES / — | одинаково |
| payload | jsonb / YES / — | jsonb / YES / — | одинаково |
| tg_message_id | bigint / YES / — | bigint / YES / — | одинаково |
| tg_update_id | bigint / YES / — | bigint / YES / — | одинаково |
---
### document_embeddings
| Колонка | sprf | clpr | Примечание |
|--------------|------|------|------------|
| document_id | uuid / YES / — | — | только sprf (модель по чанкам) |
| chunk_index | integer / YES / — | — | только sprf |
| embedding | USER-DEFINED / YES / — | USER-DEFINED / YES / — | одинаково |
| id | — | uuid / YES / — | только clpr |
| text | — | text / YES / — | только clpr |
| metadata | — | jsonb / YES / — | только clpr |
Разная модель: sprf — чанки документа; clpr — запись с id, text, metadata.
---
### documents
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|------------|-----------------------------|-----------------------------|--------------|
| id | uuid / NO / — | uuid / NO / gen_random_uuid() | разный default |
| source | text / YES / — | text / YES / — | одинаково |
| content | text / YES / — | text / YES / — | одинаково |
| metadata | jsonb / YES / — | jsonb / YES / — | одинаково |
| created_at | timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
---
### operators
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|------------|-----------------------------|-----------------------------|--------------|
| id | integer / NO / nextval | integer / NO / nextval | одинаково |
| telegram_id| bigint / YES / — | bigint / YES / — | одинаково |
| name | text / YES / — | text / YES / — | одинаково |
| is_active | boolean / YES / — | boolean / YES / — | одинаково |
| created_at | timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
---
### sessions
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|----------------|-----------------------------|-----------------------------|--------------|
| id | uuid / NO / gen_random_uuid() | uuid / NO / gen_random_uuid() | одинаково |
| user_id | integer / YES / — | integer / YES / — | одинаково |
| session_token | varchar / YES / — | varchar / YES / — | одинаково |
| created_at | timestamptz / YES / now() | timestamptz / YES / now() | одинаково |
| last_activity | timestamptz / YES / — | timestamptz / YES / — | одинаково |
| expires_at | timestamptz / YES / — | timestamptz / YES / — | одинаково |
---
### user_accounts
| Колонка | sprf | clpr | Примечание |
|----------------|------|------|------------|
| id | integer / NO / nextval | integer / NO / nextval | одинаково |
| user_id | integer / YES / — | integer / YES / — | одинаково |
| channel | text / YES / — | text / YES / — | одинаково |
| channel_user_id| text / YES / — | text / YES / — | одинаково |
---
### users
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|-----------|-----------------------------|-----------------------------|--------------|
| id | integer / NO / nextval | integer / NO / nextval | одинаково |
| universal_id | uuid / YES / — | uuid / YES / — | одинаково |
| unified_id| varchar / YES / — | varchar / YES / — | одинаково |
| phone | varchar / YES / — | varchar / YES / — | одинаково |
| created_at| timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
| updated_at| timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
| contact_data_confirmed_at | — | timestamptz / YES / — | только clpr |
---
### users_tg
| Колонка | sprf (тип / NULL / default) | clpr (тип / NULL / default) | Примечание |
|---------------|-----------------------------|-----------------------------|--------------|
| telegram_id | bigint / NO / — | bigint / NO / — | одинаково |
| phone_number | varchar / YES / — | varchar / YES / — | одинаково |
| first_name_tg | varchar / YES / — | varchar / YES / — | одинаково |
| last_name_tg | varchar / YES / — | varchar / YES / — | одинаково |
| username | varchar / YES / — | varchar / YES / — | одинаково |
| language_code | varchar / YES / — | varchar / YES / — | одинаково |
| is_premium | boolean / YES / — | boolean / YES / — | одинаково |
| unified_id | varchar / YES / — | varchar / YES / — | одинаково |
| first_name, last_name, middle_name | varchar / YES / — | varchar / YES / — | одинаково |
| birth_date, birth_place, inn, address, email | varchar / YES / — | varchar / YES / — | одинаково |
| is_confirmed | boolean / YES / false | boolean / YES / false | одинаково |
| created_at | timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
| updated_at | timestamptz / YES / — | timestamptz / YES / **now()** | разный default |
---
### wizard_questions
| Колонка | sprf | clpr | Примечание |
|---------------|------|------|------------|
| id | integer / NO / nextval | integer / NO / nextval | одинаково |
| claim_type | text / YES / — | text / YES / — | одинаково |
| step_key | text / YES / — | text / YES / — | одинаково |
| question_text | text / YES / — | text / YES / — | одинаково |
| answer_type | text / YES / — | text / YES / — | одинаково |
| step_order | integer / YES / — | integer / YES / — | одинаково |
| options | jsonb / YES / — | jsonb / YES / — | одинаково |
| is_required | boolean / YES / — | boolean / YES / — | одинаково |