fix(1c): separate template descriptor type from payload carrier

This commit is contained in:
2026-08-14 20:53:49 +03:00
parent 9f46d8e39e
commit 7cd24bffd4
4 changed files with 113 additions and 20 deletions
@@ -102,14 +102,23 @@ Read-only diagnostic inventory `CommonTemplate` в `upo_test` уже дал тр
| Fixture | Template GUID | Доказательство типа | Разрешённое действие |
| --- | --- | --- | --- |
| `ОформлениеОтчетовБежевый` | `f49709d3-13ea-4d67-9934-9d93f8ba1c21` | XML root `AppearanceTemplate`, DCS appearance namespace | read-only, отдельный appearance decoder pending |
| `ОформлениеОтчетовБежевый` | `f49709d3-13ea-4d67-9934-9d93f8ba1c21` | XML root `AppearanceTemplate`, DCS appearance namespace; platform TemplateType descriptor ещё не декодирован | read-only appearance decoder; platform type unresolved |
| `ШаблонHTMLПредставленияTXTФайла` | `e3eb9ae8-7381-400b-a933-861b1f4efcff` | UTF-8 XML/HTML root `html` | existing safe text/HTML export only |
| `КомпонентаXMLDSIG` | `db062a63-2759-409a-b78b-132fe226f6f1` | carrier `{#base64:...}` with ZIP signature `PK` after decoding; metadata part has no `ExternalComponent` declaration | opaque archive candidate, hash/size only |
Из этого следует, что `AppearanceTemplate` нельзя относить к spreadsheet
только из-за вложенного упоминания `SpreadsheetDocument` в XML. Для него
нужен собственный root-aware classifier и отдельный XML decoder; обратная
запись по-прежнему запрещена до controlled before/after fixture.
только из-за вложенного упоминания `SpreadsheetDocument` в XML. Равным
образом XML root нельзя объявлять платформенным типом макета: он выбирает
только decoder payload. Платформенный `TemplateType` допускается публиковать
лишь после разбора metadata descriptor или подтверждённой template identity.
Для carrier нужен отдельный XML decoder; обратная запись по-прежнему
запрещена до controlled before/after fixture.
Текущая реализация публикует найденный в descriptor числовой `type code` как
`descriptor_type_evidence` без имени типа. В живой базе код `7` встретился у
carrier `AppearanceTemplate`, `4`у HTML carrier, `1`у ZIP carrier.
Это корреляции, а не таблица типов: назначать этим кодам платформенные имена
можно только после controlled fixture каждого типа.
Reader реализован в `plugins/1c/parser/appearance_payload.py`: он возвращает
контейнер, все верхнеуровневые правила `item(parameter, value)` и точный