# One actual recipient schema, explicit source facts

The version2 engine is `receiver_map.py`; the normal `validate_catalog.py` command also detects a version2 receiver template and dispatches to it. The older four-field sample remains for comparison. Use `mapped-sample/` and `mapped-report/` for the expanded runnable example.

```text
python validate_catalog.py --input mapped-sample --output next-mapped-report --previous mapped-sample/previous-result.json
python -m unittest -v test_catalog test_receiver_map
python import_etim.py --zip model-source/ETIM-10.0-EI-original.zip --class-id EC002892 --output another-class-copy.json
```

No third-party Python dependencies or network requests are needed. The unmodified official EI model ZIP is included with attribution. The importer verifies the reviewed archive hash, reads actual class-feature/value/unit relationships and can select another class in the same release. New model releases require explicit source/licence/hash review, not a silent update.

## Receiver template

Each `field_map` entry names the source field and actual exported receiver column, whether it is required, and either an official ETIM feature ID or a plain recipient type. Plain types support text, number, boolean, enum and numerical range. An ETIM feature reads its type, allowed value codes and unit from the imported class data. It does not accept an unlisted feature or arbitrary enum label. The receiver decides which features are mandatory; the engine does not declare that a partial export covers the entire ETIM class.

The example maps `label` to ARTICLE_TITLE and `system_kw` to SYSTEM_POWER_W, with an explicitly documented kW→W conversion. Converted values, input/output units, rule version and approval reference stay in the trace. Boolean false and numeric zero are valid values unless the receiver's separate range forbids them; they are not treated as missing. A range is `[minimum,maximum]` and retains that JSON representation in its CSV cell. Confirm that representation with the real receiver before delivery; if its columns differ, configure the agreed representation rather than promising universal import acceptance.

The assistant creates the real mapping after inspecting the customer's single receiver template and approved source files. `etim_model` is optional when the actual receiver uses its own non-ETIM fields. When used, its class, release and file hash must match the approved template. The customer confirms the class choice; no automatic product classification is claimed.

## Source evidence and customer mode

Use a private input folder with `receiver.json`, `products.json`, `source-register.json`, `documents/` and `images/`. Each nonempty source fact, including unmapped optional facts, carries a source ID. Its register record contains SKU, source filename, actual file SHA-256, page/cell or explicit customer-confirmation reference, permission class and the registered value/unit. Source contents can be manually extracted from authorized PDF/Excel by the assistant; this package does not claim OCR. Hash and copied value checks detect a mismatch with the registered source version, but do not independently certify the source document's contents.

For real jobs choose input_mode=customer_authorized, record the three scope confirmations, and set source/image rights to customer_authorized only after permission is given. Real SKU names are supported. Technical approval, independent expert review and actual distributor acceptance remain separately stated. Do not change a declaration to make an unreviewed row appear certified.

## Actual test and remaining acceptance

The original 10-SKU mapped sample has 3 accepted rows and 7 affected SKUs; 17 issue records include intentionally wrong ETIM enum/boolean/range/unit, absent facts, a missing image and an untraceable optional fact. The report uses the actual official EC002892 model containing117 features. Sample data is fictional. The previous-version input produces a real mapped-field change log; a SKU absent from the current accepted export is not automatically called deleted.

Twenty-four tests cover the legacy sample plus real field renaming/conversion, official feature constraints, source hash/page reference, authorized non-DEMO input, path safety and version comparison. An alternative official lighting class is imported in a test, so the importer is not a hardcoded117-feature display.

Still needed for a specific customer: its authorized source documents/images, chosen product class and receiver schema, technical-value confirmation, an agreed expert review, and receiver import feedback. These are normal service inputs; the assistant still performs mapping, source extraction, export preparation and corrections. A catalogue without meaningful recurring changes does not establish a monthly service.
