generator wypowiedzenia oc

Kończy Ci się OC? Chcesz wygodnie złożyć wypowiedzenie OC? Nie chce Ci się pisać po papierze? Uzupełnij formularz swoimi danymi i wygeneruj PDF, który wystarczy tylko wydrukować i podpisać.

Dane właściciela pojazdu

Dane polisy

Podstawa prawna wypowiedzenia

Dane pojazdu

Dane wpisane do formularza są przetwarzane wyłącznie lokalnie w przeglądarce. Generator nie zapisuje ich, nie przechowuje i nie wysyła na serwer.
', '', '', '' ].join(''); container.appendChild(wrapper); } function renumberCoOwners(container) { container.querySelectorAll('.oc-termination-generator__coowner').forEach(function (block, index) { const title = block.querySelector('.oc-termination-generator__coowner-title'); if (title) { title.textContent = 'Współwłaściciel ' + (index + 1); } }); } function syncLegalBasisUI(root) { const selected = root.querySelector('input[name="legalBasis"]:checked'); const currentPolicyNumberField = getField(root, 'currentPolicyNumber'); const field28a = root.querySelector('[data-role="field-28a"]'); const warning31 = root.querySelector('[data-role="warning-31"]'); const value = selected ? selected.value : ''; field28a.hidden = value !== 'art. 28a'; warning31.hidden = value !== 'art. 31'; currentPolicyNumberField.required = value === 'art. 28a'; if (value !== 'art. 28a') { currentPolicyNumberField.value = ''; currentPolicyNumberField.setCustomValidity(''); } } function setStatus(statusBox, message) { statusBox.textContent = message; statusBox.classList.toggle('is-visible', Boolean(message)); } function validate(root) { const form = root.querySelector('.oc-termination-generator__form'); const statusBox = root.querySelector('[data-role="status"]'); const legalBasis = root.querySelector('input[name="legalBasis"]:checked'); const currentPolicyNumberField = getField(root, 'currentPolicyNumber'); currentPolicyNumberField.setCustomValidity(''); if (!form.checkValidity()) { form.reportValidity(); setStatus(statusBox, 'Uzupełnij wszystkie wymagane pola przed wygenerowaniem dokumentu.'); return false; } if (!legalBasis) { setStatus(statusBox, 'Wybierz podstawę prawną wypowiedzenia.'); return false; } if (legalBasis.value === 'art. 28a' && !currentPolicyNumberField.value.trim()) { currentPolicyNumberField.setCustomValidity('Wpisz numer polisy automatycznie wznowionej.'); currentPolicyNumberField.reportValidity(); setStatus(statusBox, 'Dla art. 28a wpisz numer polisy automatycznie wznowionej.'); return false; } const coOwnerBlocks = root.querySelectorAll('.oc-termination-generator__coowner'); for (let i = 0; i < coOwnerBlocks.length; i += 1) { const block = coOwnerBlocks[i]; const inputs = block.querySelectorAll('input'); for (let j = 0; j < inputs.length; j += 1) { const input = inputs[j]; if (!input.value.trim()) { input.reportValidity(); setStatus(statusBox, 'Uzupełnij dane wszystkich dodanych współwłaścicieli.'); return false; } } } setStatus(statusBox, ''); return true; } function collectData(root) { const legalBasis = root.querySelector('input[name="legalBasis"]:checked').value; const coOwners = Array.from(root.querySelectorAll('.oc-termination-generator__coowner')).map(function (block) { return { name: block.querySelector('[data-field="coOwnerName"]').value.trim(), peselNip: block.querySelector('[data-field="coOwnerPeselNip"]').value.trim(), address: block.querySelector('[data-field="coOwnerAddress"]').value.trim() }; }); return { ownerName: getField(root, 'ownerName').value.trim(), ownerPeselNip: getField(root, 'ownerPeselNip').value.trim(), ownerAddress: getField(root, 'ownerAddress').value.trim(), policyNumber: getField(root, 'policyNumber').value.trim(), insuranceCompany: getField(root, 'insuranceCompany').value.trim(), policyEndDate: getField(root, 'policyEndDate').value.trim(), currentPolicyNumber: getField(root, 'currentPolicyNumber').value.trim(), legalBasis: legalBasis, year: getField(root, 'year').value.trim(), brand: getField(root, 'brand').value.trim(), model: getField(root, 'model').value.trim(), registrationNumber: getField(root, 'registrationNumber').value.trim(), vin: getField(root, 'vin').value.trim(), coOwners: coOwners }; } function formatIsoDateToPolish(dateValue) { const parts = dateValue.split('-'); if (parts.length !== 3) { return dateValue; } return [parts[2], parts[1], parts[0]].join('.'); } function getTodayInPolishFormat() { const now = new Date(); const day = String(now.getDate()).padStart(2, '0'); const month = String(now.getMonth() + 1).padStart(2, '0'); const year = String(now.getFullYear()); return [day, month, year].join('.'); } function escapeHtml(value) { return String(value) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } function buildMainText(data) { const formattedPolicyEndDate = formatIsoDateToPolish(data.policyEndDate); if (data.legalBasis === 'art. 28') { return 'Niniejszym wypowiadam umowę ubezpieczenia OC posiadacza pojazdu o numerze ' + escapeHtml(data.policyNumber) + ' zgodnie z art. 28 ustawy o ubezpieczeniach obowiązkowych. Umowa wygaśnie z dniem ' + escapeHtml(formattedPolicyEndDate) + '.'; } if (data.legalBasis === 'art. 28a') { return 'Niniejszym wypowiadam umowę ubezpieczenia OC posiadacza pojazdu o numerze ' + escapeHtml(data.currentPolicyNumber) + ', która została automatycznie wznowiona, zgodnie z art. 28a ustawy o ubezpieczeniach obowiązkowych. Poprzednia umowa posiadała numer ' + escapeHtml(data.policyNumber) + '.'; } return 'Niniejszym wypowiadam umowę ubezpieczenia OC posiadacza pojazdu o numerze ' + escapeHtml(data.policyNumber) + ' zgodnie z art. 31 ustawy o ubezpieczeniach obowiązkowych, w związku z zawarciem nowej umowy ubezpieczenia OC dla tego pojazdu w innym zakładzie ubezpieczeń.'; } function buildDocumentHtml(data) { const coOwnersHtml = data.coOwners.length ? [ '
', '

Współwłaściciele

', data.coOwners.map(function (coOwner, index) { return [ '
', '

Współwłaściciel ' + (index + 1) + ':

', '

' + escapeHtml(coOwner.name) + '

', '

PESEL / NIP: ' + escapeHtml(coOwner.peselNip) + '

', '

' + escapeHtml(coOwner.address) + '

', '
' ].join(''); }).join(''), '
' ].join('') : ''; return [ '', '', '', '', 'Wypowiedzenie OC', '', '', '', '
', '
' + escapeHtml(getTodayInPolishFormat()) + '
', '
', '

' + escapeHtml(data.ownerName) + '

', '

PESEL / NIP: ' + escapeHtml(data.ownerPeselNip) + '

', '

' + escapeHtml(data.ownerAddress) + '

', '
', '
', '

' + escapeHtml(data.insuranceCompany) + '

', '
', '

WYPOWIEDZENIE UMOWY UBEZPIECZENIA OC POSIADACZA POJAZDU

', '
', '

' + buildMainText(data) + '

', '
', '
', '

Dane pojazdu

', '

Marka: ' + escapeHtml(data.brand) + '

', '

Model: ' + escapeHtml(data.model) + '

', '

Rok produkcji: ' + escapeHtml(data.year) + '

', '

Numer rejestracyjny: ' + escapeHtml(data.registrationNumber) + '

', '

Numer VIN: ' + escapeHtml(data.vin) + '

', '
', coOwnersHtml, '
', '

Z poważaniem,

', '

(podpis)

', '
', '
', '', '' ].join(''); } function createHiddenRenderContainer(documentHtml) { const wrapper = document.createElement('div'); wrapper.setAttribute('aria-hidden', 'true'); wrapper.style.position = 'fixed'; wrapper.style.left = '-99999px'; wrapper.style.top = '0'; wrapper.style.width = '210mm'; wrapper.style.background = '#fff'; wrapper.innerHTML = documentHtml; document.body.appendChild(wrapper); return wrapper; } function sanitizeFilenamePart(value) { return value .toLowerCase() .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .replace(/[^a-z0-9]+/g, '-') .replace(/^-+|-+$/g, '') .replace(/-{2,}/g, '-'); } function buildFilename(data) { const company = sanitizeFilenamePart(data.insuranceCompany) || 'firma'; const vehicle = sanitizeFilenamePart(data.brand + '-' + data.model) || 'pojazd'; const registration = sanitizeFilenamePart(data.registrationNumber) || 'rejestracja'; return 'wypowiedzenie-oc-' + company + '-' + vehicle + '-' + registration + '.pdf'; } function getConfiguredPdfLibraryUrl(root) { const configuredPath = root.getAttribute('data-html2pdf-src') || window.OC_TERMINATION_GENERATOR_PDF_SRC || ''; if (!configuredPath) { return ''; } try { const url = new URL(configuredPath, window.location.href); if (url.origin !== window.location.origin) { return ''; } return url.toString(); } catch (error) { return ''; } } function ensurePdfLibrary(root) { if (typeof window.html2pdf === 'function') { return Promise.resolve(); } if (window.__ocTerminationPdfLibraryPromise) { return window.__ocTerminationPdfLibraryPromise; } const scriptUrl = getConfiguredPdfLibraryUrl(root); if (!scriptUrl) { return Promise.reject(new Error('Brak poprawnej lokalnej ścieżki do biblioteki PDF.')); } window.__ocTerminationPdfLibraryPromise = new Promise(function (resolve, reject) { const existingScript = Array.from(document.querySelectorAll('script')).find(function (script) { return script.src === scriptUrl; }); if (existingScript) { existingScript.addEventListener('load', function () { resolve(); }, { once: true }); existingScript.addEventListener('error', function () { reject(new Error('Nie udało się wczytać lokalnej biblioteki PDF.')); }, { once: true }); return; } const script = document.createElement('script'); script.src = scriptUrl; script.async = true; script.onload = function () { resolve(); }; script.onerror = function () { reject(new Error('Nie udało się wczytać lokalnej biblioteki PDF.')); }; document.head.appendChild(script); }).then(function () { if (typeof window.html2pdf !== 'function') { throw new Error('Lokalna biblioteka PDF została wczytana, ale funkcja html2pdf jest niedostępna.'); } }).catch(function (error) { window.__ocTerminationPdfLibraryPromise = null; throw error; }); return window.__ocTerminationPdfLibraryPromise; } async function handleDownloadPdf(root) { const statusBox = root.querySelector('[data-role="status"]'); if (!validate(root)) { return; } const data = collectData(root); const documentHtml = buildDocumentHtml(data); const filename = buildFilename(data); const renderContainer = createHiddenRenderContainer(documentHtml); setStatus(statusBox, 'Przygotowuję PDF...'); try { await ensurePdfLibrary(root); await window.html2pdf().set({ margin: [0, 0, 0, 0], filename: filename, image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, useCORS: false, logging: false, backgroundColor: '#ffffff' }, jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }, pagebreak: { mode: ['css', 'legacy'] } }).from(renderContainer.querySelector('.oc-letter')).save(); setStatus(statusBox, ''); } catch (error) { setStatus( statusBox, 'Nie udało się wygenerować PDF. Upewnij się, że lokalna biblioteka html2pdf.js jest dostępna w WordPressie pod ścieżką z atrybutu data-html2pdf-src, albo użyj opcji "Drukuj / Zapisz jako PDF".' ); } finally { renderContainer.remove(); } } function handlePrint(root) { const statusBox = root.querySelector('[data-role="status"]'); if (!validate(root)) { return; } const data = collectData(root); const documentHtml = buildDocumentHtml(data); const iframe = document.createElement('iframe'); let printTriggered = false; iframe.style.position = 'fixed'; iframe.style.right = '0'; iframe.style.bottom = '0'; iframe.style.width = '0'; iframe.style.height = '0'; iframe.style.border = '0'; iframe.setAttribute('aria-hidden', 'true'); document.body.appendChild(iframe); const printWindow = iframe.contentWindow; if (!printWindow) { iframe.remove(); setStatus(statusBox, 'Nie udało się otworzyć widoku do druku.'); return; } function runPrint() { if (printTriggered) { return; } printTriggered = true; printWindow.focus(); printWindow.print(); setTimeout(function () { iframe.remove(); }, 1000); } iframe.onload = runPrint; printWindow.document.open(); printWindow.document.write(documentHtml); printWindow.document.close(); setTimeout(function () { if (document.body.contains(iframe)) { runPrint(); } }, 350); setStatus(statusBox, ''); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initializeGenerators); } else { initializeGenerators(); } }());

Jak wypowiedzieć OC za pomocą generatora?

Wypowiedzenie OC to proces, który przeprowadzisz szybko i sprawnie za pomocą specjalnego generatora online. Generator dokumentów wypowiedzenia OC tworzy dla Ciebie gotowy dokument, zgodny z wymogami prawnymi i akceptowany przez wszystkie towarzystwa ubezpieczeniowe.

Jak działa generator wypowiedzenia OC?

Generator wypowiedzenia OC to narzędzie, które automatyzuje cały proces tworzenia dokumentu rezygnacji z polisy. Wprowadź wymagane dane, a system wygeneruje poprawnie sformułowane pismo. Dzięki temu zaoszczędzisz czas i zyskasz pewność, że dokument spełnia wszystkie wymogi formalne.

Co musisz wiedzieć przed wypowiedzeniem OC?

Zanim przystąpisz do wypełniania formularza, przygotuj następujące informacje:

  • Numer polisy OC.
  • Dane towarzystwa ubezpieczeniowego.
  • Dane pojazdu (numer rejestracyjny, marka, model).
  • Swoje dane osobowe i adresowe.

Przepisy wymagają, abyś złożył wypowiedzenie najpóźniej dzień przed końcem okresu ubezpieczenia. Pamiętaj o dotrzymaniu tego terminu – w przeciwnym razie umowa zostanie automatycznie przedłużona.

Jak krok po kroku wypełnić generator wypowiedzenia OC

Jak krok po kroku wypełnić generator wypowiedzenia OC?

Proces wypełnienia generatora jest prosty i intuicyjny:

Wprowadź dane do formularza

Wypełnij wszystkie pola w formularzu. Dodaj prawidłowe dane osobowe oraz informacje dotyczące samochodu i polisy. Małe błędy mogą spowodować, że dokument nie zostanie uznany. Dokładnie sprawdź wszystkie wpisane informacje.

Wybierz podstawę prawną wypowiedzenia

Generator zaproponuje Ci odpowiednią podstawę prawną – najczęściej będzie to art. 28 lub art. 28a ustawy o ubezpieczeniach obowiązkowych. Opcje zależą od Twojej konkretnej sytuacji:

  • Art. 28 – wypowiedzenie z końcem okresu ochrony.
  • Art. 28a – wypowiedzenie automatycznie wznowionej umowy OC.
  • Art. 31 – wypowiedzenie OC przez nabywcę pojazdu.

Pobierz i wydrukuj dokument

Po wygenerowaniu dokumentu pobierz go i wydrukuj. Podpisz dokument własnoręcznie – bez tego nie będzie ważny. Własnoręczny podpis jest obowiązkowy.

Wyślij dokument do ubezpieczyciela

Doręcz dokument do towarzystwa ubezpieczeniowego. Zrobisz to na kilka sposobów:

  • Osobiście w oddziale (poproś o potwierdzenie złożenia pisma).
  • Listem poleconym za potwierdzeniem odbioru.
  • E-mailem, jeśli ubezpieczyciel dopuszcza ta