Compare commits

..

2 commits

Author SHA1 Message Date
Kisa
56f3737e0c P6 mockup v2: generalized failed-data treatment per Kisa Q2 ruling [CC]
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 06:18:19 -04:00
Kisa
b4f5707937 fix: engine-dropped rows surface in the skipped list (failed-data honesty)
Kisa ruling 2026-07-07: failed CSV info must be visible and Signal never acts
on rows whose required information was not provided. Rows that survive
normalization but die in the scoring engine (no coverage rule for the
component) previously vanished from the response; they now append to
skipped_reasons before persistence so the stored count matches what the
supplier saw. Auditor SHIP; its MEDIUM (persist-order) fixed in-commit.
Known bound (auditor LOW, tracked): a dropped component inside an otherwise
scored same-DOS group is covered by the scored line and not separately
reported. 169 tests green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 06:15:27 -04:00
4 changed files with 30 additions and 1 deletions

View file

@ -4,7 +4,7 @@ v:1
ACTIVE: 2026-07-07 [CC]. READINESS-MODEL BACKEND COMPLETE: P1-P5 all SHIPPED + LIVE-VERIFIED (a3af499, d24340c, bd92126, a53728e, f28b5bf; Railway + Vercel deployed; doc_status migration applied to prod). 169 tests + Pi E2E 33/33 green. P6 (frontend nesting) is the ONLY remaining item — BLOCKED on Kisa approving docs/mockups/p6-worklist-mockup-2026-07-07.png (decisions A-D).
NEXT: (Kisa) approve/adjust P6 mockup decisions A-D (docs/mockups/p6-worklist-mockup-2026-07-07.png) -> then CC builds the frontend nesting; (Kisa) confirm OQ1 plan_type-ingestion decision recorded 2026-07-07 (shipped per umbrella plan; two-line revert if reversed); (Kisa) attorney bundle READY TO SEND (signal/pitch/legal/attorney-bundle-2026-07-07, 5 Word docs + sendable memo): confirm recipient (Clyde Mathes vs Bittinger/Nixon), entity name + formation state, arbitration-vs-courts posture, Partner Concepts carve-out keep/drop, then email; Gaboro re-approach per reactivation plan 00 (unchanged). Queued behind Signal: UMSIS docs-only activation, "63% written off" Draft fix.
NEXT: (Kisa) rule on P6 mockup v2 (docs/mockups/p6-worklist-mockup-v2-2026-07-07.png): Decision B-v2 (generalized purple data-gap family) + Decision E (data-gap patients stay Action Needed with a Data-gaps filter vs a new label; CC recommends the filter) -> then CC builds the frontend. A (nesting) + D (per-line export) LOCKED 2026-07-07; (Kisa) confirm OQ1 plan_type-ingestion decision recorded 2026-07-07 (shipped per umbrella plan; two-line revert if reversed); (Kisa) attorney bundle READY TO SEND (signal/pitch/legal/attorney-bundle-2026-07-07, 5 Word docs + sendable memo): confirm recipient (Clyde Mathes vs Bittinger/Nixon), entity name + formation state, arbitration-vs-courts posture, Partner Concepts carve-out keep/drop, then email; Gaboro re-approach per reactivation plan 00 (unchanged). Queued behind Signal: UMSIS docs-only activation, "63% written off" Draft fix.
PRIOR ACTIVE: 2026-06-28. Signal paused at clean checkpoint — Insight Engine in active BUILD phase for July 4 deadline. See insight-engine/context/current-state.md and insight-engine/handoff-clock.md for full state. Key progress today: x-sight guided experience designed (Compass) and approved by Kisa, lane-lock handoff clock created, frontend finish readiness assessed (15 ranked items). Claude is building the Compass landing + B1 deploy blocker + finish items. Signal READINESS MODEL still queued at the clean checkpoint from 2026-06-27.
@ -25,6 +25,8 @@ Insight Engine (July 4 deadline = tomorrow) is the active project. Key files:
## Decisions (last
- 2026-07-07 [Kisa/CC]: P6 rulings round 1 — nesting layout APPROVED and per-line export APPROVED (both in KG). Failed-data principle set by Kisa: Signal never acts on rows whose required info was not mapped or provided, and never hides them — engine-dropped rows now surface in skipped_reasons (shipped + deployed same day). Plan Type Needed stays its own state (it selects the rules; not a chaseable document); all other file-level gaps get the purple family treatment pending Decision B-v2/E.
- 2026-07-07 [CC]: Readiness-model backend COMPLETE (P2-P5 shipped same day as P1): citation IDs live (R-registry), patient rollup + nested payload live, device-scoped overrides live (doc_status migration applied to prod; overrides now feed the verdict; the leak is dead, live-measured), plan-type enforcement live (zero greens without a mapped plan type, live-measured; Phase 2c deletion stays Kisa-gated). Every item independently audited SHIP before ship. P6 mockup rendered for Kisa (4 decisions annotated).
- 2026-07-07 [CC]: Attorney-review legal bundle PREPARED (lead-sttil drafted, ops-steward independently reviewed, 6 findings fixed incl. 4 HIGH counterparty-name leaks). LOI template v3 (product-agnostic body, Exhibit A pre-filled for Signal, labABLE negotiation learnings folded in), NDA template v3 (products list corrected to Signal/Vitality Med Tracker/UMSIS + catch-all), BAA template v1 (generalized from Gaboro draft, forward-looking posture block), cover memo bundling both templates + BAA + FDA CDS memo + labABLE AKS question per reactivation plan 00. Entity name corrected everywhere to KJF Professional Services LLC dba STTIL Solutions (per executed labABLE LOI; kg_add recorded); formation state left as placeholder (old docs disagree: Delaware/Florida/Pennsylvania) = attorney Q1. Templates: STTIL-Vault/Projects/Legal/ (LOI+NDA v3) + signal/pitch/legal/ (BAA, memo). Send-ready docx: signal/pitch/legal/attorney-bundle-2026-07-07/.

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

View file

@ -858,6 +858,27 @@ async def upload_csv(
)
)
# Failed-data honesty (Kisa 2026-07-07): a row the scoring engine drops
# (e.g. a component with no coverage rule) must appear in the skipped
# list, never vanish — and BEFORE persistence so the stored batch record
# matches the count the supplier saw. Signal never acts on rows whose
# required information was not provided; it also never hides them.
from core.dedup import _as_date as _asd
processed_groups = {
(r.patient_id, r.device_type, _asd(r.last_shipment_date))
for r in results
}
_reported_drops = set()
for rec in records:
g = (rec.patient_id, rec.device_type, _asd(rec.shipment_date))
if g not in processed_groups and g not in _reported_drops:
_reported_drops.add(g)
skipped_reasons.append(
f"{rec.patient_id}: {rec.device_type} ({rec.component}) has "
"no coverage rule for this component — row not scored"
)
# Use real user ID and db_conn where possible if we implement it, hardcoding
# IP as 0.0.0.0 for now unless req object available
from core.supabase_client import get_client

View file

@ -513,6 +513,12 @@ def test_upload_skipped_record_leaves_no_phantom_line_in_stats():
pids = {r["patient_id"] for r in body["records"]}
assert pids == {"PT-OK-1"} # transmitter row skipped by the engine
assert body["readiness_stats"]["lines_total"] == 1
# Failed-data honesty: the dropped row is visible in the skipped list,
# never silently vanished (Kisa ruling 2026-07-07).
assert body["skipped"] >= 1
assert any(
"PT-TX-1" in r and "not scored" in r for r in body["skipped_reasons"]
)
def test_upload_non_gradeable_rows_carry_no_verdict():