4844dcfd50
Collect TIN/NPI/Name page-by-page and run a second pass for IS_GROUP * configure first pass: no providers marked IS_GROUP. Allows simplification of prompt * Add group provider identification logic in second pass * group identification: don't take 20% of pages. Take first 3 and last 3 * Refine group provider identification logic to use pipes for JSON formatting and improve error handling * fix mypy error for `identify_group_provider` * Merge remote-tracking branch 'origin/main' into feature/tin-npi-prompt-formatting * Add "PROV_INFO_JSON" to investment column order * Refactor group provider identification to use signature page extraction and fix JSON format * move signature page extraction to `string_utils.py` and add unit tests for it * Update identify_group_provider to return provider name along with TIN and NPI in JSON format * Update identify_group_provider to always use group-provided name when available * move out GROUP_TIN_NPI_TEMPLATE to `investment_prompts.py` * Remove deprecated PROV_GROUP_TIN_CHECK and PROV_GROUP_NPI_CHECK prompts * Move out provider info fields from `one_to_one_funcs` to `tin_npi_funcs` * isort * remove debug print statements * Remove debug print statements from provider info functions * add note to regex_utils.py about where functions are used * Add page_key_sort function and corresponding tests for sorting page keys * Refactor identify_group_provider to sort pages and avoid duplicates in extracted sections * Remove debug print statements from identify_group_provider function * Merge remote-tracking branch 'origin/main' into feature/tin-npi-prompt-formatting * extract_signature_page function: prioritize Textract marker for signatures and fallback to keyword search * fix mypy error * Update test cases to reflect changes in signature extraction logic Approved-by: Katon Minhas
Field Extraction
Running the Code
This project uses Python's module system for imports. To run the code properly:
-
DO NOT run files directly like this:
python src/client/main.py # ❌ This won't work -
INSTEAD, use Python's module flag (
-m) from the project root:python -m src.client.main # ✅ This is correct
Why?
The code uses absolute imports (e.g., from src.utils import llm_utils) to maintain a clear and consistent package structure. Running with python -m ensures Python can properly resolve these imports.
Development
- All imports should use the
src.prefix (e.g.,from src.utils import llm_utils) - Always run code from the project root directory using the
-mflag - Tests are configured to handle these imports automatically via pytest settings in pyproject.toml
Configuration
The project uses poetry for dependency management and pytest for testing. Key configurations in pyproject.toml:
[tool.pytest.ini_options]
pythonpath=["."]
testpaths = [
"tests"
]
Dependencies
To install dependencies:
poetry install
To run tests:
poetry run pytest
To run type checking:
poetry run mypy .