fix(financial): update eKRS API key paths and date format parsing
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions

eKRS API changed: financial reports are now under
dzial3.wzmiankiOZlozonychDokumentach.wzmiankaOZlozeniuRocznegoSprawozdaniaFinansowego
(not dzial3.sprawozdaniaFinansowe). Date format changed from
YYYY-MM-DD to DD.MM.YYYY and period from separate fields to
combined "OD DD.MM.YYYY DO DD.MM.YYYY" string.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-04-07 16:04:20 +02:00
parent 0a66905b1c
commit e75f33126b

View File

@ -195,8 +195,14 @@ def process_company(db, company, dry_run=False):
pass pass
# Check for sprawozdania in dzial3 # Check for sprawozdania in dzial3
sprawozdania = dzial3.get('sprawozdaniaFinansowe', {}) # eKRS API stores financial reports under wzmiankiOZlozonychDokumentach
wzmianki = sprawozdania.get('informacjeOSprWorzdawozdaniach', []) wzmianki_docs = dzial3.get('wzmiankiOZlozonychDokumentach', {})
wzmianki = wzmianki_docs.get('wzmiankaOZlozeniuRocznegoSprawozdaniaFinansowego', [])
# Fallback to old key structure
if not wzmianki:
sprawozdania = dzial3.get('sprawozdaniaFinansowe', {})
wzmianki = sprawozdania.get('informacjeOSprWorzdawozdaniach', [])
if not wzmianki: if not wzmianki:
logger.info(f' No financial reports found in KRS data') logger.info(f' No financial reports found in KRS data')
@ -205,16 +211,36 @@ def process_company(db, company, dry_run=False):
updated = False updated = False
for wzmianka in wzmianki: for wzmianka in wzmianki:
if isinstance(wzmianka, dict): if isinstance(wzmianka, dict):
from datetime import datetime as dt
import re as re_mod
# New format: "zaOkresOdDo": "OD 01.01.2024 DO 31.12.2024"
# Old format: "okresOd": "2024-01-01", "okresDo": "2024-12-31"
okres_od = wzmianka.get('okresOd', '') okres_od = wzmianka.get('okresOd', '')
okres_do = wzmianka.get('okresDo', '') okres_do = wzmianka.get('okresDo', '')
data_zlozenia = wzmianka.get('dataZlozenia', '') data_zlozenia = wzmianka.get('dataZlozenia', '')
# Parse combined period field
za_okres = wzmianka.get('zaOkresOdDo', '')
if za_okres and not okres_od:
match = re_mod.search(r'OD\s+(\d{2}\.\d{2}\.\d{4})\s+DO\s+(\d{2}\.\d{2}\.\d{4})', za_okres)
if match:
okres_od = match.group(1)
okres_do = match.group(2)
if okres_od and okres_do: if okres_od and okres_do:
from datetime import datetime as dt
try: try:
p_start = dt.strptime(okres_od, '%Y-%m-%d').date() # Try multiple date formats
p_end = dt.strptime(okres_do, '%Y-%m-%d').date() for fmt in ['%Y-%m-%d', '%d.%m.%Y']:
except ValueError: try:
p_start = dt.strptime(okres_od, fmt).date()
p_end = dt.strptime(okres_do, fmt).date()
break
except ValueError:
continue
else:
continue
except Exception:
continue continue
# Check if we already have data with financial figures # Check if we already have data with financial figures
@ -239,10 +265,12 @@ def process_company(db, company, dry_run=False):
db.add(existing) db.add(existing)
if data_zlozenia: if data_zlozenia:
try: for fmt in ['%Y-%m-%d', '%d.%m.%Y']:
existing.filed_at = dt.strptime(data_zlozenia, '%Y-%m-%d').date() try:
except ValueError: existing.filed_at = dt.strptime(data_zlozenia, fmt).date()
pass break
except ValueError:
continue
updated = True updated = True