gendesign/tradein-mvp/backend/data/sql/296_fns_legal_entity_facts.sql
lekss361 e0bef636e6
All checks were successful
Deploy Trade-In / changes (push) Successful in 12s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 4m17s
Deploy Trade-In / build-backend (push) Successful in 1m3s
Deploy Trade-In / deploy (push) Successful in 7m11s
Deploy Trade-In / deploy-status (push) Successful in 1s
Deploy Trade-In / perimeter-smoke (push) Successful in 11s
feat(tradein): bulk-дампы открытых данных ФНС по юрлицам + lookup по ИНН (#3429)
2026-09-08 22:29:10 +00:00

71 lines
6.2 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 296_fns_legal_entity_facts.sql
-- ФНС open data по юрлицам: доходы/расходы, среднесписочная численность, недоимка,
-- спецрежимы (issue: bulk-дампы ФНС → lookup по ИНН, PR "feat/fns-legal-entities").
--
-- ПОЧЕМУ ЭТОТ ИСТОЧНИК
-- Открытых данных ЕГРН по правообладателям-физлицам не существует (218-ФЗ ст. 62).
-- По ЮРЛИЦАМ данные открыты, лицензия ФНС (nalog.gov.ru/opendata) разрешает
-- переработку и перераспределение. Наборы (все по маске 7707329152-<slug>):
-- revexp (доходы и расходы), sshr2019 (среднесписочная численность), debtam
-- (недоимка и задолженность), snr (спецрежимы). ЕГРЮЛ (адрес/ОКВЭД/учредители) в
-- этих наборах НЕТ — только ИНН + наименование + показатели набора.
--
-- ЭТОТ PR — ТОЛЬКО ЗАГРУЗКА И LOOKUP ПО ИНН. Потребителя (скоринг застройщика/УК в
-- оценке) здесь нет и не планируется в рамках этого PR — подключение отдельной
-- задачей, если решение об этом будет принято отдельно.
--
-- ФОРМА ХРАНЕНИЯ: одна узкая long-format таблица на все 4 набора, а не таблица на
-- набор. Наборы различаются только НАБОРОМ показателей (атрибутов XML), сама форма
-- «ИНН + показатель + период + значение» у всех одинаковая — long-format не плодит
-- 4 почти идентичные таблицы и не требует миграции при добавлении 5-го набора в
-- будущем (не в этом PR).
--
-- PRIMARY KEY (inn, dataset, series, period), А НЕ (inn, series, period) — так
-- предлагал скелет задачи, но series здесь = имя XML-атрибута источника, и без
-- dataset в ключе одноимённые атрибуты в двух разных наборах молча схлопнутся в
-- одну строку (мы НЕ проверяли по XSD, что имена атрибутов между revexp/sshr2019/
-- debtam/snr не пересекаются, поэтому закладываемся на худший случай).
--
-- Идемпотентно: CREATE TABLE/INDEX IF NOT EXISTS. lock_timeout — на случай, если
-- таблицы уже существуют от прогона на другой ветке (ALTER не планируется, но
-- дисциплина сохраняется).
BEGIN;
SET LOCAL lock_timeout = '5s';
CREATE TABLE IF NOT EXISTS fns_legal_entity_facts (
inn text NOT NULL,
dataset text NOT NULL, -- 'revexp' | 'sshr2019' | 'debtam' | 'snr'
series text NOT NULL, -- имя показателя (атрибут XML источника)
period date NOT NULL, -- период показателя; см. fns_opendata_loader.py
value numeric NOT NULL,
org_name text, -- наименование юрлица на момент загрузки (не ЕГРЮЛ, provenance)
loaded_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (inn, dataset, series, period)
);
COMMENT ON TABLE fns_legal_entity_facts IS
'ФНС opendata (nalog.gov.ru/opendata/7707329152-*) по юрлицам: показатели наборов '
'revexp/sshr2019/debtam/snr. Long-format: одна строка = один показатель одного ИНН '
'за один период. ЕГРЮЛ-данных (адрес/ОКВЭД/учредители) здесь нет. Без потребителя '
'на момент создания — см. app/services/fns_lookup.py.';
COMMENT ON COLUMN fns_legal_entity_facts.inn IS 'ИНН юрлица (10 цифр), как в XML источника';
COMMENT ON COLUMN fns_legal_entity_facts.dataset IS 'slug набора ФНС opendata: revexp/sshr2019/debtam/snr';
COMMENT ON COLUMN fns_legal_entity_facts.series IS 'имя показателя = имя XML-атрибута источника (не переименовываем)';
COMMENT ON COLUMN fns_legal_entity_facts.period IS 'период показателя: дата публикации набора (см. fns_dataset_versions.published_on)';
COMMENT ON COLUMN fns_legal_entity_facts.value IS 'значение показателя как есть из XML (numeric — источник не различает валюту/единицы в атрибуте)';
COMMENT ON COLUMN fns_legal_entity_facts.org_name IS 'наименование юрлица на момент загрузки, provenance only — НЕ авторитетный источник (используй ЕГРЮЛ)';
CREATE TABLE IF NOT EXISTS fns_dataset_versions (
dataset text PRIMARY KEY, -- 'revexp' | 'sshr2019' | 'debtam' | 'snr'
file_url text NOT NULL, -- прямая ссылка на .zip, снятая со страницы каталога
published_on date, -- дата публикации, распарсенная из имени файла (data-YYYYMMDD-...)
loaded_at timestamptz NOT NULL DEFAULT now()
);
COMMENT ON TABLE fns_dataset_versions IS
'Последняя загруженная версия каждого набора ФНС opendata — гейт от перекачки '
'уже загруженной версии (URL меняется с каждой публикацией, дата в имени файла).';
COMMENT ON COLUMN fns_dataset_versions.file_url IS 'резолвится динамически со страницы каталога набора — НЕ хардкодить, протухает';
COMMENT ON COLUMN fns_dataset_versions.published_on IS 'дата публикации из имени файла (data-YYYYMMDD-structure-...)';
COMMIT;