Compare commits

..

2 commits

Author SHA1 Message Date
01b36f623e Merge pull request 'fix(tradein): срок жизни оценки 24ч → 720ч — отчёты исчезали раньше, чем ими успевали воспользоваться' (#3133) from fix/tradein-retention-720h into main
All checks were successful
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / build-frontend (push) Successful in 2m29s
Deploy Trade-In / test (push) Successful in 4m3s
Deploy Trade-In / build-backend (push) Successful in 1m5s
Deploy Trade-In / deploy (push) Successful in 1m29s
Deploy Trade-In / deploy-status (push) Successful in 5s
Deploy Trade-In / perimeter-smoke (push) Successful in 13s
2026-08-27 10:51:15 +00:00
bot-backend
34f8f506c0 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
27.08, пилот «Практика». У пользователя ВСЕ 75 оценок оказались
недоступны, включая позавчерашние: список показывал их со статусом
«устарел», а открытие отдавало «Ссылка устарела, отчёт удалён или у вас нет
к нему доступа». Выглядело как пропажа данных — на деле строки целы, истёк
expires_at = created_at + 24ч.

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

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

Настройка одна на оба контура, и это осознанно НЕ маскируется: юридический
мотив 152-ФЗ относится к анонимному B2C, разделение сроков по контурам —
отдельная задача. Здесь поднят общий срок, а не сделан вид, что контуры уже
разведены.
2026-08-27 13:31:40 +03:00

View file

@ -980,7 +980,24 @@ class Settings(BaseSettings):
# "сессию" клиента, не архив); юридически обоснованный срок хранения адреса # "сессию" клиента, не архив); юридически обоснованный срок хранения адреса
# физлица для анонимного B2C — решение не инженера, см. итоговый комментарий # физлица для анонимного B2C — решение не инженера, см. итоговый комментарий
# к задаче. ENV: TRADE_IN_ESTIMATE_RETENTION_HOURS. # к задаче. ENV: TRADE_IN_ESTIMATE_RETENTION_HOURS.
trade_in_estimate_retention_hours: int = 24 #
# 27.08 — поднято 24 → 720 (30 суток) по решению владельца. Прод-факт:
# у пилота «Практика» ВСЕ 75 оценок оказались недоступны, включая
# позавчерашние, и это выглядело как пропажа данных. Строки были целы —
# истёк `expires_at`, и карточка отдавала «Ссылка устарела».
#
# Обоснование «оценка живёт сессию клиента, не архив» писалось под
# анонимный B2C. «Практика» — пилот-юрлицо: менеджер возвращается к
# оценке через день-два, когда клиент перезванивает. Для такого сценария
# суточный срок означает, что работа исчезает раньше, чем её успевают
# использовать.
#
# NB: настройка ОДНА на оба контура. Юридический мотив 152-ФЗ (хранение
# адреса физлица) относится к анонимному B2C, и для него 30 суток —
# решение не инженерное. Разделение сроков по контурам — отдельная
# задача; здесь сознательно поднят общий срок, а не сделан вид, что
# контуры уже разведены.
trade_in_estimate_retention_hours: int = 720
# trade_in_leads.expires_at TTL (дни от момента создания, migration 231). # trade_in_leads.expires_at TTL (дни от момента создания, migration 231).
# У trade_in_leads раньше вообще не было срока хранения — лид (телефон + # У trade_in_leads раньше вообще не было срока хранения — лид (телефон +