# Authority S1 — методология, ограничения и исправления

## Назначение и grain

Этот frozen pack описывает текущий публичный Company↔Hotel graph HotGrade только агрегатами. Базовый grain
для регионов и концентрации — одна текущая подтверждённая публичная связь Company↔Hotel; для статусов — одна
Company identity. Ни одна строка CSV не является строкой компании или гостиницы.

Freeze выполнен пятью SQL-чтениями в одной `REPEATABLE READ, READ ONLY` транзакции. Wall-clock generation time
не входит в файлы: cutoff берётся из источников и public-document state, поэтому неизменный snapshot даёт
byte-identical pack.

## Источники и даты

- Identity: `ЕГРЮЛ/ЕГРИП: публичный реестровый срез юридических лиц и ИП`; as-of `2026-06-22T13:55:27.092428Z`.
- Relation: `ФСА: публичный реестр классифицированных средств размещения`; coverage от
  `2026-06-09T00:00:00Z` до
  `2026-06-13T00:00:00Z`.
- Eligibility: `company_eligibility.v1`; evaluated as-of
  `2026-08-12T22:05:53.503966Z`.
- Truthful document state: `company_public_document.v1`; public lastmod as-of
  `2026-08-12T22:03:05.200001Z`; source snapshot as-of
  `2026-07-19T03:49:03.760461Z`.

## Reconciliation

- Canonical identities: 38 533.
- Current exact source-bound relations: 37 671.
- Relations in the public portfolio projection: 37 670.
- Eligible Company documents / sitemap set: 25 560.
- Current relations excluded by public property gates: 1.
- Source INNs excluded by checksum: 4.

Eligibility reason counts overlap and therefore must not be summed as mutually exclusive cohorts:

- `inactive_company`: 5 866
- `insufficient_public_facts`: 2 701
- `missing_public_document_state`: 5 816
- `missing_valid_registration_number`: 5 518

## Interpretation limits

- A relation means the legal entity named in the dated FSA registry snapshot. It does not prove ownership of
  the building, a management contract, brand control or the ultimate beneficiary.
- `region` is the public Hotel region, not the legal-registration region of the Company. A Company can occur in
  several region rows; summing regional `company_count` does not produce the unique national Company count.
- Relation-count strata describe graph-link concentration only, not revenue, rooms, market share, authority,
  traffic, quality or causal influence. Top-N/HHI/percentiles are intentionally omitted: they would add
  pseudoprecision without row-level publication and made the production read unnecessarily expensive.
- Eligibility is the backend publication decision at the frozen source cutoff. Noneligible identities remain in
  the status aggregate but never become public Company URLs through this pack.
- The pack is cross-sectional. It cannot support trend, lift or causal claims.

## Privacy and named-entity firewall

Only generic corpus aggregates are exported. There is no named-entity branch or exception. CSV schemas reject
ИНН/ОГРН/ОГРНИП, company/hotel IDs, names, slugs, addresses, row-level URLs, contacts, beneficiary/management
names, lead fields and raw payloads. No mapping can be used for outreach.

## Corrections

Correction requests for public facts use `/contacts#data-correction`. A correction changes this pack only after
the underlying source-bound public graph and document state are re-evaluated; this frozen pack is never edited
in place.

## Reproduction

Run `ops/seo_authority_s1_freeze.py --output-dir <empty-directory>` with production `DATABASE_URL`. The exporter
fails closed on anchor drift, non-read-only execution, set mismatch, duplicate evidence/targets, invalid source,
unsafe CSV schema/value or aggregate reconciliation failure. `05_REPRODUCIBLE_READ_QUERIES.sql` contains the
same five reads for independent inspection.
