feat: phase f1 - spec'd UI API extension for the EDI mapper and sandbox #15

Merged
KofTwentyTwo merged 2 commits from feature/phase-f-mapper-api into develop 2026-10-14 14:58:49 +00:00
KofTwentyTwo commented 2026-10-14 14:49:18 +00:00 (Migrated from github.com)

Summary

Phase (f), part 1: the backend for the mapper UI, as a spec'd UI API extension (UI-API-EXTENSIONS.md; guardrails G2, G3).

Endpoint (/qqq/v1/qbit/edi) Response
GET /guides/{guideId}/tree EdiGuideTreeV1 (loops, segments, elements, usage, code lists)
GET /maps/{mapId}/target EdiTargetV1 (table fields and associations, current rules, transforms with argument schemas)
POST /sandbox/preview EdiPreviewV1 (parse counts, findings by SNIP level, ack, mapped records, diffs; values suppressed for PHI maps)
POST /maps/{mapId}/validate EdiValidationV1 (per-rule errors for unsaved rules)
  • Same permissions as the record actions (edi.map.preview, table read); rule writes stay on the core table API.
  • MapPreviewService is shared by the Preview Map action and the endpoint; MapRuleValidator checks paths, transforms and arguments.
  • Committed fragment src/main/resources/openapi/qqq-v1/edi.yaml (22 schemas) and a contract test (UiApiContract.check); HTTP tests run the server in strict raw-route mode.
  • Hosts need an 8 MiB request limit for the 5 MiB base64 upload.

Next: the Next UI mapper page (separate PR to qqq-frontend-next main), which vendors this fragment.

Test plan

  • ./mvnw verify: 242 tests (19 new API/contract), Checkstyle, JaCoCo (93.8% instructions, 99% classes)
  • CircleCI test_only

🤖 Generated with Claude Code

## Summary Phase (f), part 1: the backend for the mapper UI, as a spec'd UI API extension (UI-API-EXTENSIONS.md; guardrails G2, G3). | Endpoint (`/qqq/v1/qbit/edi`) | Response | |---|---| | `GET /guides/{guideId}/tree` | `EdiGuideTreeV1` (loops, segments, elements, usage, code lists) | | `GET /maps/{mapId}/target` | `EdiTargetV1` (table fields and associations, current rules, transforms with argument schemas) | | `POST /sandbox/preview` | `EdiPreviewV1` (parse counts, findings by SNIP level, ack, mapped records, diffs; values suppressed for PHI maps) | | `POST /maps/{mapId}/validate` | `EdiValidationV1` (per-rule errors for unsaved rules) | - Same permissions as the record actions (`edi.map.preview`, table read); rule writes stay on the core table API. - `MapPreviewService` is shared by the Preview Map action and the endpoint; `MapRuleValidator` checks paths, transforms and arguments. - Committed fragment `src/main/resources/openapi/qqq-v1/edi.yaml` (22 schemas) and a contract test (`UiApiContract.check`); HTTP tests run the server in strict raw-route mode. - Hosts need an 8 MiB request limit for the 5 MiB base64 upload. Next: the Next UI mapper page (separate PR to qqq-frontend-next `main`), which vendors this fragment. ## Test plan - [x] `./mvnw verify`: 242 tests (19 new API/contract), Checkstyle, JaCoCo (93.8% instructions, 99% classes) - [ ] CircleCI `test_only` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.