- 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>
355 lines
20 KiB
Markdown
355 lines
20 KiB
Markdown
# Сравнение структуры таблиц 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 / — | одинаково |
|