Files
coopops 52a7911ed5 [989-8][@ant] feat(reports): клиентский экспорт формы в PDF + убрать пустой PDF-бланк и XSD из UI
Бухгалтеру нужен заполненный документ для просмотра, а не пустой бланк.
Раньше кнопка «PDF» скачивала печатную форму без данных — бесполезно;
XSD вообще не нужен ни председателю, ни бухгалтеру.

Стало:
- html2pdf.js конвертирует отрендеренную `.printable-form` (Vue) в PDF на
  клиенте. Две кнопки в диалоге: «Для отправки (XML)» + «Для просмотра
  (PDF заполненный)»
- Имя файла: <тип>-<год>[-q<период>].pdf

Удалено мёртвое:
- Backend: ReportStandardsService + downloadReportXsd/BlankPdf резолверы +
  DTO ReportXsdFile/ReportBlankFile
- SDK: queries/selectors для тех же
- Frontend: downloadXsd/downloadBlankPdf из store/api/types
- Бланки в components/reports-standarts/ остались как референс
  разработчика формы — переформулировано в README
2026-04-23 13:30:42 +00:00
..
2026-02-26 03:13:19 +05:00
2026-02-26 03:13:19 +05:00
2026-02-26 03:13:19 +05:00

reports-standarts

Официальные стандарты отчётности ФНС и СФР: XSD-схемы, формы-бланки (TIF/XLS), приказы, письма ФНС и инструкции по заполнению. Источник истины для паттернов валидации DTO и для визуализации форм в UI.

Структура

Папка Форма КНД XSD (в controller)
ДУСН/ Декларация по УСН 1152017 NO_USN_1_030_00_05_09_01.xsd
УУСН/ Уведомление об исчисленных суммах налогов (файлы в .rar) 1110355 UT_UVISCHSUMNAL_1_263_00_05_03_01.xsd
Уведомление об исчисленных взносах/ То же (распакованное) 1110355 то же
Бухбаланс/ Упрощённая бухотчётность НКО 0710096 ВерсФорм 5.04 NO_BOUPR_1_159_00_05_04_01.xsd
6-НДФЛ/ Расчёт 6-НДФЛ 1151100 NO_NDFL6.2_1_231_00_05_05_02.xsd
ПСВ/ Персонифицированные сведения о физлицах NO_PERSSVFL_1_297_00_05_01_02.xsd
РСВ/ Расчёт по страховым взносам 1151111 NO_RASCHSV_1_162_00_05_08_02.xsd
4ФСС-ЕФС-1/ ЕФС-1 (приказ СФР №1462 от 17.11.2025) efs1/efs1.xsd (targetNamespace 2026-01-01)

Соответствующие XSD-схемы, по которым валидируется сгенерированный XML перед отдачей, живут в components/controller/src/extensions/reports/schemas/.

Эталоны (обезличенные)

Реальные XML-эталоны, сданные ПК "Восход" в ФНС/СФР, использовались для сверки структуры и форматирования атрибутов. После того как под каждый эталон был написан обезличенный аналог на ПК "Ромашка" (все реквизиты вымышленные, структура идентична), оригиналы Восхода удалены из репозитория.

Обезличенные эталоны: components/controller/tests/fixtures/reports-references/ (NO_BOUPR_romashka.xml, NO_USN_romashka.xml, и т.д.) — см. README там.

Именно по ним прогоняются unit-тесты генераторов (tests/unit/reports/report-generators.test.ts).

Роль PDF/TIF/XLS в репозитории

Все бланки здесь — референс для разработчика, которому нужно свёрстать визуальное представление формы на фронте (components/desktop/extensions/reports/widgets/report-forms/). Пользователю пустые бланки не отдаются: кнопка «Для просмотра (PDF)» в UI конвертирует заполненную Vue-форму в PDF на клиенте через html2pdf.js.

Некоторые бланки у ФНС публикуются только в TIF (без PDF). Для удобства чтения конвертируем разово:

  • РСВ — исходник 1151111_5.08000_11.tif (20 листов), сконвертирован в blank_1151111_rsv_5.08.pdf. Команда (PIL, сохраняет 1-bit bilevel → CCITT G4 в PDF, ~700 KB, не раздувает):
    from PIL import Image
    img = Image.open('1151111_5.08000_11.tif')
    pages = [img.copy() for i in range(img.n_frames) if (img.seek(i) or True)]
    pages[0].save('blank_1151111_rsv_5.08.pdf', save_all=True,
                  append_images=pages[1:], format='PDF', resolution=300.0)
    
    Важно: не конвертировать в RGB — раздует PDF с 700 KB до 13 MB без выигрыша качества (бланк ч/б, 1-bit достаточно).

Правила при добавлении/правке

  • XSD — источник истины для regex-паттернов в DTO (UpdateReportRequisitesInputDTO, OrganizationDataInputDTO). Поменял XSD — синхронизируй @Matches в обоих DTO.
  • XSD-файлы ФНС идут в windows-1251. Для чтения: LC_ALL=C.UTF-8 iconv -f WINDOWS-1251 -t UTF-8 file.xsd | grep -E 'name="Тип|pattern value|length value'.
  • Для визуализации формы в UI использовать бланки из TIF/XLS как референс расположения полей. XSLT-шаблонов от ФНС нет — формы верстаем Vue-компонентами (см. components/desktop/extensions/reports/widgets/report-forms/README.md).