bdbf5f415c
Слой A (requisites.py): если ИНН нет на главной сайта — ищем страницы реквизитов/политики конфиденциальности/лицензии/контактов и достаём ИНН оттуда (по 152-ФЗ ИНН обязан быть на «Политике»). Надёжно, точно. Слой B (dadata.enrich_by_name): если ИНН так и нет — ищем в ДаДате по названию+городу с защитой best_match (только действующие с совпадением города). Директор по названию ВСЕГДА помечается «проверьте» (совпадение может быть чужой фирмой — напр. Чудо Доктор→Аптека Чудо Доктор). cities.py: слаг города (латиница, для 2ГИС) → русское имя (для ДаДаты). Реквизит-страницы тянем только быстрым requests (без медленного xfetch). Слой C (бесплатные порталы по телефону) отклонён — проверен через xfetch, контроль провалился, отдаётся нестабильно. Проверено живьём: слой A дал ИНН+ФИО Доброму доктору, Дентал Фэнтези, Белгравии и др. со своих сайтов; слой B — Дантистофф/Медлайн/СМ-Стоматология с пометкой. 61 тест зелёный. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>