ECE programme (CR #1173) · Noventi/azh §302 (CR #1197) · provider driver layer

Start here

One page that says what we found, what we decided, what we are building, and what is still on someone else. Everything below links to the document that proves it.

Written 2026-09-19 for the morning of 2026-09-22. All ten documents are current as of this page — the two that had gone stale were fixed before it was written.

The short version

  1. Noventi/azh §302 billing is the deliverable. The refactor exists so it does not become the third integration with its own private transport client.
  2. Both scary unknowns are closed, favourably. maptara.claim.batch is real — 317 lines, state machine, 387 lines of tests, missing only file generation. The §302 mapping is a finished 34-field spec needing zero new fields. Neither is a rewrite.
  3. The refactor is four files. 2 589 of the 3 834 runtime lines in scope. Everything else is string work, one CSV line, and a model with zero methods.
  4. Drivers sit under Odoo core, not under our product. depends: ['base'] only. A driver knows nothing — not the domain, not the provider, not where the password came from.
  5. October fits. Two devs, 17 days each, 12 planned each, 5 slack each. Both milestones — azh dry-run complete, Egeko rewritten — land Fri 16 Oct.
  6. What no velocity fixes: the azh SFTP account, offered 4 August, 46 days unclaimed. It is the only thing between "works in a directory" and "works".
  7. Cut, by decision: KVCheck, MIP (not now), the eKV module split, a GraphQL driver, inbound ops (product decision first).
  8. New 22 Sep — CR #1319 landed. A Lovable-generated spec + module for §302 wanting two routes in Release 1: azh (what we are building) and direct GKV-DTA (EDIFACT, encryption, DAVASO, Dakota, KOTR — greenfield, every line). The module integrates with zero existing models and stubs every external touch. The architecture absorbs it as a second plugin; October does not move. Read 07.
Providers
5

Egeko live · azh next · MIP, ZHP X3 later

Milestone
16 Oct

azh dry-run + Egeko rewrite

Client questions
11

3 of them change scope

Unclaimed blocker
46 d

azh SFTP account

MEASURED ✓ 8 588 lines mapped, file by file ✓ 105 methods, each with a verdict ✓ claim.batch audited — it is real ✓ §302 spec read — 34 fields DECIDED drivers at depends:['base'] contract shaped on REST, not SOAP eKV split dropped · KVCheck cut MIP not now · inbound deferred DESIGNED driver contract · 7 ops + batch ConnectionConfig · SftpDriver claim.submission + file lifecycle Egeko rewrite in four steps NOT STARTED No source file outside docs/ has been touched. Awaiting GO. OCTOBER — 34 dev-days available, 24 planned, both milestones Fri 16 Oct LIVIU · base + contract + Egeko 12 days planned, 5 slack — owns provider_base, provider_egeko, driver_soap BOGDAN · SFTP + azh §302 12 days planned, 5 slack — owns driver_sftp, azh plugin, claim.submission THE ONE THING NO DEVELOPMENT FIXES — azh SFTP account, offered 4 August, 46 days unclaimed Everything up to "XSD-valid bytes in a directory" is ours. The last step from there to "azh accepted it" is an email.
Where the programme actually is. Four states, left to right: everything measurable has been measured, the architectural choices are made, the design is written — and not one line of production code exists yet. The red strip is the only item on this page that a developer cannot move.

Read in this order

5 minutes: this page, then 00.
30 minutes: 00 → 05 design04 plan06 client questions.
Before touching code: 02 and 03 — every file and every method with a verdict.

All documents

00

Goal overview

The one-pager. Why, the rule, the before/after diff down to file and method level, the phases, what is out of scope, five acceptance tests.

current43 KB
01

Data-flow view

The wide diagram: provider exchange and contract import as two flows sharing one driver layer. VDMS expanded — including the gap that imported contracts arrive with no price rules.

current20 KB
02

File map

Every file in both modules with a verdict and destination. Real wc -l counts. 57 files; 3 654 lines untouched; 1 262 rewritten; 7.6 MB of vendor PDFs dropped from the shipped module.

current26 KB
03

Symbol map

15 classes, 82 fields, 105 methods, each with a verdict. The 15 biggest methods ranked — one is 6.9% of all runtime code. The contract as 7 outbound + 3 inbound operations.

current34 KB
04

October plan

Two devs, day by day. What compresses with AI assistance and what does not. Exit criteria per milestone. Re-cut on the two measurements that replaced two guesses.

current18 KB
05

Design

The contract signature by signature. ConnectionConfig. SftpDriver. The azh data model, all 34 fields, the file lifecycle, the rejection path. Egeko in four steps. Nine open decisions.

current24 KB
06

Client questions

Eleven questions grouped by who can answer them, each with our recommendation. No estimates, no internals. Safe to forward.

client-facing14 KB
07

CR #1319 — how it lands on the architecture

The Lovable spec and module read in full and measured. Four big issues. Two routes on one contract. What we take, what we don't, six questions back to Volker.

current29 KB
R1

provider_base rework — deep dive

Model-by-model verdicts, the split-or-scrub SWOT, migration hazards and order. The eKV split was considered here and dropped; the reasoning is kept so nobody re-proposes it cold.

current53 KB

Programme report — the evidence

The full 12-section report with every file:line. Read this when a number on any other page looks wrong.

current72 KB

Decisions made this week

DecisionOutcomeWhere
KVCheck / eKV via AZHCut. We already do eKV.00
eKV module split out of provider_baseDropped. Zero behaviour change, real production-migration risk, cost never rises.R1 §3a
Where drivers livedepends: ['base'] — not maptara_base (12k lines, drags in accounting), not maptara_san_base (a hidden compat shim).00
Design the contract against which protocolREST, not SOAP. SOAP has one consumer and it is the module being rewritten. Abstracting from the outlier fits everything else badly.00
SoapDriver with one consumerKeep — on testability, not reuse. It is the seam that lets a misspelled wire key turn the suite red.05
REST driverIn, but last. Nothing in October needs it. Dev A's slack, first thing dropped.04
MIPNot now. Credentials live since 26 Aug; protocol unconfirmed (md5 key ≠ REST).04
Credential ACL fixDay 1 — but keep read: Codexa's FK at provider_site.py:20 is not sudo'd and breaks without it.R1 W6
Estimation styleRolling, AI-augmented. Mechanical work compresses; verification, vendor access and human decisions do not.04

Still on a human

ItemAgeWhoWhat it blocks
azh SFTP account + SSH key46 dus — send MondayProof. Everything up to "XSD-valid bytes in a directory" is in our hands.
EinlieferungsArt — paper (2) or digital PDFs (1/3)productLargest scope variable. Building paper-only unless told.
Prescription printing — does Maptara print the Muster 16 today?productWhether the barcode is a day or a new report. In nobody's estimate until yesterday.
Versorgungsanfrage → which object?productInbound ops only. Nothing in October.
Any VDMS ticketyouEverything VDMS in these docs came from code, not a ticket.
Monday, first thing

Send the SFTP account email. One message, 46 days late, and it is the only item on this page that no amount of development moves.

Status of the code

Nothing has been implemented. Every document above is planning. No source file outside docs/ and .agent-work/ has been touched. The working agreement stands: no code until an explicit GO.

Evidence base: four read-only code surveys in .agent-work/provider-refactor/; tickets #1197, #1184, #1271–1276; the §302 Datenmapping and the azhDirekt/azhIndex specifications in .agent-work/ticket-1197/spec/. Served locally at http://localhost:8899/; on disk at maptara-demo-1197-noventi/docs/provider-driver-refactor/.