From 4b325cc4837a2dd6ed64b3cdefddbbc4a7ead05a Mon Sep 17 00:00:00 2001 From: Maciej Pienczyn Date: Fri, 20 Feb 2026 13:38:34 +0100 Subject: [PATCH] fix: complete KRS enrichment mapping (REGON, address, PKD, NIP) The KRS enrichment function was only mapping forma_prawna, legal_name and capital. Now maps REGON, address (ulica + nr_domu), city, postal, primary PKD code on Company model, and NIP if missing. Fixed field name mismatches: nr_domu (not numer), opis (not nazwa), glowna (not glowny). City names are title-cased from KRS uppercase format. Co-Authored-By: Claude Opus 4.6 --- blueprints/admin/routes_membership.py | 45 ++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/blueprints/admin/routes_membership.py b/blueprints/admin/routes_membership.py index a600f88..7e313f4 100644 --- a/blueprints/admin/routes_membership.py +++ b/blueprints/admin/routes_membership.py @@ -76,15 +76,52 @@ def _enrich_company_from_krs(company, db): # Additional fields from KRS if data_dict.get('forma_prawna'): company.legal_form = data_dict['forma_prawna'] - if data_dict.get('nazwa_pełna'): - company.legal_name = data_dict['nazwa_pełna'] + if data_dict.get('nazwa'): + company.legal_name = data_dict['nazwa'] if data_dict.get('sposob_reprezentacji'): company.krs_representation = data_dict['sposob_reprezentacji'] + # REGON + regon = data_dict.get('regon', '') + if regon: + # KRS returns 14-digit REGON, strip trailing zeros for 9-digit form + company.regon = regon.rstrip('0') if len(regon) > 9 else regon + + # NIP (if missing) + if not company.nip and data_dict.get('nip'): + company.nip = data_dict['nip'] + + # Address + adres = data_dict.get('adres', {}) + if adres: + ulica = adres.get('ulica', '') + nr_domu = adres.get('nr_domu', '') + nr_lokalu = adres.get('nr_lokalu', '') + addr_street = ulica + if nr_domu: + addr_street += f' {nr_domu}' + if nr_lokalu: + addr_street += f'/{nr_lokalu}' + if addr_street and not company.address_street: + company.address_street = addr_street + miasto = adres.get('miejscowosc') or adres.get('poczta') + if miasto and not company.address_city: + company.address_city = miasto.title() + if adres.get('kod_pocztowy') and not company.address_postal: + company.address_postal = adres['kod_pocztowy'] + + # Capital kapital = data_dict.get('kapital', {}) if kapital.get('zakladowy'): company.capital_amount = kapital['zakladowy'] + # Primary PKD on Company model + pkd_list = data_dict.get('przedmiot_dzialalnosci', []) + primary_pkd = next((p for p in pkd_list if p.get('glowna')), pkd_list[0] if pkd_list else None) + if primary_pkd and not company.pkd_code: + company.pkd_code = primary_pkd.get('kod', '') + company.pkd_description = primary_pkd.get('opis', '') + # Import board members (zarząd) with db.no_autoflush: for osoba in data_dict.get('zarzad', []): @@ -124,8 +161,8 @@ def _enrich_company_from_krs(company, db): # Import PKD codes for pkd in data_dict.get('przedmiot_dzialalnosci', []): kod = pkd.get('kod', '') - nazwa = pkd.get('nazwa', '') - is_primary = pkd.get('glowny', False) + nazwa = pkd.get('opis', '') or pkd.get('nazwa', '') + is_primary = pkd.get('glowna', False) or pkd.get('glowny', False) if not kod: continue