fix(tradein): срок жизни оценки 24ч → 720ч — отчёты исчезали раньше, чем ими успевали воспользоваться #3133

Merged
lekss361 merged 1 commit from fix/tradein-retention-720h into main 2026-08-27 10:51:16 +00:00
Owner

По решению владельца, инцидент 27.08 с пилотом «Практика».

Что было

У пользователя все 75 оценок оказались недоступны, включая позавчерашние. Список «Предыдущие оценки» показывал их со статусом «устарел», открытие отдавало «Ссылка устарела, отчёт удалён или у вас нет к нему доступа». Выглядело как пропажа данных.

Данные целы — истёк expires_at = created_at + 24ч. Проверено по базе:

оценок у praktika:            75
из них с истёкшим сроком:     75
всего в базе:               1119 (144 за последние 30 дней)

Совпадение двух вещей и создало впечатление аварии: сутки не работал вход (упало право CONNECT на базу auth), и ровно за это время истекли последние живые отчёты. Люди зашли — и увидели, что не открывается ничего.

Почему 24 часа были неверны здесь

Обоснование в коде честное и осознанное: «оценка живёт сессию клиента, не архив», плюс юридический мотив 152-ФЗ — хранение адреса физлица для анонимного B2C.

Но «Практика» — не анонимный B2C, а пилот-юрлицо: менеджер возвращается к оценке через день-два, когда клиент перезванивает. Для такого сценария суточный срок означает, что работа исчезает раньше, чем её успевают использовать.

Что меняется

TRADE_IN_ESTIMATE_RETENTION_HOURS 24 → 720 (30 суток).

Настройка одна на оба контура, и это в комментарии не замаскировано: юридический мотив относится к анонимному B2C, а разделение сроков по контурам — отдельная задача. Здесь поднят общий срок, а не сделан вид, что контуры уже разведены.

Существующие записи

Правка действует только на новые оценки. Уже созданным продлил срок напрямую в базе — 990 строк (created_by IS NOT NULL, то есть авторизованные пилоты и сотрудники). Анонимные B2C-записи намеренно не тронуты: у их срока другое обоснование.

У praktika после продления открылось 29 оценок — остальные старше 30 дней и в новый срок не попадают по построению.

По решению владельца, инцидент 27.08 с пилотом «Практика». ## Что было У пользователя **все 75 оценок** оказались недоступны, включая позавчерашние. Список «Предыдущие оценки» показывал их со статусом «устарел», открытие отдавало «Ссылка устарела, отчёт удалён или у вас нет к нему доступа». Выглядело как пропажа данных. Данные целы — истёк `expires_at = created_at + 24ч`. Проверено по базе: ``` оценок у praktika: 75 из них с истёкшим сроком: 75 всего в базе: 1119 (144 за последние 30 дней) ``` **Совпадение двух вещей и создало впечатление аварии:** сутки не работал вход (упало право `CONNECT` на базу `auth`), и ровно за это время истекли последние живые отчёты. Люди зашли — и увидели, что не открывается ничего. ## Почему 24 часа были неверны здесь Обоснование в коде честное и осознанное: «оценка живёт сессию клиента, не архив», плюс юридический мотив 152-ФЗ — хранение адреса физлица для **анонимного B2C**. Но «Практика» — не анонимный B2C, а пилот-юрлицо: менеджер возвращается к оценке через день-два, когда клиент перезванивает. Для такого сценария суточный срок означает, что работа исчезает раньше, чем её успевают использовать. ## Что меняется `TRADE_IN_ESTIMATE_RETENTION_HOURS` 24 → 720 (30 суток). **Настройка одна на оба контура, и это в комментарии не замаскировано:** юридический мотив относится к анонимному B2C, а разделение сроков по контурам — отдельная задача. Здесь поднят общий срок, а не сделан вид, что контуры уже разведены. ## Существующие записи Правка действует только на новые оценки. Уже созданным продлил срок напрямую в базе — **990 строк** (`created_by IS NOT NULL`, то есть авторизованные пилоты и сотрудники). Анонимные B2C-записи намеренно не тронуты: у их срока другое обоснование. У `praktika` после продления открылось **29 оценок** — остальные старше 30 дней и в новый срок не попадают по построению.
lekss361 added 1 commit 2026-08-27 10:45:01 +00:00
fix(tradein): срок жизни оценки 24ч → 720ч (30 суток) — отчёты исчезали раньше, чем ими успевали воспользоваться
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 13s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m50s
34f8f506c0
27.08, пилот «Практика». У пользователя ВСЕ 75 оценок оказались
недоступны, включая позавчерашние: список показывал их со статусом
«устарел», а открытие отдавало «Ссылка устарела, отчёт удалён или у вас нет
к нему доступа». Выглядело как пропажа данных — на деле строки целы, истёк
expires_at = created_at + 24ч.

Совпадение двух вещей и создало впечатление аварии: сутки не работал вход
(упало право CONNECT на базу auth), и ровно за это время истекли последние
живые отчёты. Люди зашли и увидели, что не открывается ничего.

Обоснование «оценка живёт сессию клиента, не архив» писалось под анонимный
B2C. «Практика» — пилот-юрлицо: менеджер возвращается к оценке через
день-два, когда клиент перезванивает. Суточный срок для такого сценария
означает, что работа исчезает раньше, чем её успевают использовать.

Настройка одна на оба контура, и это осознанно НЕ маскируется: юридический
мотив 152-ФЗ относится к анонимному B2C, разделение сроков по контурам —
отдельная задача. Здесь поднят общий срок, а не сделан вид, что контуры уже
разведены.
lekss361 merged commit 01b36f623e into main 2026-08-27 10:51:16 +00:00
lekss361 deleted branch fix/tradein-retention-720h 2026-08-27 10:51:16 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3133
No description provided.