docs: update PRD with actual implementation progress
- Updated progress table: Phase 3 is 95% complete, Phase 4 is 60% complete - Marked all prompt_calls.py files as complete (saas, clover, bcbs_promise) - Marked tin_npi_funcs.py, hybrid_smart_chunking_funcs.py, postprocessing_funcs.py, crosswalk_utils.py, dynamic_funcs.py as complete - Noted 2 remaining universal_json_load calls in code_funcs.py (lines 498, 856) - Documented aarete_derived.py dual-format support (intentional backward compatibility) - Added comprehensive implementation status summary section - Updated Phase 3 and Phase 4 checklists with actual completion status - Added statistics: 26 files modified, ~350 lines net reduction, 20+ commits
This commit is contained in:
@@ -10,23 +10,29 @@
|
||||
|
||||
## Implementation Progress
|
||||
|
||||
**Overall Status**: 🟡 **Phase 2 of 6 Complete** (Foundation + Prompt Templates)
|
||||
**Overall Status**: 🟢 **Phase 3 of 6 Mostly Complete** (Foundation + Templates + Calling Layer)
|
||||
|
||||
| Phase | Status | Completion | Details |
|
||||
|-------|--------|------------|---------|
|
||||
| Phase 1: Foundation | ✅ Complete | 100% | JSON parsers, deprecation warnings, unit tests |
|
||||
| Phase 2: Prompt Templates | ✅ Complete | 100% | All 35 templates return (prompt, parser) tuples |
|
||||
| Phase 3: Prompt Calling Layer | ⏳ In Progress | 0% | Update prompt_calls.py files |
|
||||
| Phase 4: Downstream Consumers | 🔲 Not Started | 0% | aarete_derived, crosswalk, dynamic_funcs |
|
||||
| Phase 3: Prompt Calling Layer | ✅ Mostly Complete | 95% | All prompt_calls.py updated; 2 remaining in code_funcs.py |
|
||||
| Phase 4: Downstream Consumers | 🟡 Partially Complete | 60% | Most files updated; aarete_derived.py has dual-format support |
|
||||
| Phase 5: Testing | 🔲 Not Started | 0% | Integration tests, golden tests |
|
||||
| Phase 6: Cleanup & Documentation | 🔲 Not Started | 0% | Remove backward compat, docs |
|
||||
|
||||
**Latest Commits**:
|
||||
**Latest Commits** (after PRD update):
|
||||
- `df103579` - Updated postprocessing_funcs.py
|
||||
- `0d9f9314` - Updated tin_npi_funcs.py and page_funcs.py
|
||||
- `8399dbdf` - Updated crosswalk reverse mapping
|
||||
- `6c3f3f6f` - Updated code_funcs.py (mostly complete)
|
||||
- `dba61146` - Updated all prompt_calls.py files (saas, clover, bcbs_promise)
|
||||
- `98554afc` - All prompt templates now return `(prompt, parser)` tuples
|
||||
- `5d1024e` - Updated prompt instruction functions with JSON format instructions
|
||||
- Earlier - JSON parsers (`json_utils.py`), deprecation warnings, unit tests
|
||||
|
||||
**Next Steps**: Update `prompt_calls.py` files to use new `(prompt, parser)` pattern (Phase 3)
|
||||
**Remaining Work**:
|
||||
- **Phase 3**: 2 remaining `universal_json_load` calls in `code_funcs.py` (lines 498, 856)
|
||||
- **Phase 4**: `aarete_derived.py` has dual-format support (handles both JSON lists and pipe-delimited) - may be intentional for backward compatibility
|
||||
|
||||
---
|
||||
|
||||
@@ -2760,54 +2766,58 @@ def test_parsing_performance():
|
||||
- Phase 2 Templates: Commit 5d1024e (by user)
|
||||
- Phase 2 Architecture: Commit 98554afc (tuple returns)
|
||||
|
||||
#### Phase 3: Prompt Calling Layer
|
||||
- [ ] Update `src/pipelines/saas/prompts/prompt_calls.py`
|
||||
- [ ] Update `prompt_exhibit_level()`
|
||||
- [ ] Update `prompt_exhibit_level_breakout()`
|
||||
- [ ] Update `prompt_dynamic_primary()` (critical - pipe parsing)
|
||||
- [ ] Update `prompt_reimbursement_primary()`
|
||||
- [ ] Update `prompt_methodology_breakout()`
|
||||
- [ ] Update `prompt_fee_schedule_breakout()`
|
||||
- [ ] Update `prompt_grouper_breakout()`
|
||||
- [ ] Update `prompt_carveout_check()` (critical - pipe parsing)
|
||||
- [ ] Update `prompt_special_case_breakout()`
|
||||
- [ ] Update `prompt_full_context()`
|
||||
- [ ] Update `prompt_dynamic()`
|
||||
- [ ] Update `prompt_dynamic_field_safe()`
|
||||
- [ ] Update `src/pipelines/clients/clover/prompts/prompt_calls.py`
|
||||
- [ ] Apply same updates as saas
|
||||
- [ ] Update `src/pipelines/clients/bcbs_promise/prompts/prompt_calls.py`
|
||||
- [ ] Apply same updates as saas
|
||||
- [ ] Update `src/codes/code_funcs.py`
|
||||
- [ ] Replace `universal_json_load` calls
|
||||
- [ ] Update `src/pipelines/shared/extraction/tin_npi_funcs.py`
|
||||
- [ ] Replace `universal_json_load` calls
|
||||
- [ ] Update `src/pipelines/shared/preprocessing/hybrid_smart_chunking_funcs.py`
|
||||
- [ ] Replace `universal_json_load` calls
|
||||
#### Phase 3: Prompt Calling Layer ✅ **MOSTLY COMPLETE** (95%)
|
||||
- [x] Update `src/pipelines/saas/prompts/prompt_calls.py` ✅ **COMPLETE** (Commit: dba61146)
|
||||
- [x] Update `prompt_exhibit_level()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_exhibit_level_breakout()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_dynamic_primary()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_reimbursement_primary()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_methodology_breakout()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_fee_schedule_breakout()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_grouper_breakout()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_carveout_check()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_special_case_breakout()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_full_context()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_dynamic()` - Uses tuple unpacking
|
||||
- [x] Update `prompt_dynamic_field_safe()` - Uses tuple unpacking
|
||||
- [x] All 24+ functions updated to use `prompt, parser = template_func(...)` pattern
|
||||
- [x] Update `src/pipelines/clients/clover/prompts/prompt_calls.py` ✅ **COMPLETE** (Commit: dba61146)
|
||||
- [x] All functions updated to use tuple unpacking pattern (25 instances)
|
||||
- [x] Update `src/pipelines/clients/bcbs_promise/prompts/prompt_calls.py` ✅ **COMPLETE** (Commit: dba61146)
|
||||
- [x] All functions updated to use tuple unpacking pattern (25 instances)
|
||||
- [ ] Update `src/codes/code_funcs.py` ⚠️ **PARTIAL** (2 remaining calls)
|
||||
- [x] Most functions updated (Commit: 6c3f3f6f)
|
||||
- [ ] Line 498: `string_utils.universal_json_load(llm_answer_raw)` - Still needs update
|
||||
- [ ] Line 856: `string_utils.universal_json_load(claude_answer_raw)` - Still needs update
|
||||
- [x] Update `src/pipelines/shared/extraction/tin_npi_funcs.py` ✅ **COMPLETE** (Commit: 0d9f9314)
|
||||
- [x] All `universal_json_load` calls replaced
|
||||
- [x] Update `src/pipelines/shared/preprocessing/hybrid_smart_chunking_funcs.py` ✅ **COMPLETE** (Commit: dba61146)
|
||||
- [x] All `universal_json_load` calls replaced
|
||||
|
||||
#### Phase 4: Downstream Consumers
|
||||
- [ ] Create shared utility function
|
||||
- [ ] Add `_parse_multi_value_field()` to `src/utils/string_utils.py` or new module
|
||||
- [ ] Update `src/pipelines/shared/postprocessing/aarete_derived.py`
|
||||
- [ ] Update line 45 (LOB parsing)
|
||||
- [ ] Update line 67 (PROGRAM parsing)
|
||||
- [ ] Update line 93 (PRODUCT parsing)
|
||||
- [ ] Update line 155 (crosswalk parsing)
|
||||
- [ ] Add dual-format support to all pipe-split operations
|
||||
- [ ] Update `src/utils/crosswalk_utils.py`
|
||||
- [ ] Update `apply_crosswalk()` to handle JSON lists
|
||||
- [ ] Update `src/pipelines/shared/extraction/dynamic_funcs.py`
|
||||
- [ ] Update `dynamic_primary()` LOB parsing (line 60)
|
||||
- [ ] Handle both JSON lists and pipe-delimited
|
||||
- [ ] Update `src/pipelines/shared/postprocessing/postprocessing_funcs.py`
|
||||
- [ ] Find and update all pipe-split operations
|
||||
- [ ] Update remaining files with pipe splits:
|
||||
- [ ] `src/testbed/dynamic_primary_metrics.py`
|
||||
- [ ] `src/testbed/testbed_utils.py`
|
||||
- [ ] `src/qc_qa/pipeline.py`
|
||||
- [ ] `src/utils/qa_qc_utils.py`
|
||||
- [ ] `src/parent_child/qc.py`
|
||||
- [ ] `src/testbed/model_evaluation_utils.py`
|
||||
#### Phase 4: Downstream Consumers 🟡 **PARTIALLY COMPLETE** (60%)
|
||||
- [x] Create shared utility function (if needed)
|
||||
- [x] Dual-format support implemented inline where needed
|
||||
- [x] Update `src/pipelines/shared/postprocessing/aarete_derived.py` ✅ **COMPLETE** (Dual-format support)
|
||||
- [x] Line 42-43: LOB parsing with dual-format support (checks for "|" before splitting)
|
||||
- [x] Line 65-66: PROGRAM parsing with dual-format support
|
||||
- [x] Line 89-90: PRODUCT parsing with dual-format support
|
||||
- [x] All pipe-split operations have dual-format support (handles both JSON lists and pipe-delimited)
|
||||
- **Note**: This file intentionally maintains backward compatibility by checking for "|" before splitting
|
||||
- [x] Update `src/utils/crosswalk_utils.py` ✅ **COMPLETE** (Commit: 8399dbdf)
|
||||
- [x] `apply_crosswalk()` updated to handle JSON lists
|
||||
- [x] Update `src/pipelines/shared/extraction/dynamic_funcs.py` ✅ **COMPLETE** (Commit: dba61146)
|
||||
- [x] `dynamic_primary()` updated - no pipe splitting found
|
||||
- [x] Handles JSON lists properly
|
||||
- [x] Update `src/pipelines/shared/postprocessing/postprocessing_funcs.py` ✅ **COMPLETE** (Commit: df103579)
|
||||
- [x] All pipe-split operations removed/updated
|
||||
- [x] 113 lines changed, significant cleanup
|
||||
- [ ] Update remaining files with pipe splits (if any):
|
||||
- [ ] `src/testbed/dynamic_primary_metrics.py` - Status unknown
|
||||
- [ ] `src/testbed/testbed_utils.py` - Status unknown
|
||||
- [ ] `src/qc_qa/pipeline.py` - Status unknown
|
||||
- [ ] `src/utils/qa_qc_utils.py` - Status unknown
|
||||
- [ ] `src/parent_child/qc.py` - Status unknown
|
||||
- [ ] `src/testbed/model_evaluation_utils.py` - Status unknown (has universal_json_load import)
|
||||
|
||||
#### Phase 5: Testing & Validation
|
||||
- [ ] Create integration test file
|
||||
@@ -2870,6 +2880,80 @@ def test_parsing_performance():
|
||||
|
||||
---
|
||||
|
||||
## Implementation Status Summary (Last Updated: Feb 3, 2026)
|
||||
|
||||
### ✅ Completed Work
|
||||
|
||||
**Phase 1: Foundation** (100% Complete)
|
||||
- ✅ Created `src/utils/json_utils.py` with `parse_json_dict()` and `parse_json_list()`
|
||||
- ✅ Added deprecation warnings to `string_utils.py`
|
||||
- ✅ Created comprehensive unit tests in `src/tests/test_json_utils.py`
|
||||
|
||||
**Phase 2: Prompt Templates** (100% Complete)
|
||||
- ✅ All 35 prompt template functions return `(prompt, parser)` tuples
|
||||
- ✅ All `_INSTRUCTION()` functions updated with JSON format instructions
|
||||
- ✅ Removed all pipe-delimited format references from prompts
|
||||
|
||||
**Phase 3: Prompt Calling Layer** (95% Complete)
|
||||
- ✅ `src/pipelines/saas/prompts/prompt_calls.py` - All 24+ functions updated
|
||||
- ✅ `src/pipelines/clients/clover/prompts/prompt_calls.py` - All functions updated
|
||||
- ✅ `src/pipelines/clients/bcbs_promise/prompts/prompt_calls.py` - All functions updated
|
||||
- ✅ `src/pipelines/shared/extraction/tin_npi_funcs.py` - All updated
|
||||
- ✅ `src/pipelines/shared/preprocessing/hybrid_smart_chunking_funcs.py` - All updated
|
||||
- ⚠️ `src/codes/code_funcs.py` - 2 remaining `universal_json_load` calls (lines 498, 856)
|
||||
|
||||
**Phase 4: Downstream Consumers** (60% Complete)
|
||||
- ✅ `src/utils/crosswalk_utils.py` - Updated to handle JSON lists
|
||||
- ✅ `src/pipelines/shared/extraction/dynamic_funcs.py` - Updated
|
||||
- ✅ `src/pipelines/shared/postprocessing/postprocessing_funcs.py` - Major cleanup (113 lines changed)
|
||||
- ✅ `src/pipelines/shared/postprocessing/aarete_derived.py` - Dual-format support implemented (intentional backward compatibility)
|
||||
|
||||
### ⏳ Remaining Work
|
||||
|
||||
**Phase 3: Prompt Calling Layer** (5% remaining)
|
||||
- [ ] Fix 2 remaining `universal_json_load` calls in `src/codes/code_funcs.py`
|
||||
- Line 498: In `fill_bill_type()` function
|
||||
- Line 856: In grouper breakout error handling
|
||||
|
||||
**Phase 4: Downstream Consumers** (40% remaining)
|
||||
- [ ] Verify/test remaining files (may already be updated):
|
||||
- `src/testbed/dynamic_primary_metrics.py`
|
||||
- `src/testbed/testbed_utils.py`
|
||||
- `src/qc_qa/pipeline.py`
|
||||
- `src/utils/qa_qc_utils.py`
|
||||
- `src/parent_child/qc.py`
|
||||
- `src/testbed/model_evaluation_utils.py`
|
||||
|
||||
**Phase 5: Testing & Validation** (0% complete)
|
||||
- [ ] Create integration tests
|
||||
- [ ] Update existing test files
|
||||
- [ ] Create golden test comparison
|
||||
- [ ] Run full test suite
|
||||
- [ ] Manual QA testing
|
||||
|
||||
**Phase 6: Cleanup & Documentation** (0% complete)
|
||||
- [ ] Remove backward compatibility code (if desired)
|
||||
- [ ] Update documentation
|
||||
- [ ] Code review
|
||||
- [ ] Final QA
|
||||
|
||||
### 📊 Statistics
|
||||
|
||||
- **Files Modified**: 26 files across the codebase
|
||||
- **Lines Changed**: ~855 insertions, ~1204 deletions (net reduction of ~350 lines)
|
||||
- **Prompt Functions Updated**: 35 template functions + all calling code
|
||||
- **Commits**: 20+ commits implementing the changes
|
||||
- **Test Coverage**: Unit tests for JSON parsers complete
|
||||
|
||||
### 🎯 Key Achievements
|
||||
|
||||
1. **Architectural Improvement**: All prompt templates now return `(prompt, parser)` tuples, eliminating ambiguity
|
||||
2. **Code Reduction**: Net reduction of ~350 lines through cleanup
|
||||
3. **Consistency**: All prompt calling code uses the same pattern
|
||||
4. **Backward Compatibility**: `aarete_derived.py` maintains dual-format support during transition
|
||||
|
||||
---
|
||||
|
||||
## Appendix A: JSON Schema Examples
|
||||
|
||||
### A.1 Exhibit Level Response
|
||||
|
||||
Reference in New Issue
Block a user