|
18 | 18 | - Admin/dev endpoint or migration to requeue existing documents for reprocessing |
19 | 19 |
|
20 | 20 | ## Phase 2: Solution Space |
21 | | -(filled by Phase 2) |
| 21 | + |
| 22 | +**Selected approach:** Option C — open-ended prompt + schema overlay. |
| 23 | + |
| 24 | +- Change vision prompt to "extract ALL fields + schema fields" |
| 25 | +- Provider marks discovered keys with `is_discovered=true` in metadata |
| 26 | +- `ExtractionPipelineService.RunExtractionPipeline` returns `(schemaFields, discoveredFields)` tuple |
| 27 | +- Discovered fields stored with `is_discovered = true`, `requires_review = false`, don't affect document status |
| 28 | +- `interviewDate` added to all 4 template schemas via M006 migration + SeedTemplatesSql update |
| 29 | +- Frontend shows discovered fields in collapsible "Additional fields" section (read-only with confidence badge) |
| 30 | +- `POST /admin/reprocess` endpoint resets documents to `uploaded` status scoped to eligible docs only |
22 | 31 |
|
23 | 32 | ## Phase 3: Execute |
24 | | -(filled by Phase 3) |
| 33 | + |
| 34 | +**Files changed:** |
| 35 | +- `DatabaseInitializer.cs` — M005 (is_discovered column) + M006 (interviewDate migration) + SeedTemplatesSql (8 templates updated) |
| 36 | +- `OpenAiVisionProvider.cs` — open-ended prompt, emits discovered fields with is_discovered=true in metadata |
| 37 | +- `ExtractionPipelineService.cs` — returns (schemaFields, discoveredFields) tuple, sorts discovered fields by key |
| 38 | +- `ExtractionBackgroundService.cs` — persists schema and discovered fields separately, includes discovered in case profile |
| 39 | +- `CaseProfileService.cs` — BuildCaseProfileText accepts optional discoveredFields |
| 40 | +- `CaseProfileText.cs` (contracts) — BuildFinalized accepts optional discoveredFields, preserved during finalization |
| 41 | +- `Models.cs` (contracts) — ReviewField gains IsDiscovered = false default parameter |
| 42 | +- `ReviewEndpoints.cs` — queries is_discovered, passes discovered fields to finalize search text |
| 43 | +- `AdminEndpoints.cs` — POST /admin/reprocess scoped to eligible documents only |
| 44 | +- `Worker.Testing.cs` — RunExtractionPipelineForTests returns schema only; new RunExtractionPipelineWithDiscoveredForTests returns both |
| 45 | +- `ReviewerDashboard.tsx` — filters discovered from editable fields, shows collapsible "Additional fields" with confidence badges |
| 46 | +- `DevPage.tsx` — Admin section with reprocess button (Admin role gate, clears state on success) |
| 47 | +- `api.ts` — reprocessDocuments method added |
| 48 | +- `types.ts` — ReviewField gains optional isDiscovered |
| 49 | + |
| 50 | +**Build status:** Clean (0 warnings, 0 errors) |
| 51 | +**Tests:** 29/29 worker unit tests pass, 4/4 tenancy unit tests pass |
25 | 52 |
|
26 | 53 | ## Phase 4: Ship |
27 | | -(filled by Phase 4) |
| 54 | + |
| 55 | +**PR:** #132 |
| 56 | +**Review findings addressed:** |
| 57 | +- Unreachable `"true"` string branch removed from ExtractionPipelineService |
| 58 | +- DevPage reprocess button disabled for non-Admin users |
| 59 | +**CodeRabbit findings addressed:** |
| 60 | +- AdminEndpoints reprocess: scoped DELETE to documents being reset (not all tenant data) |
| 61 | +- ReviewEndpoints finalize: discovered fields now merged into case profile search text |
| 62 | +- ExtractionBackgroundService: discovered fields now also persisted to extraction_attempts |
| 63 | +- ExtractionPipelineService: discovered results sorted by FieldKey for stable ordering |
| 64 | +- Worker.Testing.cs: added RunExtractionPipelineWithDiscoveredForTests exposing full tuple |
| 65 | +- ReviewerDashboard: discovered fields now show confidence badge |
| 66 | +- DevPage: reprocess refreshes queue state after success |
| 67 | + |
| 68 | +**Delivery verification:** |
| 69 | +- `pnpm check` passes |
| 70 | +- All unit tests pass |
| 71 | +- Post-reprocess: documents with interviewDate on form will show it in extracted fields after re-run |
28 | 72 |
|
29 | 73 | ## RNA Tool Friction Log |
30 | 74 | <!-- Append entries as you encounter friction with RNA MCP tools. --> |
|
0 commit comments