16 Commits
Author SHA1 Message Date
james.maesandClaude Opus 5.5 cccd0ac0ab fix(app): business-only EDI home; system widgets for the Admin home
Move System, Dead letters, Certificates expiring and Setup status off the
EDI home into EdiHome.ADMIN_WIDGET_NAMES, gated to edi.admin.hasAccess
(hidden when denied) and full width, for a host to place on its Admin
home. Every remaining home widget requires edi.hasAccess (hidden when
denied); none is NOT_PROTECTED.

Add "Inbound documents are delayed": an alert at the top of the home,
shown only when the oldest unprocessed inbound document is older than
inboundDelayedAfterMinutes (default 60), with its age and a link to the
filtered inbound documents.

Setup counts that fail show "Unavailable" and are logged, never -1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 09:28:46 -05:00
james.maesandClaude Opus 5.5 36f1b939b4 chore: target QQQ 4.1.0-RC.15 (UI API 1.6.0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:27:06 -05:00
james.maesandClaude Opus 5.5 77d63135af feat(ui-api): extension for QQQ UI API 1.6.0 (operationIds, BasicErrorResponseV1, QQQ 4.1.0-RC.14)
Regenerated against UI API 1.6.0: every operation has an operationId and
the standard error responses (BasicErrorResponseV1: error, code, message,
fieldErrors, traceId); the extension's own error schema is kept but
deprecated; hand-written error bodies go through QJavalinUtils so they carry
code/message/traceId. Extension MINOR bumped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:43:38 -05:00
james.maesandClaude Opus 5.5 b08057180b feat(help): ship the qbit-edi help bundle through QQQ help bundles, with coverage gate
Host-neutral help (deployment-specific facts removed), registered with
HelpBundles, gated by HelpBundleAssertions. QQQ 4.1.0-RC.7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:27:22 -05:00
james.maesandClaude Opus 5.5 a1914f7553 feat: table help, Setup status, Install sample maps, tables guardrail
Every edi_* table and the app get help bundle text saying how rows get
created and the setup order. The home gets a Setup status section. A new
Install sample maps table action adds the bundled synthetic maps as
inactive, unbound drafts (insert-only by name).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:17:41 -05:00
james.maesandClaude Opus 5.5 c15872a373 feat: phase f1 - spec'd UI API extension for the EDI mapper
- MiddlewareSpecExtension "edi" 1.0.0 under /qqq/v1/qbit/edi:
  GET guides/{guideId}/tree, GET maps/{mapId}/target,
  POST sandbox/preview (unsaved rule overrides, base64 uploads up to
  5 MB, PHI suppression) and POST maps/{mapId}/validate.
- MapPreviewService shared by the Preview Map action and the endpoint;
  MapRuleValidator for paths, transforms and arguments.
- Committed fragment src/main/resources/openapi/qqq-v1/edi.yaml with a
  contract test; HTTP tests in strict raw-route mode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:48:59 -05:00
james.maesandClaude Opus 5.5 30ac598952 build: move to QQQ 4.1.0-RC.6 and remove RC.5 stand-ins
- qqq-bom 4.1.0-RC.6 (guardrail G7).
- Replace the EdiClassifications stand-in with core DataClassification
  on edi_ tables and fields and on the healthcare sample tables.
- Value-free QAlerts.notify notifications for exception assignment and
  partner exceptions.
- Fix the shared-transport possible-value filter grouping.
- PhiLogScope kept (RC.6 has no query-log redaction), now marked for
  core #1147 by RC.7; file-gateway stand-ins kept until that api ships.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:17:37 -05:00
james.maesandClaude Opus 5.5 5afeefb1c2 Merge develop into feature/phase-g-edifact
Resolve guide loader, validator, demo and docs conflicts with phases c and e;
HealthcareValidation now takes the standard-neutral EdiDocument.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:50:06 -05:00
james.maesandClaude Opus 5.5 ea4c48ad66 feat: phase e - HIPAA healthcare documents, SNIP 3-5, PHI handling
- In-house 005010 baseline guides for 837P, 837I, 835, 270/271, 276/277
  and 834; 999 for HIPAA documents with IK3/IK4/CTX/IK5.
- SNIP 3 balancing (837 claim vs line charges, 835 payment vs claims and
  PLB, CAS adjustments), SNIP 4 situational rules, SNIP 5 format checks
  (ICD-10 shape, NPI check digit, ZIP) and an ExternalCodeSetProvider SPI.
- PHI classification via the RC.5 stand-in; healthcare keys go to
  phiBusinessKey; no element values in errors, events, alerts, logs or
  acks for PHI documents; audited Download Raw Document action.
- Healthcare sample maps, canary PHI egress tests, demo clearinghouse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:38:24 -05:00
james.maesandClaude Opus 5.5 4f8916246a feat: phase g - EDIFACT
- EDIFACT envelope reader and writer (UNA, UNB/UNZ, UNG/UNE, UNH/UNT,
  release-character escaping, syntax 3 and 4) with envelope findings.
- Routing by UNB identities, EDIFACT control references and duplicate
  detection; mixed X12 and EDIFACT inbox processing.
- In-house baseline guides (D96A, D01B) for ORDERS, ORDRSP, DESADV,
  INVOIC and CONTRL; CONTRL generation and inbound reconciliation.
- Sample maps (ORDERS in; ORDRSP, DESADV, INVOIC out) and demo partner
  Lindqvist Retail AB.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:26:05 -05:00
james.maesandClaude Opus 5.5 a4dca9046b feat: phase c - AS2 transport
- AS2 send and receive with signing, encryption, compression, MIC, sync
  and async MDN (as2-lib algorithms and MIC types, BouncyCastle S/MIME
  and MDN handling in memory; no temp files or keystores).
- /qqq/hooks/edi/as2/{transport} receiver and /mdn async receipt route;
  retransmits get the original MDN; failure MDNs for decryption,
  authentication and integrity errors; async MDN delivery queue.
- edi_as2_mdn table; certificate parsing on save, keys from env vars,
  ACTIVE/NEXT rollover with Promote Certificate and Export Public
  Certificate; NEXT expiry and edi.mdn.overdue alerts; VAN over AS2.
- Demo partner Pacific Wholesale over AS2 against an in-process peer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:09:55 -05:00
james.maesandClaude Opus 5.5 2915f47740 feat: phase b - retail documents, outbound pipeline, transports, ack monitor
- Baseline guides and sample maps for 855, 856, 810, 846, 860 (004010
  and 005010); outbound map engine with SEQUENCE and HL numbering.
- Outbound triggers (record-change transactional outbox, ESB enqueue
  process, opt-in Send As EDI), outbound worker (map, validate, batch,
  envelope, store) and send worker with retry, backoff and dead letter.
- Transport plugin SPI and registry; SFTP push and poll (streamed, host
  key pinned), file-gateway OUTBOX through the agreed facade stand-in,
  HTTPS out (basic, bearer, HMAC) and the /qqq/hooks/edi/https receiver.
- Overdue-ack and certificate-expiry monitor via QAlerts; Resend, Resend
  As New and Cancel actions; outbound queue statistics on the home.
- Test-scope demo server with a realistic synthetic seed (docs/DEMO.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:14:08 -05:00
james.maesandClaude Opus 5.5 49bc88ba3d feat: phase a2 - inbound vertical slice
- Durable edi_inbox with InboundSink intake, claimed scheduled worker,
  backoff, stale-claim reclaim and dead letter.
- Routing by ISA identities and usage, duplicate handling, per-ST
  transactions, validation errors, 997/999/TA1 queued as outbound
  messages with allocated control numbers, inbound ack reconciliation
  with QAlerts raise/resolve.
- Versioned data-driven maps (edi_map, rules, samples), EDI/QQQ paths,
  transforms, and apply through Insert/UpdateAction as a host-supplied
  service session with enforcement on.
- qbit-file-gateway consumer "edi" against a marked stand-in of the
  agreed api; optional object-storage payload store (api package only).
- EDI app with Activity/Setup nav and a typed-widget home; record actions
  (Reprocess, Preview Map, Assign/Ignore/Resolve, Create Partner
  Override, Activate Guide, Activate Map) with standard Review/Result.
- Contingent partner-scoped possible-value filters with tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:23:53 -05:00
james.maesandClaude Opus 5.5 b35d0440dd feat: phase a1 - EDI data model, X12 parsing, guide validation, acks
- 21 edi_ tables (partners, identities, agreements, agreement documents,
  control numbers, transports, certificates, guides, code lists,
  interchanges, groups, documents, errors, events, exceptions, inbox,
  payloads) with record screens, PVS, joins and child lists.
- StAEDI-based streaming X12 envelope reader (multi-interchange,
  separators, envelope findings with TA1/AK9/AK5 codes) and writer.
- Implementation guides as data: JSON baseline guides (850 004010/005010,
  997, 999), loader with revisions, structural validator and rule
  language for situational rules, SNIP 1-2.
- TA1, 997 and 999 builders at each ack level; inbound ack reader.
- Atomic control-number allocation and duplicate detection.
- AES-256-GCM envelope-encrypted database payload store with rotation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:31:14 -05:00
james.maesandClaude Opus 5.5 f45e126a62 chore: bring the scaffold up to the QRun qbit repository standard
Replace the application template's example sources with the EDI producer
and config, and add the standard files: qbit-build-parent 2.0.0 POM on
QQQ 4.1.0-RC.5 with Checkstyle and the JaCoCo gate, Maven wrapper,
CircleCI qqq-orb 0.6.8 workflows, the release-candidate workflow,
Dependabot, community pointer files, CHANGELOG, CLAUDE.md/AGENTS.md and a
DESIGN.md placeholder for the spec PR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:31:04 -05:00
james.maes 8b215c6b09 Initial commit 2026-10-13 19:24:37 -05:00