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
71 lines
6.2 KiB
PL/PgSQL
71 lines
6.2 KiB
PL/PgSQL
-- 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;
|