963ccc6553
Feature/demo support * index logs now debug * demo data loader
Demo Data Loader
A Python script that imports demo data from a CSV file into the Query Orchestration API. This tool is used to populate the system with sample documents and field extraction records for demos and testing.
Overview
The script performs the following operations:
- Create Demo Client - Creates a new client in the system to hold the demo data
- Upload Documents - For each unique file in the CSV, creates and uploads a unique PDF document
- Create Field Extractions - Imports the field extraction data from the CSV for each document
- Verify Records - Retrieves and validates the created records match the input data
Requirements
- Python 3.x (standard library only - no third-party packages required)
- Access to a running Query Orchestration API instance
Usage
python3 demo_data_loader.py <csv_path> <base_url> [jwt_token]
python3 demo_data_loader.py ./SaaS_Demo_Data_Sam.csv http://localhost:8080
# example for uat system with token
python3 demo_data_loader.py ./SaaS_Demo_Data_Sam.csv http://queryo-query-wheg72fhas6h-1773391169.us-east-2.elb.amazonaws.com tokenfile=token.txt
Arguments
| Argument | Required | Description |
|---|---|---|
csv_path |
Yes | Path to the CSV file containing demo data |
base_url |
Yes | Base URL of the API (e.g., http://localhost:8080) |
jwt_token |
No | JWT token for authentication (placeholder for future use) |
Examples
# Run against local development server
python3 demo_data_loader.py SaaS_Demo_Data_Sam.csv http://localhost:8080
# Run against a deployed environment with authentication
python3 demo_data_loader.py SaaS_Demo_Data_Sam.csv https://api.example.com "eyJhbGciOiJS..."
CSV File Format
The CSV file must have:
- Header row - Column names in the first row
- Data rows - Multiple rows where rows with the same
FILE_NAMEbelong to the same document - Single-value fields (columns 1-18) - Should be identical for all rows with the same
FILE_NAME - Array fields (columns 19+) - Can vary per row, forming multiple array items per document
Column Mapping
Single-Value Fields (Columns 1-18)
| Column | API Field |
|---|---|
| FILE_NAME | fileName |
| CONTRACT_TITLE | contractTitle |
| AARETE_DERIVED_AMENDMENT_NUM | aareteDerivedAmendmentNum |
| CLIENT_NAME | clientName |
| PAYER_NAME | payerName |
| PAYER_STATE | payerState |
| PROVIDER_STATE | providerState |
| FILENAME_TIN | filenameTin |
| PROV_GROUP_TIN | provGroupTin |
| PROV_GROUP_NPI | provGroupNpi |
| PROV_GROUP_NAME_FULL | provGroupNameFull |
| PROV_OTHER_TIN | provOtherTin |
| PROV_OTHER_NPI | provOtherNpi |
| PROV_OTHER_NAME_FULL | provOtherNameFull |
| AARETE_DERIVED_EFFECTIVE_DT | aareteDerivedEffectiveDt |
| AARETE_DERIVED_TERMINATION_DT | aareteDerivedTerminationDt |
| AUTO_RENEWAL_IND | autoRenewalInd |
| AUTO_RENEWAL_TERM | autoRenewalTerm |
Array Fields (Columns 19+)
See the full mapping in the script source code. Array fields include:
- Exhibit information (title, page)
- Provider information (TIN, NPI, name)
- Claim type, product, LOB, program, network
- Taxonomy and specialty codes
- Reimbursement terms and rates
- Grouper information
- Outlier and stop-loss provisions
- Facility adjustments (DSH, IME, NTAP, etc.)
- Rate escalator information
Data Type Conversions
The script automatically converts CSV values to appropriate types:
| Type | Fields | Conversion |
|---|---|---|
| Boolean | *Ind fields |
Y/N/TRUE/FALSE -> true/false |
| Integer | aareteDerivedAmendmentNum |
String -> integer |
| Numeric | *Rate, *Amt, *Threshold fields |
String -> float (handles %, $, commas) |
| Date | *Dt fields |
M/D/YYYY -> YYYY-MM-DD |
Output
The script provides detailed progress output:
============================================================
Demo Data Loader
============================================================
CSV File: SaaS_Demo_Data_Sam.csv
Base URL: http://localhost:8080
JWT Token: not provided
============================================================
Step 1: Reading CSV File
============================================================
[OK] Read 220 data rows with 130 columns
============================================================
Step 2: Analyzing Data
============================================================
[OK] Found 23 unique documents to import
- 952436878_Providence MC_Amd01_01.2025: 1 array item(s)
- 952436878_Providence MC_Amd02_01.2025: 18 array item(s)
...
============================================================
Summary
============================================================
Client ID: demo-data-loader-1769734603
Documents uploaded: 23
Field extractions created: 23
Verifications passed: 23
Verifications failed: 0
[OK] All operations completed successfully!
Exit Codes
| Code | Meaning |
|---|---|
| 0 | All operations completed successfully |
| 1 | Error occurred (missing arguments, file read error, API failure, etc.) |
Rate Limiting
The script includes:
- Automatic retry with exponential backoff for 429 (rate limit) responses
- Delays between API calls to avoid triggering rate limits
API Endpoints Used
| Method | Endpoint | Purpose |
|---|---|---|
| POST | /client |
Create demo client |
| POST | /client/{id}/document |
Upload document |
| GET | /client/{id}/document |
List documents |
| GET | /document/{id} |
Get document details |
| POST | /field-extractions |
Create field extraction |
| GET | /field-extractions?documentId={id} |
Verify field extraction |
Troubleshooting
"No documents available after upload"
The document processing queue may be slow. Try:
- Check that the
storeEventRunnerservice is running - Increase the
max_attemptsparameter inwait_for_documents()
Rate Limit Errors (429)
The script handles rate limits automatically with retries. If you still see errors:
- Increase delays between operations in the script
- Reduce the number of documents being imported at once
"Failed to create extraction"
Check that:
- The document exists in the system
- The field values are valid (proper date formats, numeric values, etc.)
Source Files
demo_data_loader.py- Main scriptSaaS_Demo_Data_Sam.csv- Sample CSV data fileREADME.md- This documentation