feat: Add registry lookup explanation and real-time status
- Add expandable info section explaining the lookup workflow - Explain why NIP→Biała Lista→KRS is needed (KRS API doesn't support NIP) - Show real-time status during lookup process - Better UX for understanding multi-step data retrieval Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
c73e90bc70
commit
5a611d92e1
@ -135,6 +135,95 @@
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.lookup-status {
|
||||
margin-top: var(--spacing-sm);
|
||||
padding: var(--spacing-sm) var(--spacing-md);
|
||||
background: var(--background);
|
||||
border-radius: var(--radius);
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.lookup-status.loading {
|
||||
background: rgba(59, 130, 246, 0.1);
|
||||
color: #3b82f6;
|
||||
}
|
||||
|
||||
.lookup-status.success {
|
||||
background: var(--success-light);
|
||||
color: var(--success);
|
||||
}
|
||||
|
||||
.lookup-status.error {
|
||||
background: var(--error-light);
|
||||
color: var(--error);
|
||||
}
|
||||
|
||||
.registry-info {
|
||||
margin-top: var(--spacing-lg);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: var(--radius);
|
||||
background: var(--background);
|
||||
}
|
||||
|
||||
.registry-info-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--spacing-sm);
|
||||
padding: var(--spacing-sm) var(--spacing-md);
|
||||
cursor: pointer;
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--text-secondary);
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.registry-info-header:hover {
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.registry-info-toggle {
|
||||
margin-left: auto;
|
||||
transition: transform 0.2s;
|
||||
}
|
||||
|
||||
.registry-info.open .registry-info-toggle {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.registry-info-content {
|
||||
display: none;
|
||||
padding: var(--spacing-md);
|
||||
padding-top: 0;
|
||||
font-size: var(--font-size-sm);
|
||||
color: var(--text-secondary);
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.registry-info.open .registry-info-content {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.registry-info-content ol {
|
||||
margin: var(--spacing-xs) 0 var(--spacing-md) var(--spacing-lg);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.registry-info-content li {
|
||||
margin-bottom: var(--spacing-xs);
|
||||
}
|
||||
|
||||
.registry-info-content p {
|
||||
margin: var(--spacing-sm) 0;
|
||||
}
|
||||
|
||||
.registry-info-note {
|
||||
padding: var(--spacing-sm);
|
||||
background: rgba(251, 191, 36, 0.1);
|
||||
border-left: 3px solid var(--warning);
|
||||
border-radius: 0 var(--radius) var(--radius) 0;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.nip-lookup {
|
||||
display: flex;
|
||||
gap: var(--spacing-sm);
|
||||
@ -392,9 +481,35 @@
|
||||
|
||||
<div class="form-group">
|
||||
<button type="button" class="btn-lookup" id="btnLookup" style="width: 100%;">
|
||||
Sprawdź w rejestrze (KRS lub CEIDG)
|
||||
Pobierz dane z rejestru
|
||||
</button>
|
||||
<div class="form-hint">Podaj NIP. Dla spółek (Sp. z o.o., SA) podaj też KRS aby pobrać dane z rejestru.</div>
|
||||
<div id="lookupStatus" class="lookup-status" style="display: none;"></div>
|
||||
</div>
|
||||
|
||||
<div class="registry-info">
|
||||
<div class="registry-info-header" onclick="toggleRegistryInfo()">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||
<circle cx="12" cy="12" r="10"/>
|
||||
<path d="M12 16v-4M12 8h.01"/>
|
||||
</svg>
|
||||
Jak działa pobieranie danych?
|
||||
<span class="registry-info-toggle">▼</span>
|
||||
</div>
|
||||
<div class="registry-info-content" id="registryInfoContent">
|
||||
<p><strong>Dla spółek</strong> (Sp. z o.o., SA, itp.):</p>
|
||||
<ol>
|
||||
<li><strong>Biała Lista VAT</strong> (Ministerstwo Finansów) — na podstawie NIP pobieramy numer KRS</li>
|
||||
<li><strong>KRS Open API</strong> (Ministerstwo Sprawiedliwości) — na podstawie KRS pobieramy pełne dane firmy</li>
|
||||
</ol>
|
||||
<p><strong>Dla jednoosobowych działalności</strong> (JDG):</p>
|
||||
<ol>
|
||||
<li><strong>CEIDG</strong> (dane.biznes.gov.pl) — bezpośrednio na podstawie NIP</li>
|
||||
</ol>
|
||||
<p class="registry-info-note">
|
||||
Dlaczego tak? KRS Open API nie obsługuje wyszukiwania po NIP — wymaga numeru KRS.
|
||||
Dlatego najpierw sprawdzamy Białą Listę VAT, która zwraca KRS dla danego NIP.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="registryPreview" class="registry-preview" style="display: none;">
|
||||
@ -705,10 +820,21 @@
|
||||
const nipInput = document.getElementById('nipInput');
|
||||
const krsInput = document.getElementById('krsInput');
|
||||
const btnLookup = document.getElementById('btnLookup');
|
||||
const lookupStatus = document.getElementById('lookupStatus');
|
||||
const registryPreview = document.getElementById('registryPreview');
|
||||
const registrySource = document.getElementById('registrySource');
|
||||
const registryData = document.getElementById('registryData');
|
||||
|
||||
function toggleRegistryInfo() {
|
||||
document.querySelector('.registry-info').classList.toggle('open');
|
||||
}
|
||||
|
||||
function setLookupStatus(message, type) {
|
||||
lookupStatus.textContent = message;
|
||||
lookupStatus.className = 'lookup-status ' + type;
|
||||
lookupStatus.style.display = message ? 'block' : 'none';
|
||||
}
|
||||
|
||||
btnLookup.addEventListener('click', async function() {
|
||||
const nip = nipInput.value.replace(/[\s-]/g, '');
|
||||
const krs = krsInput ? krsInput.value.replace(/[\s-]/g, '') : '';
|
||||
@ -719,7 +845,14 @@ btnLookup.addEventListener('click', async function() {
|
||||
}
|
||||
|
||||
btnLookup.disabled = true;
|
||||
btnLookup.innerHTML = '<span class="loading-spinner"></span> Sprawdzam w rejestrach...';
|
||||
btnLookup.innerHTML = '<span class="loading-spinner"></span> Pobieranie...';
|
||||
|
||||
// Show step-by-step status
|
||||
if (krs && krs.length >= 7) {
|
||||
setLookupStatus('Pobieram dane z KRS Open API (Ministerstwo Sprawiedliwości)...', 'loading');
|
||||
} else {
|
||||
setLookupStatus('Sprawdzam NIP w Białej Liście VAT (Ministerstwo Finansów)...', 'loading');
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/membership/lookup-nip', {
|
||||
@ -731,6 +864,12 @@ btnLookup.addEventListener('click', async function() {
|
||||
const result = await response.json();
|
||||
|
||||
if (result.success && result.data) {
|
||||
if (result.source === 'KRS') {
|
||||
setLookupStatus('✓ Dane pobrane z KRS Open API', 'success');
|
||||
} else if (result.source === 'CEIDG') {
|
||||
setLookupStatus('✓ Dane pobrane z CEIDG (jednoosobowa działalność)', 'success');
|
||||
}
|
||||
|
||||
registrySource.textContent = result.source;
|
||||
registryPreview.classList.add('success');
|
||||
registryPreview.style.display = 'block';
|
||||
@ -753,6 +892,7 @@ btnLookup.addEventListener('click', async function() {
|
||||
if (data.regon) document.querySelector('[name="regon"]').value = data.regon;
|
||||
document.querySelector('[name="registry_source"]').value = result.source;
|
||||
} else {
|
||||
setLookupStatus('Firma nie znaleziona w KRS ani CEIDG — wypełnij dane ręcznie', 'error');
|
||||
registryPreview.classList.remove('success');
|
||||
registryPreview.style.display = 'block';
|
||||
registryData.innerHTML = '<p>Firma nie została znaleziona w rejestrze. Wypełnij dane ręcznie.</p>';
|
||||
@ -760,10 +900,10 @@ btnLookup.addEventListener('click', async function() {
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Lookup error:', error);
|
||||
alert('Błąd podczas sprawdzania w rejestrach');
|
||||
setLookupStatus('Błąd połączenia z rejestrem — spróbuj ponownie', 'error');
|
||||
} finally {
|
||||
btnLookup.disabled = false;
|
||||
btnLookup.innerHTML = 'Sprawdź w rejestrze (KRS lub CEIDG)';
|
||||
btnLookup.innerHTML = 'Pobierz dane z rejestru';
|
||||
}
|
||||
});
|
||||
{% endif %}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user