Бухгалтеру нужен заполненный документ для просмотра, а не пустой бланк. Раньше кнопка «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
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, не раздувает):Важно: не конвертировать в RGB — раздует PDF с 700 KB до 13 MB без выигрыша качества (бланк ч/б, 1-bit достаточно).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)
Правила при добавлении/правке
- 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).