9.7 KiB
Configuration Consolidation Complete ✅
Date: 2025-10-27 Status: COMPLETE Impact: Configuration simplified from 2 files to 1 file
What Changed
Before (2 Config Files)
mapping_config.json # Resource mapping only
header_config_sample.json # Practice/billing info
Usage:
python3 fhir_to_pad_converter.py \
-i input.json \
-o . \
--header-cfg header_config_sample.json # ← Extra flag needed
Problems:
- ❌ Two config files to manage
- ❌ Easy to forget
--header-cfgflag - ❌ Confusing which file does what
- ❌ More files = more complexity
After (1 Unified Config File)
mapping_config.json # Contains BOTH resource mapping AND header defaults
Usage:
python3 fhir_to_pad_converter.py -i input.json -o .
# Header config automatically loaded from mapping_config.json!
Benefits:
- ✅ Single config file to manage
- ✅ No extra flags needed
- ✅ Header config automatically loaded
- ✅ Simpler and cleaner
- ✅ Easier to version control
New Structure
mapping_config.json
{
"_comment": "Unified configuration file",
"header": {
"_comment": "Practice/billing information - automatically loaded",
"empfaenger_name": "AOK Berlin",
"leistungserbringer_name": "Schmidt",
"rechnungsersteller_kundennr": "PRX123456",
"rechnungsersteller_name": "Musterpraxis Dr. Schmidt",
"rechnungsersteller_strasse": "Hauptstraße 123",
"rechnungsersteller_plz": "10115",
"rechnungsersteller_ort": "Berlin",
"leistungserbringer_vorname": "Maria",
"leistungserbringer_titel": "Dr. med.",
"behandlungsart": "1",
"vertragsart": "1",
"diagnose_text": "Routineuntersuchung",
...
},
"resources": {
"Observation": { ... },
"Procedure": { ... },
"MedicationAdministration": { ... }
}
}
How It Works
1. Default Behavior (Automatic)
When you run the converter without --header-cfg:
python3 fhir_to_pad_converter.py -i input.json -o .
The converter automatically:
- Loads
mapping_config.json - Checks if it has a
headersection - Uses the header values as defaults
- Logs: "Using header configuration from mapping_config.json"
Result:
- ✅ AUF file has populated sender/recipient names
- ✅ Fewer placeholders used
- ✅ Better compliance
2. Override Behavior (Optional)
You can still override with a separate header config if needed:
python3 fhir_to_pad_converter.py \
-i input.json \
-o . \
--header-cfg custom_practice_header.json
Priority:
- FHIR Claim data (highest)
--header-cfgfile (middle)mapping_config.jsonheader section (default)- Empty defaults (fallback)
Migration Impact
Files Changed
- ✅ mapping_config.json - Added
headersection - ✅ fhir_to_pad_converter.py - Auto-load header from mapping config
- ✅ CLAUDE.md - Updated documentation
Files Deleted
- ✅ header_config_sample.json - Merged into mapping_config.json
- ✅ HEADER_CONFIG_GUIDE.md - No longer needed
Tests
All 75 tests still passing:
$ python3 -m pytest test_fhir_to_pad_converter.py -q
75 passed in 0.25s
Before/After Comparison
AUF File Output
Before (without header config):
<empfaenger>
<logisch>
<name /> <!-- EMPTY -->
</logisch>
</empfaenger>
After (with unified config):
<empfaenger>
<logisch>
<name>AOK Berlin</name> <!-- ✓ POPULATED -->
</logisch>
</empfaenger>
Command Complexity
Before:
# Need to remember two configs
python3 fhir_to_pad_converter.py \
-i input.json \
-o . \
--mapping-config mapping_config.json \
--header-cfg header_config_sample.json
After:
# Just one config, auto-loaded
python3 fhir_to_pad_converter.py -i input.json -o .
Configuration Maintenance
Before:
- Edit
mapping_config.jsonfor resource mapping - Edit
header_config_sample.jsonfor practice info - Keep two files in sync
- Risk of outdated configs
After:
- Edit
mapping_config.jsonfor everything - Single source of truth
- Easier to maintain
- Less confusion
Usage Examples
Example 1: Basic Conversion
python3 fhir_to_pad_converter.py -i samples/fhir/sample_1/226844_1240059013-KaBr.json -o .
Output Log:
2025-10-27 09:39:34 - INFO - Loading mapping config: mapping_config.json
2025-10-27 09:39:34 - INFO - Using header configuration from mapping_config.json
2025-10-27 09:39:34 - INFO - Starting FHIR to PADneXt conversion
Status: ✓ SUCCESS (with placeholders)
• Empfänger: AOK Berlin ✓
• Absender: Schmidt ✓
• Kundennr: PRX123456 ✓
Example 2: With XSD Validation
python3 fhir_to_pad_converter.py \
-i samples/fhir/sample_1/226844_1240059013-KaBr.json \
-o . \
--pad-xsd specs/padnext/padx_adl_v2.12.xsd
Example 3: Verbose Output
python3 fhir_to_pad_converter.py \
-i samples/fhir/sample_1/226844_1240059013-KaBr.json \
-o . \
-v
Example 4: Override Header (if needed)
python3 fhir_to_pad_converter.py \
-i samples/fhir/sample_1/226844_1240059013-KaBr.json \
-o . \
--header-cfg my_practice.json
Customization Guide
Step 1: Open mapping_config.json
nano mapping_config.json
# or
code mapping_config.json
Step 2: Find the header section
{
"header": {
"empfaenger_name": "AOK Berlin", // ← Edit this
"leistungserbringer_name": "Schmidt", // ← Edit this
...
}
}
Step 3: Update with your practice details
{
"header": {
"empfaenger_name": "YOUR_INSURANCE_COMPANY",
"leistungserbringer_name": "YOUR_LAST_NAME",
"rechnungsersteller_name": "YOUR_PRACTICE_NAME",
"rechnungsersteller_kundennr": "YOUR_CUSTOMER_NUMBER",
"rechnungsersteller_strasse": "YOUR_STREET",
"rechnungsersteller_plz": "YOUR_ZIP",
"rechnungsersteller_ort": "YOUR_CITY"
}
}
Step 4: Save and run
python3 fhir_to_pad_converter.py -i input.json -o .
No command-line changes needed!
Important Notes
1. Backward Compatibility
✅ 100% backward compatible
Old way still works:
python3 fhir_to_pad_converter.py -i input.json -o . --header-cfg custom.json
New way is simpler:
python3 fhir_to_pad_converter.py -i input.json -o .
2. Priority Order
When multiple sources provide the same field:
- FHIR Claim resource (highest priority)
- If input has Claim with provider info → uses that
- --header-cfg file (override)
- Explicitly provided header config
- mapping_config.json header section (default)
- Automatically loaded
- Empty defaults (fallback)
- Last resort, triggers placeholders
3. File Locations
Required:
mapping_config.json- Must exist in working directory
Optional:
- Custom header config file (if using
--header-cfg)
Benefits Summary
| Aspect | Before | After |
|---|---|---|
| Config Files | 2 files | 1 file |
| Command Flags | 2 flags needed | 1 flag (auto) |
| Maintenance | Edit 2 files | Edit 1 file |
| Learning Curve | Medium | Easy |
| Errors | Easy to forget flag | Automatic |
| Version Control | 2 files to track | 1 file to track |
| Documentation | 2 guides needed | 1 guide needed |
Technical Details
Code Changes
Location: fhir_to_pad_converter.py:1619-1654
# Use header from mapping config if available, otherwise use defaults
if header_cfg_data is None:
# Check if mapping_config has header section
if mapping_cfg_data and "header" in mapping_cfg_data:
logger.info("Using header configuration from mapping_config.json")
header_cfg_data = mapping_cfg_data["header"]
else:
# Fallback to empty defaults
logger.info("No header configuration provided, using empty defaults")
header_cfg_data = { ... }
Logic:
- If
--header-cfgprovided → use it (priority override) - Else if
mapping_config.jsonhasheader→ use it (automatic) - Else use empty defaults (fallback)
Troubleshooting
Issue: AUF file still has empty values
Solution: Make sure mapping_config.json has a header section:
{
"header": {
"empfaenger_name": "AOK Berlin", // ← Must be populated
"leistungserbringer_name": "Schmidt" // ← Must be populated
},
"resources": { ... }
}
Issue: "Using empty defaults" in log
Solution: Your mapping_config.json doesn't have a header section. Add it:
# Check if header section exists
cat mapping_config.json | grep -A 5 '"header"'
Issue: Want different configs for different practices
Solution 1: Create separate mapping configs:
python3 fhir_to_pad_converter.py -i input.json -o . -m practice1_config.json
python3 fhir_to_pad_converter.py -i input.json -o . -m practice2_config.json
Solution 2: Use override:
python3 fhir_to_pad_converter.py -i input.json -o . --header-cfg practice1_header.json
Migration Checklist
- ✅ Merged header_config_sample.json into mapping_config.json
- ✅ Updated fhir_to_pad_converter.py to auto-load header
- ✅ Deleted header_config_sample.json
- ✅ Deleted HEADER_CONFIG_GUIDE.md
- ✅ Updated CLAUDE.md documentation
- ✅ All 75 tests passing
- ✅ Manual testing successful
- ✅ AUF file populated correctly
Result
✅ Configuration simplified from 2 files to 1 file ✅ No breaking changes ✅ All tests passing ✅ Automatic header loading ✅ Better user experience
Users can now run:
python3 fhir_to_pad_converter.py -i input.json -o .
And get properly populated AUF files without any extra flags!
Status: ✅ COMPLETE Date: 2025-10-27