<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Michał Staszewski</title><link>https://www.michalstaszewski.pl/</link><description>Recent content on Michał Staszewski</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 19 Apr 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://www.michalstaszewski.pl/index.xml" rel="self" type="application/rss+xml"/><item><title>Kalkulator rekompensaty za koszty odzyskiwania należności</title><link>https://www.michalstaszewski.pl/kalkulator-rekompensaty/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.michalstaszewski.pl/kalkulator-rekompensaty/</guid><description>&lt;style>
 .calculator-container {
 background-color: #fff;
 padding: 20px;
 border-radius: 8px;
 box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
 max-width: 400px;
 margin: 20px auto;
 font-family: Arial, sans-serif;
 }
 .calculator-container h1 {
 font-size: 24px;
 text-align: center;
 margin-bottom: 20px;
 color: #333;
 }
 .calculator-container label {
 display: block;
 font-size: 14px;
 color: #555;
 margin-bottom: 5px;
 }
 .calculator-container input {
 width: 100%;
 padding: 8px;
 border: 1px solid #ccc;
 border-radius: 4px;
 box-sizing: border-box;
 margin-bottom: 15px;
 font-size: 14px;
 }
 .calculator-container input:focus {
 border-color: #4a90e2;
 outline: none;
 box-shadow: 0 0 5px rgba(74, 144, 226, 0.3);
 }
 .calculator-container button {
 width: 100%;
 padding: 10px;
 background-color: #4a90e2;
 color: #fff;
 border: none;
 border-radius: 4px;
 font-size: 16px;
 cursor: pointer;
 }
 .calculator-container button:hover {
 background-color: #357abd;
 }
 .calculator-container #result {
 margin-top: 15px;
 font-size: 14px;
 color: #333;
 }
 .calculator-container #result p {
 margin: 0 0 0 0;
 }
	.calculator-container .error {
 color: #d32f2f;
 font-size: 14px;
 }
 .calculator-container .footer {
 margin-top: 15px;
 font-size: 12px;
 color: #777;
 text-align: center;
 }
&lt;/style>
&lt;div class="calculator-container">
 &lt;div>
 &lt;label for="amount">Kwota należności (zł):&lt;/label>
 &lt;input type="number" id="amount" step="0.01" min="0.01" required>
 &lt;/div>
 &lt;div>
 &lt;label for="dueDate">Data wymagalności roszczenia:&lt;/label>
 &lt;input type="date" id="dueDate" required>
 &lt;/div>
 &lt;button onclick="calculateCompensation()">Oblicz&lt;/button>
 &lt;div id="result">&lt;/div>
 &lt;div class="footer">
 Obliczenia na podstawie art. 10 ustawy z dnia 8 marca 2013 r. o przeciwdziałaniu nadmiernym opóźnieniom w transakcjach handlowych.
 &lt;/div>
&lt;/div>
&lt;script>
 const formatterPln = new Intl.NumberFormat('pl-PL', { style: 'currency', currency: 'PLN' });
 const formatterEur = new Intl.NumberFormat('pl-PL', { style: 'currency', currency: 'EUR' });

 const beforeThreshold = new Date(Date.UTC(2013, 2, 28)); // 28.03.2013
 const afterThreshold = new Date(Date.UTC(2019, 11, 31)); // 31.12.2019
	
	// Ustaw domyślną datę na dzisiejszą przy załadowaniu strony
 document.addEventListener('DOMContentLoaded', () => {
 const dueDateInput = document.getElementById('dueDate');
 const today = new Date();
 dueDateInput.value = today.toISOString().split('T')[0];
 });

 async function fetchEurPlnRate(dueDate) {
 const year = dueDate.getUTCFullYear();
 const month = dueDate.getUTCMonth();
 const prevMonth = month === 0 ? 11 : month - 1;
 const prevYear = month === 0 ? year - 1 : year;
 const startDate = new Date(Date.UTC(prevYear, prevMonth, 1));
 const endDate = new Date(Date.UTC(prevYear, prevMonth + 1, 0));
 const startDateStr = startDate.toISOString().split('T')[0];
 const endDateStr = endDate.toISOString().split('T')[0];

 try {
 const response = await fetch(`https://api.nbp.pl/api/exchangerates/rates/A/EUR/${startDateStr}/${endDateStr}/?format=json`);
 if (!response.ok) throw new Error('Nie udało się pobrać kursów EUR/PLN');
 const data = await response.json();
 if (data.rates.length === 0) throw new Error('Brak kursów EUR/PLN dla podanego miesiąca');
 const lastRate = data.rates[data.rates.length - 1];
 return { rate: lastRate.mid, date: new Date(lastRate.effectiveDate) };
 } catch (error) {
 throw new Error('Błąd: ' + error.message);
 }
 }

 async function calculateCompensation() {
 const amount = parseFloat(document.getElementById('amount').value);
 const dueDateInput = document.getElementById('dueDate').value;
 const [year, month, day] = dueDateInput.split('-').map(Number);
 const dueDate = new Date(Date.UTC(year, month - 1, day));
 const resultDiv = document.getElementById('result');

 if (isNaN(amount) || amount &lt;= 0 || !dueDateInput) {
 resultDiv.innerHTML = '&lt;p class="error">Proszę podać poprawną kwotę należności (większą od zera) i datę wymagalności roszczenia.&lt;/p></description></item><item><title>Kontakt</title><link>https://www.michalstaszewski.pl/kontakt/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.michalstaszewski.pl/kontakt/</guid><description>&lt;p>Jeśli chcesz się ze mną skontaktować, możesz zrobić to na dwa sposoby:&lt;/p>
&lt;p>Telefon: &lt;a href="tel:&amp;#43;48508149291" >+48 508 149 291&lt;/a>&lt;/p>
&lt;p>E-mail: &lt;a href="mailto:mstaszewski@jmslegal.pl" >mstaszewski@jmslegal.pl&lt;/a>&lt;/p>
&lt;h2 id="vcard">
 vCard
 &lt;a class="heading-link" href="#vcard">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Dla wygody możesz także &lt;a href="https://www.michalstaszewski.pl/michal-staszewski.vcf" >pobrać moją wizytówkę w formacie vCard&lt;/a> albo zeskanować poniższy kod QR:&lt;/p>
&lt;p>&lt;img src="https://www.michalstaszewski.pl/images/vcard-qr-michal-staszewski.png" alt="Wizytówka Michała Staszewskiego" title="Wizytówka Michała Staszewskiego">&lt;/p></description></item><item><title>O mnie</title><link>https://www.michalstaszewski.pl/o-mnie/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.michalstaszewski.pl/o-mnie/</guid><description>&lt;h2 id="kim-jestem">
 Kim jestem?
 &lt;a class="heading-link" href="#kim-jestem">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Nazywam się &lt;strong>Michał Staszewski&lt;/strong> i wykonuję zawód &lt;strong>radcy prawnego&lt;/strong>. Jestem wpisany na listę radców prawnych prowadzoną przez Radę Okręgowej Izby Radców Prawnych w Gdańsku pod numerem &lt;strong>GD/GD/3058&lt;/strong>. W wolnym czasie interesuję się nowymi technologiami oraz programowaniem. Zdobytą wiedzę staram się wykorzystać w mojej praktyce prawniczej.&lt;/p>
&lt;h2 id="czym-się-zajmuję">
 Czym się zajmuję?
 &lt;a class="heading-link" href="#czym-si%c4%99-zajmuj%c4%99">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Zajmuję się udzielaniem pomocy prawnej na rzecz klientów indywidualnych i biznesowych. Pomagam moim klientom zarówno na sali sądowej, jak i poza nią. Specjalizuję się w prawie cywilnym i prawie pracy. Od kilku lat moim szczególnym zainteresowaniem cieszy się problematyka związana z &lt;a href="https://jmslegal.pl/sankcja-kredytu-darmowego/" class="external-link" target="_blank" rel="noopener">sankcją kredytu darmowego&lt;/a>.&lt;/p></description></item><item><title>Projekty</title><link>https://www.michalstaszewski.pl/projekty/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.michalstaszewski.pl/projekty/</guid><description>&lt;p>W tym miejscu znajdziesz moje projekty programistyczne:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="https://www.michalstaszewski.pl/kalkulator-rekompensaty/" >Kalkulator rekompensaty za koszty odzyskiwania należności&lt;/a> - program, który pozwola obliczyć rekompensatę za koszty odzyskiwania należności zgodnie z art. 10 ustawy z dnia 8 marca 2013 r. o przeciwdziałaniu nadmiernym opóźnieniom w transakcjach handlowych. Dane o średnim kursie euro pobierane są z bazy danych NBP.&lt;/li>
&lt;/ol></description></item></channel></rss>