Both unknowns that the previous version scheduled a week to discover are closed — by reading the spec and auditing the model, in an afternoon. Both came back favourable. This plan uses what was measured, and it assumes the team is AI-augmented: mechanical work collapses; verification, vendor access and human decisions do not.
maptara.claim.batch is real. 317 lines, 22 fields, state machine, IK, totals, copayment/insurance split, wizard, report, 387 lines of tests. Missing exactly one thing: file generation. azh is a serialiser over an existing model, not a rewrite.
The §302 mapping is a finished spec. 34 fields, every one with a Maptara source and an azh XML element. Its own conclusion: all required data already exists in Maptara. Zero new custom fields. XSDs and worked examples are on disk.
The old plan spent Dev B's entire first week finding this out. That week is now free.
dev-days, 17 each
12 each — fits with room
azh dry-run complete · Egeko rewrite done
5 each — real, not decorative
| Work | 1990 est. | Now | Why |
|---|---|---|---|
| Test baseline + de-brand 106 lines across 10 files + ACL fix | 4 d | 1 d | Mechanical string work with a grep as the exit criterion. The cron migration is the only part needing thought. |
Driver contract + ConnectionConfig + bind Egeko's 7 methods | 3 d | 1 d | ~200 lines from a written design; the pattern exists 12× in the repo already. |
Read the §302 spec, audit claim.batch | 5 d | done | Done this afternoon. This is the largest single saving and it cost nothing. |
| §302 serialiser — 34 fields, 2 XML files, zip, 3 000-split | 5 d | 3 d | Sources known, XSDs on disk with examples. Assertions written before the serialiser. |
| SFTP driver incl. dry-run | 5 d | 3 d | Small, but paramiko is net new here and the host-key policy is a decision, not typing. |
| Egeko rewrite (R0 oracle + R3) | 15 d | 10 d | Compresses least. AI writes the 263-line method fast; nothing validates it until the oracle is wired. Correctness-gated, not typing-gated. |
| Proof against azh's real host | — | ∞ | Does not compress at all. No account, no test environment. 46 days unclaimed. |
| 7 client decisions | — | — | Emails and meetings. See the questions. |
| Thu 1 | Foundations, all of it. Baseline the 112 tests; write the missing portal test; de-brand structure and vocabulary; cron migration by XML ID; ACL — keep read, drop write/create/unlink, groups= on secrets; delete maptara.provider.uom. Exit: grep for vendor names in non-test base = 0, Codexa form still opens. |
| Fri 2 | Contract + ConnectionConfig. provider.driver AbstractModel, 7 outbound ops + submit_batch, capability flags, declared inbound hole. Bind Egeko's existing 7 methods unchanged. If they fight the contract, you learn it today. Dev B is unblocked from here. |
| Mon 5 – Tue 6 | R0 — the oracle. Wire tools/ekv_body_diff.py (630 existing lines, called by nothing) into the suite. Exit: a deliberately misspelled wire key turns it red. |
| Wed 7 – Fri 16 | R3 — Egeko rewrite, 8 days. Split generate_document_template into read → dict → format. Lift ~200 transport lines into SoapDriver with the timeout and retry fixes. Collapse six credential blocks to one. Preserve: four status buckets, de_price precision, dhpIdentNumer misspelled. |
| Mon 19 – Fri 30 | 5 days slack + R6 licence sweep (2 d) + R5 REST driver (3 d) if slack is unused. R5 is the first thing dropped. |
| Thu 1 | SFTP spike → driver skeleton. paramiko against a local server: connect, put, list, get. Decide host-key policy today. Module maptara_driver_sftp, depends: ['base'], dependency declared. |
| Fri 2 – Mon 5 | SftpDriver complete. Atomic put (temp + rename), probe with three stages, dry-run directory mode — the only pre-production test azh will ever have. Offline tests, no database. |
| Tue 6 – Wed 7 | Data model. maptara.claim.submission (Block A: SendungsId, timestamp, state, files). submission_state + double-send lock on claim.batch — without touching its 387 lines of tests. submit_batch wired through the contract. Add now, free: the six IK kinds (Liefer, Abrechnungs, Zahlungs, Zertifikats, Kostenträger, DAS), route and bundling_signature — #1319's Release 2 then finds the model already shaped. |
| Thu 8 – Mon 12 | §302 serialiser, 3 days. Assertions first, from the XSD and examples. Begleitdatei (9 elements), Datendatei (79), zip with PDFs, split at 3 000. ISO dates — not Egeko's comma decimals; derive every format from the schema. |
| Tue 13 – Wed 14 | Return files. Parse *EPO/*AVO/*NVD/*DIFF. NVD → state Fehler, correction + resubmit. State is written from the return file, never optimistically from the send — the exact bug Egeko has. |
| Thu 15 – Fri 16 | End to end, dry run. Select invoices → submission → files in the dry-run dir → validate against XSD → simulate a return → state moves. Milestone: azh submission works locally. |
| Mon 19 – Fri 30 | 5 days slack + barcode print (Q10, 1–2 d if the report exists) + anything the client answers change. |
A file that azh has accepted. Not because of us — because there is no account and no test environment. The SFTP access was offered on 4 August. Everything up to "the bytes are in the dry-run directory and validate against azh's own XSD" is in our hands. The last step is an email that has been unsent for 46 days.
Correct LEGS keys, correct EinlieferungsArt, a confirmed Sondererfassung1. All client answers. The serialiser is built to take them as data, so late answers cost a config change, not a rebuild — but "late" still means "not in the first real submission".
| Cut | Why |
|---|---|
| MIP plugin | Your call — not now. Credentials from #1271 are live; protocol still unconfirmed (per-customer md5 key ≠ REST). |
| Inbound ops — Direktauftrag #1274, Versorgungsanfrage #1276, inbound messages #1275 | Blocked on Q11 in the client questions. Contract gets a declared hole on day 2. |
| eKV module split | Dropped. Zero behaviour change, real production-migration risk, cost never rises. |
| Direct GKV-DTA (CR #1319) | Release 2. A second plugin on the unchanged contract — EDIFACT ESOL/AUF, per-payer encryption, DAVASO, Dakota, KOTR. Greenfield; the generated module contributes field names, not code (08). Two free additions land in October: the six IK kinds and route/bundling_signature on claim.submission. |
| Item | Age | Who |
|---|---|---|
| azh SFTP account + SSH key — the only thing between "works in a directory" and "works" | 46 d | us — send it Monday |
Q6 EinlieferungsArt — paper or digital; largest scope variable | — | product — building paper-only unless told |
| Q10 prescription printing — does Maptara print the Muster 16 today? | — | product — decides whether barcode is 1 day or a new report |
| Any VDMS ticket | — | you |
Window: October 2026, 22 working days (3 Oct is a Saturday), less 5 = 17 per developer. Planned 12 each; 5 each slack. Blocker age from ticket date 2026-08-04, today 2026-09-19. Estimates assume AI-assisted development for mechanical work and make no such assumption for verification, vendor access, or decisions. Previous "week 1 then re-cut" version superseded — the re-cut happened the same day, by doing the reading instead of scheduling it.
Internal planning document. Nothing here has been implemented.