// pesito — Live Calculator with iOS sliders + honest results const Calculator = ({ lang, principal, setPrincipal, term, setTerm }) => { // formula: daily 0.30%, comisión apertura 2%, total = principal*(1+daily*14*term) approx const dailyRate = 0.003; const apertura = Math.round(principal * 0.02); const interest = principal * dailyRate * 14 * term; const total = Math.round(principal + interest + apertura); const quincenal = Math.round(total / term); // CAT illustrative — scales with term, fixed range to feel honest const cat = Math.round(420 + (term <= 4 ? 180 : term <= 8 ? 100 : term <= 16 ? 30 : -40)); const t = lang === 'es' ? { eyebrow: 'Calculadora honesta', title: ['¿Cuánto', 'vas a pagar?'], sub: 'Mueve los dos botones. Los números se mueven contigo. Sin asteriscos, sin sorpresas.', monto: 'Monto', plazo: 'Plazo', quincenas: 'quincenas', quincena: 'quincena', pagoQuincenal: 'Pago quincenal', cat: 'CAT informativo', catNote: 'sin IVA', tasaDiaria: 'Tasa diaria', apertura: 'Comisión apertura', apertura2: 'única, 2% del monto', total: 'Total a pagar', sinPenal: 'Págalo antes y se baja. Sin penalización, palabra de pesito.', cta: 'Pedir este préstamo', chips: ['Sin asterisco', 'Sin penalización', 'CAT a la vista', 'SPEI directo'], } : { eyebrow: 'Честный калькулятор', title: ['Сколько', 'вы заплатите?'], sub: 'Двигайте две ручки. Цифры двигаются с вами. Без звёздочек, без сюрпризов.', monto: 'Сумма', plazo: 'Срок', quincenas: 'двухнед.', quincena: 'двухнед.', pagoQuincenal: 'Платёж раз в 2 нед.', cat: 'Полная стоимость (CAT)', catNote: 'без НДС', tasaDiaria: 'Дневная ставка', apertura: 'Комиссия за открытие', apertura2: 'одноразово, 2%', total: 'Всего к оплате', sinPenal: 'Заплатите раньше — заплатите меньше. Без штрафа, слово pesito.', cta: 'Взять этот заём', chips: ['Без звёздочек', 'Без штрафов', 'CAT на виду', 'SPEI напрямую'], }; const principalPct = ((principal - 500) / (50000 - 500)) * 100; const termPct = ((term - 2) / (24 - 2)) * 100; // Build "lo que te ahorras" comparison vs predatory lender at CAT 1200% const competitorTotal = Math.round(principal + (principal * 0.0085 * 14 * term) + apertura); const savings = competitorTotal - total; return (
{t.eyebrow}

{t.title[0]}
{t.title[1]}

{t.sub}

{/* Inputs panel */}
{/* Monto */}
{t.monto} '$' + Math.round(v).toLocaleString('en-US')} /> MXN
setPrincipal(+e.target.value)} style={{ '--p': principalPct + '%' }} />
$500$50,000
{/* Plazo */}
{t.plazo} {term}{term === 1 ? t.quincena : t.quincenas}
setTerm(+e.target.value)} style={{ '--p': termPct + '%' }} />
2 {lang === 'es' ? `≈ ${Math.round(term * 14 / 30 * 10) / 10} meses` : `≈ ${Math.round(term * 14 / 30 * 10) / 10} мес.`} 24
{/* chips of trust */}
{t.chips.map((c, i) => ( {c} ))}
{/* Results panel */}
{/* corner accent */}
{t.pagoQuincenal} SOFOM · MX
'$' + Math.round(v).toLocaleString('en-US')} />
{lang === 'es' ? `cada 14 días, ${term} veces` : `каждые 14 дней, ${term} раз`}
{/* breakdown rows */}
{t.total} '$' + Math.round(v).toLocaleString('en-US')} />
{t.sinPenal}
{/* mini comparativa */}
); }; const CalcRow = ({ label, value, note, accent }) => (
{label}
{note &&
{note}
}
{value}
); const ComparisonStrip = ({ lang, our, their, savings, principal }) => { const t = lang === 'es' ? { title: 'Lo mismo, en otro lado', sub: 'Mismo monto, mismo plazo, en una financiera "rápida y fácil" típica del país.', them: 'Otra financiera', us: 'pesito', save: 'Te ahorras', note: 'Tomado de promedios de mercado en CAT 1,200%. La mentira más cara siempre es la que no leíste.', } : { title: 'То же самое, в другом месте', sub: 'Та же сумма, тот же срок, у типичного "быстрого" кредитора.', them: 'Другой кредитор', us: 'pesito', save: 'Вы экономите', note: 'По средним рыночным CAT 1200%. Самая дорогая ложь — та, которую вы не прочитали.', }; const ourPct = (our / their) * 100; return (
{t.title}
{t.sub}
{t.save} ${savings.toLocaleString('en-US')} MXN
{t.note}
); }; const BarRow = ({ label, value, pct, color, textColor, highlight }) => (
{label} {value}
); Object.assign(window, { Calculator });