Status: Accepted
Date: 2026-04-18
Вопросы из внешней системы ПКР-1 / PRKK (кредитный процесс) содержат готовые файлы-выписки по уже принятым там решениям. Они прилетают в повестку в виде Question.prkkExtractFileId — ссылка на docx-файл в ECM, сгенерированный командой PRKK в их собственном форматировании.
Бизнес-требование: в итоговом протоколе такие выписки должны появиться с родным форматированием — шрифты, разметка, структура — точно как сформировано в PRKK. Это часть контракта с командой PRKK и юридически значимо (PRKK-выписка — самостоятельный документ со своей подписью).
Протокольный pipeline не должен пропускать PRKK-файлы через свой stamping/шаблонизатор — это переломало бы форматирование. Единственное что нужно сделать — срезать лишние служебные header/footer, потому что в контексте протокола они не нужны (они есть в полноценной PRKK-выписке как самостоятельном документе).
В Phase 3 (SHORT_EXTRACTS) ProtocolGenerator различает две ветки по типу вопроса:
Стандартная ветка (обычные вопросы):
Extract в БД.PRKK-ветка:
prkkExtractFileId из Question.stripPrkkExtract(bytes, participantsLine) — срезает header/footer.context.prkkStrippedBytes: Map<UUID, byte[]> сырыми байтами (без entity).В Phase 4 (BUILD_PROTOCOL) ProtocolAssembler использует selective-normalize merge:
Таким образом итоговый документ — гибрид: наш шаблонный каркас + PRKK-части "как есть".
Поведение permanent (business requirement), но существует feature flag в OBESRABUO_common — PRKK_EXTRACT_SKIP_FORMATTING (наследуется имя из реф-config'а для operational compatibility).
true — PRKK-ветка активна, strip без форматирования.FeatureFlagProvider.isEnabled("PRKK_EXTRACT_SKIP_FORMATTING") (см. ADR-0005).Positive:
Negative:
ProtocolGenerator Phase 3 имеет branching (обычные vs PRKK) — усложняет код. Митигируется явным именованием (synthesizeShortExtracts vs PrkkExtractStripper) и Strategy-паттерном.ProtocolAssembler должен уметь selective-normalize merge — это дополнительная ответственность docx-движка. В obesrabuo-common-lib/docx4j-starter такая поддержка уже есть (mergeExtractFilesSelectiveNormalize).ProtocolGenerator.phase3SynthesizeShortExtracts, ProtocolAssembler.selectiveMergereference/OBESRABUO_protocol/src/main/java/ru/vtb/protocol/service/protocol/ProtocolService.java (phase 3 branching), ExtractService.stripPrkkExtractToBytes, FileService.mergeExtractFilesSelectiveNormalize