fix(tradein): Avito listing_date extraction (3 формата) #601

Merged
Light1YT merged 1 commit from fix/avito-listing-date-extraction into main 2026-05-27 12:55:28 +00:00
Owner

Summary

Production reality: 100% Avito listings (9302/9302) имели listing_date=NULL. Regex matched только \d+ unit назад, но Avito SERP теперь использует 3 формата — нашли через audit query.

Поддерживаемые форматы

  1. Relative numeric (existing): 5 дней назад, 2 недели назад, 3 часа назад — без изменений
  2. Keyword shortcuts (new): сегодня в 12:30, вчера в 18:45, позавчера, только что
  3. Absolute (new): 18 мая, 5 июня в 12:30 — год inferred (текущий, с rollback на прошлый если month в будущем больше чем на 30 дней)

Tests

10/10 pass (4 existing + 6 new):

  • today/yesterday/day-before-yesterday/just-now keyword checks
  • absolute date recent month
  • absolute date future month → previous year

Ruff clean. No new deps.

Impact на linkage rate

Это прямо разблокирует #564 linkage rate. Сейчас /sales-vs-listings показывает median 0-5% linkage потому что 60% всех listings без даты (Avito 100% NULL, N1 100% NULL, Yandex 60% NULL). Без даты невозможно сопоставить с ДКП в окне [-180d, +30d].

После merge → следующий Avito sweep заполнит 9302 listings с listing_date. Existing rows будут backfilled при next periodic sweep (URL остался, can re-scrape).

Out of scope

  • N1 scraper тот же fix потребуется (~264 listings) — отдельный PR
  • Yandex Realty scraper improvement (40% → 90%) — отдельный PR
  • Backfill existing 9302 Avito NULL detail re-scrape — operation script

Refs #564.

## Summary Production reality: **100% Avito listings** (9302/9302) имели `listing_date=NULL`. Regex matched только `\d+ unit назад`, но Avito SERP теперь использует 3 формата — нашли через audit query. ## Поддерживаемые форматы 1. **Relative numeric** (existing): `5 дней назад`, `2 недели назад`, `3 часа назад` — без изменений 2. **Keyword shortcuts** (new): `сегодня в 12:30`, `вчера в 18:45`, `позавчера`, `только что` 3. **Absolute** (new): `18 мая`, `5 июня в 12:30` — год inferred (текущий, с rollback на прошлый если month в будущем больше чем на 30 дней) ## Tests 10/10 pass (4 existing + 6 new): - today/yesterday/day-before-yesterday/just-now keyword checks - absolute date recent month - absolute date future month → previous year Ruff clean. No new deps. ## Impact на linkage rate Это **прямо разблокирует #564 linkage rate**. Сейчас `/sales-vs-listings` показывает median 0-5% linkage потому что 60% всех listings без даты (Avito 100% NULL, N1 100% NULL, Yandex 60% NULL). Без даты невозможно сопоставить с ДКП в окне [-180d, +30d]. После merge → следующий Avito sweep заполнит 9302 listings с listing_date. Existing rows будут backfilled при next periodic sweep (URL остался, can re-scrape). ## Out of scope - N1 scraper тот же fix потребуется (~264 listings) — отдельный PR - Yandex Realty scraper improvement (40% → 90%) — отдельный PR - Backfill existing 9302 Avito NULL detail re-scrape — operation script Refs #564.
Light1YT added 1 commit 2026-05-27 12:55:26 +00:00
Real production state: **0/9302 (100%)** Avito listings имели NULL
listing_date. Audit показал regex matched только relative numeric
("5 дней назад") — Avito SERP сейчас использует:
- Keyword shortcuts «сегодня в 12:30», «вчера в 18:45», «позавчера», «только что»
- Absolute «18 мая», «5 июня в 12:30» (year inferred — current, или
  rollback к прошлому году если month в будущем больше чем на 30d)

Changes:
- Expand _parse_relative_date():
  * keyword check first (без \d+ regex match)
  * relative numeric (existing) — без изменений
  * absolute date regex с _RU_MONTHS dict + roll-back на prev year heuristic

Tests: 10/10 pass (4 existing + 6 new). Ruff clean.

Impact: 9302 Avito listings + new daily scrapes теперь будут иметь
listing_date. Это **прямо повысит linkage rate в /sales-vs-listings**
(PR K) с current ~5% до 30%+ (теоретически до 80% при listing_date
плотности).

Existing 9302 NULL — будут пересобраны при следующем full sweep после
deploy. Backfill detail page для each — отдельный operation скрипт
(out of scope, можно через docker exec ad-hoc).

Refs #564 (linkage rate improvement).
Light1YT merged commit f5c87201f1 into main 2026-05-27 12:55:28 +00:00
Light1YT deleted branch fix/avito-listing-date-extraction 2026-05-27 12:55:28 +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#601
No description provided.