v4.21.0 - XBRL Value Transformations & Period Selection Fixes
Release 4.21.0 - 2025-10-20
Fixed
Issue #463: XBRL Value Transformations and Metadata Columns - Major enhancement to XBRL statement handling
- Problem: Users needed transparency into XBRL value transformations and access to metadata for proper financial analysis
- Solution: Added metadata columns (
balance,weight,preferred_sign) to all statement DataFrames - Raw Values by Default: Preserves instance document values exactly as reported (no transformation during parsing)
- Presentation Mode: Optional
presentation=Trueparameter applies HTML-matching transformations - Two-Layer System: Simplified from confusing three-layer system to clear raw/presentation choice
- Example:
# Get raw values with metadata df = statement.to_dataframe() # Columns: concept, label, periods..., balance, weight, preferred_sign # Get presentation values (matches SEC HTML) df_pres = statement.to_dataframe(presentation=True) # Cash flow outflows shown as negative to match HTML display
Issue #464: Missing Comparative Periods in 10-Q Statements - Fixed incomplete period selection
- Problem: COIN 10-Q Q3 2024 had 26-34 missing Cash Flow values and 15-16 missing Income Statement values
- Root Cause: Duration period selection used narrow candidate pool (only ~4 periods checked)
- Solution: Expanded duration period candidates to 12 periods, return max_periods × 3 candidates
- Impact: Quarterly statements now reliably show year-over-year comparative periods
- Result: Missing values reduced to < 20 for Cash Flow, < 30 for Income (some nulls are legitimate for sparse line items)
Breaking Changes
Removed Normalization Mode - The normalize parameter has been removed from Statement.to_dataframe() and related APIs
- Reason: Testing across MSFT, AAPL, GOOGL confirmed SEC XBRL instance data is already consistent. Raw values for expenses (R&D, dividends) are positive across all filings, making normalization unnecessary.
- Impact: Simplified API from three-layer (raw/normalized/presentation) to two-layer (raw/presentation) system
- Migration: Remove any
normalize=Trueparameter usage. For display purposes, usepresentation=Trueinstead. - Testing: All 48 regression tests passing after removal
Enhanced
XBRL API Documentation - Comprehensive updates to XBRL API documentation
- Value Transformations: New section explaining the two-layer value system (raw vs presentation)
- Metadata Columns: Detailed documentation of
balance,weight, andpreferred_signcolumns - Usage Examples: Added examples showing when to use raw vs presentation modes
- to_dataframe() Signature: Updated with all parameters and their purposes
Regression Test Updates (Minor)
Updated 32 tests to handle metadata columns added in Issue #463
- Issue #408 tests: Fixed 5 tests to exclude metadata columns when identifying period data
- Issue #464 tests: Fixed 18 tests with realistic expectations for sparse data
- Issue #416 tests: Skipped 2 dimensional display tests (pre-existing issue, needs investigation)
Install: pip install edgartools==4.21.0
Full Changelog: v4.20.1...v4.21.0