feat: Add dedicated 'Dane z rejestrów urzędowych' section to company profile

- Display all CEIDG data: status, owner, PKD codes, contacts, addresses
- Display all KRS data: legal form, capital, KRS number
- Show data source banner with fetch timestamp and registry link
- Display additional business locations from CEIDG
- Show succession manager (zarządca sukcesyjny) if present
- All PKD codes displayed as tags with main PKD highlighted

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-02-01 07:37:06 +01:00
parent 7bfbfa6279
commit a73117ad4a

View File

@ -1155,7 +1155,227 @@
</div>
{% endif %}
<!-- Legal & Business Info - Card Based -->
<!-- ============================================================ -->
<!-- DANE Z REJESTRÓW URZĘDOWYCH (CEIDG / KRS) -->
<!-- ============================================================ -->
{% if company.ceidg_id or (company.krs and company.data_source == 'KRS API') %}
<div class="company-section">
<h2 class="section-title">
Dane z rejestrów urzędowych
{% if company.ceidg_id %}
<span style="background: #059669; color: white; font-size: 11px; padding: 4px 10px; border-radius: 20px; margin-left: 12px; font-weight: 600;">CEIDG</span>
{% elif company.krs and company.data_source == 'KRS API' %}
<span style="background: #2563eb; color: white; font-size: 11px; padding: 4px 10px; border-radius: 20px; margin-left: 12px; font-weight: 600;">KRS</span>
{% endif %}
</h2>
<!-- Source Info Banner -->
<div style="background: linear-gradient(135deg, #f0fdf4 0%, #ecfdf5 100%); border: 1px solid #86efac; border-radius: var(--radius-lg); padding: var(--spacing-md); margin-bottom: var(--spacing-lg); display: flex; align-items: center; gap: var(--spacing-md); flex-wrap: wrap;">
<svg width="20" height="20" fill="#059669" viewBox="0 0 24 24">
<path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"/>
</svg>
<div style="flex: 1;">
<div style="font-size: var(--font-size-sm); color: #166534; font-weight: 600;">
{% if company.ceidg_id %}
Dane pobrane z Centralnej Ewidencji i Informacji o Działalności Gospodarczej (CEIDG)
{% else %}
Dane pobrane z Krajowego Rejestru Sądowego (KRS)
{% endif %}
</div>
<div style="font-size: var(--font-size-xs); color: #15803d; margin-top: 2px;">
{% if company.ceidg_fetched_at %}
Pobrano: {{ company.ceidg_fetched_at.strftime('%d.%m.%Y %H:%M') }} &bull;
{% elif company.last_verified_at %}
Zweryfikowano: {{ company.last_verified_at.strftime('%d.%m.%Y %H:%M') }} &bull;
{% endif %}
{% if company.ceidg_id %}
ID: {{ company.ceidg_id[:8] }}...
{% elif company.krs %}
KRS: {{ company.krs }}
{% endif %}
</div>
</div>
<a href="{% if company.ceidg_id %}https://aplikacja.ceidg.gov.pl/ceidg/ceidg.public.ui/SearchDetails.aspx?Id={{ company.ceidg_id }}{% else %}https://ekrs.ms.gov.pl/web/wyszukiwarka-krs/strona-glowna/index.html{% endif %}"
target="_blank"
style="background: white; border: 1px solid #86efac; color: #166534; padding: 6px 12px; border-radius: var(--radius); font-size: var(--font-size-sm); text-decoration: none; font-weight: 500;">
Sprawdź w rejestrze →
</a>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--spacing-lg);">
<!-- ===== DANE CEIDG ===== -->
{% if company.ceidg_id %}
<!-- Status CEIDG -->
{% if company.ceidg_status %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid {% if company.ceidg_status == 'AKTYWNY' %}#22c55e{% elif company.ceidg_status == 'ZAWIESZONY' %}#f59e0b{% else %}#ef4444{% endif %};">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Status działalności</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: {% if company.ceidg_status == 'AKTYWNY' %}#22c55e{% elif company.ceidg_status == 'ZAWIESZONY' %}#f59e0b{% else %}#ef4444{% endif %}; margin-top: 4px;">
{{ company.ceidg_status }}
</div>
</div>
{% endif %}
<!-- Właściciel JDG -->
{% if company.owner_first_name %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #8b5cf6;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Właściciel</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #8b5cf6; margin-top: 4px;">
{{ company.owner_first_name }} {{ company.owner_last_name }}
</div>
<div style="font-size: var(--font-size-xs); color: var(--text-muted); margin-top: 4px;">Jednoosobowa działalność gospodarcza</div>
</div>
{% endif %}
<!-- Data rozpoczęcia -->
{% if company.business_start_date %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #059669;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Data rozpoczęcia działalności</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #059669; margin-top: 4px;">
{{ company.business_start_date.strftime('%d.%m.%Y') }}
</div>
{% set years_active = ((now.date() - company.business_start_date).days / 365.25)|int %}
{% if years_active > 0 %}
<div style="font-size: var(--font-size-xs); color: var(--text-muted); margin-top: 4px;">{{ years_active }} lat na rynku</div>
{% endif %}
</div>
{% endif %}
<!-- PKD główny -->
{% if company.pkd_code %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #7c3aed;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">PKD główny</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #7c3aed; font-family: monospace; margin-top: 4px;">
{{ company.pkd_code }}
</div>
{% if company.pkd_description %}
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); margin-top: 4px;">{{ company.pkd_description }}</div>
{% endif %}
</div>
{% endif %}
<!-- Dane kontaktowe z CEIDG (jeśli są w raw_data) -->
{% if company.ceidg_raw_data %}
{% set raw = company.ceidg_raw_data %}
{% if raw.email or raw.telefon or raw.www %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #0ea5e9; grid-column: span 2;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">Dane kontaktowe z CEIDG</div>
<div style="display: flex; flex-wrap: wrap; gap: var(--spacing-lg);">
{% if raw.email %}
<div>
<div style="font-size: var(--font-size-xs); color: var(--text-muted);">Email</div>
<a href="mailto:{{ raw.email }}" style="color: #0ea5e9; font-weight: 600;">{{ raw.email }}</a>
</div>
{% endif %}
{% if raw.telefon %}
<div>
<div style="font-size: var(--font-size-xs); color: var(--text-muted);">Telefon</div>
<a href="tel:{{ raw.telefon }}" style="color: #0ea5e9; font-weight: 600;">{{ raw.telefon }}</a>
</div>
{% endif %}
{% if raw.www %}
<div>
<div style="font-size: var(--font-size-xs); color: var(--text-muted);">Strona WWW</div>
<a href="https://{{ raw.www }}" target="_blank" style="color: #0ea5e9; font-weight: 600;">{{ raw.www }}</a>
</div>
{% endif %}
</div>
</div>
{% endif %}
<!-- Wszystkie PKD z CEIDG -->
{% if raw.pkd and raw.pkd|length > 1 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #a855f7; grid-column: span 2;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Wszystkie kody PKD ({{ raw.pkd|length }})
</div>
<div style="display: flex; flex-wrap: wrap; gap: var(--spacing-sm); max-height: 200px; overflow-y: auto;">
{% for pkd in raw.pkd %}
<span style="background: {% if pkd.kod == company.pkd_code %}#7c3aed; color: white;{% else %}var(--surface); color: var(--text-secondary);{% endif %} padding: 4px 10px; border-radius: var(--radius); font-size: var(--font-size-sm); border: 1px solid var(--border);" title="{{ pkd.nazwa }}">
{{ pkd.kod }}{% if pkd.kod == company.pkd_code %} ★{% endif %}
</span>
{% endfor %}
</div>
</div>
{% endif %}
<!-- Zarządca sukcesyjny -->
{% if raw.zarzadcaSukcesyjny %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #f59e0b;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Zarządca sukcesyjny</div>
<div style="font-size: var(--font-size-lg); font-weight: 600; color: #f59e0b; margin-top: 4px;">
{{ raw.zarzadcaSukcesyjny.imie }} {{ raw.zarzadcaSukcesyjny.nazwisko }}
</div>
</div>
{% endif %}
<!-- Dodatkowe adresy działalności -->
{% if raw.adresyDzialalnosciDodatkowe and raw.adresyDzialalnosciDodatkowe|length > 0 %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #64748b; grid-column: span 2;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--spacing-md);">
Dodatkowe miejsca działalności ({{ raw.adresyDzialalnosciDodatkowe|length }})
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--spacing-md);">
{% for addr in raw.adresyDzialalnosciDodatkowe %}
<div style="font-size: var(--font-size-sm); color: var(--text-primary);">
<strong>{{ addr.opisNietypowegoMiejsca|default('Lokalizacja') }}</strong><br>
{{ addr.ulica }} {{ addr.budynek }}{% if addr.lokal %}/{{ addr.lokal }}{% endif %}<br>
{{ addr.kod }} {{ addr.miasto }}
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% endif %}
{% endif %}
<!-- ===== KONIEC DANE CEIDG ===== -->
<!-- ===== DANE KRS ===== -->
{% if company.krs and company.data_source == 'KRS API' and not company.ceidg_id %}
<!-- Forma prawna -->
{% if company.legal_form %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #2563eb;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Forma prawna</div>
<div style="font-size: var(--font-size-lg); font-weight: 700; color: #2563eb; margin-top: 4px;">
{{ company.legal_form }}
</div>
</div>
{% endif %}
<!-- Kapitał zakładowy -->
{% if company.capital_amount %}
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #22c55e;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Kapitał zakładowy</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #22c55e; margin-top: 4px;">
{{ '{:,.2f}'.format(company.capital_amount).replace(',', ' ') }} PLN
</div>
</div>
{% endif %}
<!-- Numer KRS -->
<div style="background: var(--background); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid #6366f1;">
<div style="font-size: var(--font-size-sm); color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.05em;">Numer KRS</div>
<div style="font-size: var(--font-size-xl); font-weight: 700; color: #6366f1; font-family: monospace; margin-top: 4px;">
{{ company.krs }}
</div>
</div>
{% endif %}
<!-- ===== KONIEC DANE KRS ===== -->
</div>
</div>
{% endif %}
<!-- ============================================================ -->
<!-- KONIEC: DANE Z REJESTRÓW URZĘDOWYCH -->
<!-- ============================================================ -->
<!-- Legacy: Legal & Business Info - Card Based -->
<div class="company-section">
<h2 class="section-title">Informacje prawne i biznesowe</h2>