PRINCIPAL * 2) Banco Central de Bolivia (BCB) en directo -> FALLBACK * * @param string $fecha Fecha en formato Y-m-d * @return float|null Valor UFV (5 decimales) o null si no hay dato en ninguna fuente */ public function getUFVValue($fecha) { // 1) Fuente principal: API central ufv_api $ufv = $this->getUFVDesdeAPI($fecha); if ($ufv !== null) { return $ufv; } // 2) Fallback: consulta directa al BCB (solo si la API no tiene el dato) return $this->getUFVDesdeBCB($fecha); } /** * FUENTE PRINCIPAL. Consulta la UFV a la API central ufv_api. * Evita saturar al BCB: la API ya mantiene una copia local de las UFV. * * @param string $fecha Fecha en formato Y-m-d * @return float|null Valor UFV o null si la API no responde o no tiene la fecha */ private function getUFVDesdeAPI($fecha) { $url = self::UFV_API_URL . '?action=get_rate&date=' . urlencode($fecha); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_USERAGENT, 'CalculadoraLexova/1.0'); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); // Si la API falla o devuelve 404 (sin dato), retornamos null para que // getUFVValue() recurra al BCB como fallback. if ($error || $httpCode != 200 || !$response) { return null; } $data = json_decode($response, true); if (is_array($data) && isset($data['error']) && $data['error'] === false && isset($data['rate'])) { $valor = floatval($data['rate']); if ($valor > 1 && $valor < 10) { return round($valor, 5); } } return null; // Respuesta sin un valor UFV válido } /** * FALLBACK. Consulta la UFV directamente al Banco Central de Bolivia (BCB). * Solo se usa cuando la API central no tiene el dato de la fecha pedida. * * @param string $fecha Fecha en formato Y-m-d * @return float|null Valor UFV o null si no disponible */ private function getUFVDesdeBCB($fecha) { // Convertir fecha a formato BCB (dd/mm/yyyy) $fechaBCB = date('d/m/Y', strtotime($fecha)); // URL del BCB $url = 'https://www.bcb.gob.bo/calculadora-ufv/frmImprimeUFV.php?txtFechaIni=' . $fechaBCB . '&txtFechaFin=' . $fechaBCB . '&txtMonto=1000'; // Consulta al BCB $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: es-ES,es;q=0.9' ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); if ($error || $httpCode != 200) { return null; // No disponible } // Extraer valor UFV if (preg_match_all('/(\d+,\d+)<\/td>/', $response, $matches)) { foreach ($matches[1] as $match) { $valor = str_replace(',', '.', $match); if (is_numeric($valor) && $valor > 1 && $valor < 10) { return round($valor, 5); } } } return null; // No encontrado } /** * Redondeo SIAT según RND N° 102500000013 */ private function redondeoSIAT($valor) { $valorConCincoDecimales = round($valor, 5); $valorMultiplicado = $valorConCincoDecimales * 1000; $tercerDecimal = floor($valorMultiplicado) % 10; if ($tercerDecimal >= 5) { return ceil($valorConCincoDecimales * 100) / 100; } else { return floor($valorConCincoDecimales * 100) / 100; } } /** * Calcula mantenimiento de valor */ public function calcularMantenimientoValor($ufvPago, $ufvVencimiento, $tributoOmitido) { $mv = (($ufvPago / $ufvVencimiento) - 1) * $tributoOmitido; return $this->redondeoSIAT($mv); } /** * Calcula tributo actualizado */ public function calcularTributoActualizado($tributoOmitido, $mantenimientoValor) { return $this->redondeoSIAT($tributoOmitido + $mantenimientoValor); } /** * Calcula intereses moratorios con tasas escalonadas */ public function calcularInteresesMoratorios($tributoActualizado, $diasMora) { $interesesTotal = 0; $diasRestantes = $diasMora; $principal = $tributoActualizado; // Hasta 4 años (1460 días) al 4% if ($diasRestantes > 0) { $diasTramo = min($diasRestantes, 1460); $interes = $principal * (pow(1 + 0.04/360, $diasTramo) - 1); $interesesTotal += $interes; $diasRestantes -= $diasTramo; } // De 4 a 7 años (1095 días más) al 6% if ($diasRestantes > 0) { $diasTramo = min($diasRestantes, 1095); $interes = $principal * (pow(1 + 0.06/360, $diasTramo) - 1); $interesesTotal += $interes; $diasRestantes -= $diasTramo; } // Más de 7 años al 10% if ($diasRestantes > 0) { $interes = $principal * (pow(1 + 0.10/360, $diasRestantes) - 1); $interesesTotal += $interes; } return $this->redondeoSIAT($interesesTotal); } /** * Calcula multa según tipo de contribuyente */ public function calcularMulta($tipoContribuyente, $ufvPago) { $multa = 0; switch ($tipoContribuyente) { case 'natural': $multa = 50 * $ufvPago; break; case 'juridica': $multa = 100 * $ufvPago; break; } return $this->redondeoSIAT($multa); } /** * Analiza los beneficios de la Ley N° 1733 de Alivio Tributario (promulgada 27/05/2026): * condonación (Art. 2), regularización (Art. 3) y prescripción (Arts. 59 y 60 reescritos). * Fuentes: https://boliviaimpuestos.com/ley-1733-de-alivio-tributario-pdf/ * https://boliviaimpuestos.com/prescripcion-segun-ley-1733/ */ public function analizarLey1733($fechaVencimiento, $periodoFiscal, $tributoOmitido, $mantenimientoValor) { $finPlazoAcogimiento = new DateTime('2026-09-24'); // 120 días calendario (ampliable hasta 31/12/2026) $hoy = new DateTime('today'); // Año de la gestión / período fiscal (si no se indica, se estima con el año de vencimiento) $periodoEstimado = empty($periodoFiscal); $anioPeriodo = $periodoEstimado ? (int) date('Y', strtotime($fechaVencimiento)) : (int) substr($periodoFiscal, 0, 4); // ---------- PRESCRIPCIÓN (Art. 59: 4 años; Art. 60: cómputo desde el 1/ene del año siguiente al vencimiento) ---------- $anioVencimiento = (int) date('Y', strtotime($fechaVencimiento)); $fechaInicioComputo = new DateTime(($anioVencimiento + 1) . '-01-01'); // 1 de enero del año siguiente $fechaPrescripcion = new DateTime(($anioVencimiento + 5) . '-01-01'); // + 4 años $prescrito = ($hoy >= $fechaPrescripcion); $diasParaPrescribir = (int) ceil(($fechaPrescripcion->getTimestamp() - $hoy->getTimestamp()) / 86400); // ---------- CLASIFICACIÓN CONDONACIÓN / REGULARIZACIÓN (por período fiscal) ---------- $LIMITE_CONDONACION = 10000000; // Bs 10.000.000 de tributo omitido acumulado al 31/12/2017 $condonacionTotal = false; if ($anioPeriodo <= 2017) { // Períodos anteriores a enero 2018: condonación total salvo que el TO acumulado supere Bs 10M $categoria = ($tributoOmitido < $LIMITE_CONDONACION) ? 'condonacion' : 'regularizacion'; $condonacionTotal = ($categoria === 'condonacion'); } elseif ($anioPeriodo == 2020) { $categoria = 'condonacion'; // gestión 2020 condonada expresamente, sin tope de monto $condonacionTotal = true; } elseif ($anioPeriodo >= 2018 && $anioPeriodo <= 2025) { $categoria = 'regularizacion'; } else { $categoria = 'fuera'; // gestiones 2026 en adelante: deuda normal, fuera del alivio } // ---------- REGULARIZACIÓN (Art. 3) ---------- // Opción A - al contado: tributo omitido + 50% del mantenimiento de valor; intereses y multas condonados. // Opción B - hasta 36 cuotas: tributo omitido + 100% del mantenimiento de valor; intereses y multas condonados. $regContado = $this->redondeoSIAT($tributoOmitido + ($mantenimientoValor * 0.5)); $regCuotas = $this->redondeoSIAT($tributoOmitido + $mantenimientoValor); $cuotaMensual = $this->redondeoSIAT($regCuotas / 36); return [ 'finPlazoAcogimiento' => $finPlazoAcogimiento->format('Y-m-d'), 'anioPeriodo' => $anioPeriodo, 'periodoEstimado' => $periodoEstimado, 'categoria' => $categoria, 'condonacionTotal' => $condonacionTotal, 'limiteCondonacion' => $LIMITE_CONDONACION, // prescripción 'anioVencimiento' => $anioVencimiento, 'inicioComputo' => $fechaInicioComputo->format('Y-m-d'), 'fechaPrescripcion' => $fechaPrescripcion->format('Y-m-d'), 'prescrito' => $prescrito, 'diasParaPrescribir' => $diasParaPrescribir, // regularización 'regContado' => $regContado, 'regCuotas' => $regCuotas, 'cuotaMensual' => $cuotaMensual, ]; } /** * Cálculo completo de deuda tributaria */ public function calcularDeudaTributaria($fechaVencimiento, $fechaPago, $tributoOmitido, $tipoContribuyente = 'ninguna', $periodoFiscal = '') { $ufvVencimiento = $this->getUFVValue($fechaVencimiento); $ufvPago = $this->getUFVValue($fechaPago); $diasMora = (strtotime($fechaPago) - strtotime($fechaVencimiento)) / (60 * 60 * 24); $mantenimientoValor = $this->calcularMantenimientoValor($ufvPago, $ufvVencimiento, $tributoOmitido); $tributoActualizado = $this->calcularTributoActualizado($tributoOmitido, $mantenimientoValor); $interesesMoratorios = $this->calcularInteresesMoratorios($tributoActualizado, $diasMora); $multa = $this->calcularMulta($tipoContribuyente, $ufvPago); $totalDeuda = $this->redondeoSIAT($tributoOmitido + $mantenimientoValor + $interesesMoratorios + $multa); return [ 'fechaVencimiento' => $fechaVencimiento, 'fechaPago' => $fechaPago, 'ufvVencimiento' => $ufvVencimiento, 'ufvPago' => $ufvPago, 'diasMora' => $diasMora, 'tributoOmitido' => $tributoOmitido, 'mantenimientoValor' => $mantenimientoValor, 'tributoActualizado' => $tributoActualizado, 'interesesMoratorios' => $interesesMoratorios, 'multa' => $multa, 'totalDeuda' => $totalDeuda, 'ley1733' => $this->analizarLey1733($fechaVencimiento, $periodoFiscal, $tributoOmitido, $mantenimientoValor) ]; } } // AJAX endpoint para obtener UFV automáticamente desde BCB if (isset($_GET['action']) && $_GET['action'] === 'get_ufv' && isset($_GET['fecha'])) { $calc = new CalculadoraTributariaBCB(); $ufv = $calc->getUFVValue($_GET['fecha']); header('Content-Type: application/json'); // Evitar que el navegador cachee la respuesta: si una vez devolvió // "No disponible aún" (p.ej. por un fallo puntual del BCB), no debe // quedar pegado mostrando ese resultado obsoleto en consultas futuras. header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Pragma: no-cache'); if ($ufv === null) { echo json_encode(['ufv' => 'No disponible aún']); } else { echo json_encode(['ufv' => number_format($ufv, 5)]); } exit; } // Procesamiento del formulario $resultado = null; $error = null; if ($_POST && !isset($_GET['pdf'])) { try { $calculadora = new CalculadoraTributariaBCB(); $fechaVencimiento = $_POST['fecha_vencimiento'] ?? ''; $fechaPago = $_POST['fecha_pago'] ?? ''; $tributoOmitido = floatval($_POST['tributo_omitido'] ?? 0); $tipoContribuyente = $_POST['tipo_contribuyente'] ?? 'ninguna'; $periodoFiscal = $_POST['periodo_fiscal'] ?? ''; $referencia = trim($_POST['referencia'] ?? ''); if (empty($fechaVencimiento) || empty($fechaPago) || $tributoOmitido <= 0) { throw new Exception('Todos los campos obligatorios deben ser completados y el tributo debe ser mayor a cero.'); } if (strtotime($fechaPago) < strtotime($fechaVencimiento)) { throw new Exception('La fecha de pago no puede ser anterior a la fecha de vencimiento.'); } // Verificar que las UFV estén disponibles para ambas fechas $ufvVenc = $calculadora->getUFVValue($fechaVencimiento); $ufvPago = $calculadora->getUFVValue($fechaPago); if ($ufvVenc === null) { throw new Exception('No se puede realizar el cálculo: UFV no disponible para la fecha de vencimiento. El BCB aún no ha publicado este dato.'); } if ($ufvPago === null) { throw new Exception('No se puede realizar el cálculo: UFV no disponible para la fecha de pago. El BCB aún no ha publicado este dato.'); } $resultado = $calculadora->calcularDeudaTributaria($fechaVencimiento, $fechaPago, $tributoOmitido, $tipoContribuyente, $periodoFiscal); $resultado['referencia'] = $referencia; } catch (Exception $e) { $error = $e->getMessage(); } } // Generar reporte PDF if (isset($_GET['pdf']) && $_POST) { include 'generar_reporte.php'; exit; } ?> Calculadora Tributaria BCB - Consulta Directa

CALCULADORA TRIBUTARIA DE DEUDAS

Sistema de Cálculo de Obligaciones Tributarias

DATOS DEL IMPUESTO

Complete todos los campos requeridos

UFV: -.-----
UFV: -.-----
Para el análisis de la Ley 1733 (condonación/regularización). Si se omite, se estima con el año de vencimiento.
N° de formulario, tipo de impuesto o referencia
Consulta Directa al BCB:
Los valores UFV se obtienen en tiempo real desde el Banco Central de Bolivia. No se almacenan datos localmente.

Fecha Vencimiento:
UFV Vencimiento:
Fecha Pago:
UFV Pago:
Días de Mora:
días
Tributo Original:
Bs
Mantenimiento de Valor (MV)
MV = ((UFV_pago / UFV_vencimiento) - 1) × Tributo_omitido
MV = (( / ) - 1) ×
MV = ( - 1) ×
MV = Bs
Tributo Omitido Actualizado (TOa)
TOa = Tributo_Original + Mantenimiento_Valor
TOa = +
TOa = Bs
Intereses Moratorios
Días de mora: días ( años)
Tasa aplicada:
I = TOa × [(1 + tasa/360)^días - 1]
I = × [(1 + 0.04/360)^ - 1]
I = × [ - 1]
Cálculo por tramos escalonados:

0) { $diasTramo1 = min($diasRestantes, 1460); $fechaFinal1 = clone $fechaActual; $fechaFinal1->add(new DateInterval("P{$diasTramo1}D")); $factor1 = pow(1+0.04/360, $diasTramo1); echo "Tramo 1 (4%): " . $fechaActual->format('d/m/Y') . " al " . $fechaFinal1->format('d/m/Y') . " = $diasTramo1 días
"; echo "Factor: (1+0.04/360)^$diasTramo1 = " . number_format($factor1, 6) . "
"; $fechaActual = $fechaFinal1; $diasRestantes -= $diasTramo1; } // Tramo 2: De 4 a 7 años al 6% if ($diasRestantes > 0) { $diasTramo2 = min($diasRestantes, 1095); $fechaFinal2 = clone $fechaActual; $fechaFinal2->add(new DateInterval("P{$diasTramo2}D")); $factor2 = pow(1+0.06/360, $diasTramo2); echo "Tramo 2 (6%): " . $fechaActual->format('d/m/Y') . " al " . $fechaFinal2->format('d/m/Y') . " = $diasTramo2 días
"; echo "Factor: (1+0.06/360)^$diasTramo2 = " . number_format($factor2, 6) . "
"; $fechaActual = $fechaFinal2; $diasRestantes -= $diasTramo2; } // Tramo 3: Más de 7 años al 10% if ($diasRestantes > 0) { $fechaFinal3 = clone $fechaActual; $fechaFinal3->add(new DateInterval("P{$diasRestantes}D")); $factor3 = pow(1+0.10/360, $diasRestantes); echo "Tramo 3 (10%): " . $fechaActual->format('d/m/Y') . " al " . $fechaFinal3->format('d/m/Y') . " = $diasRestantes días
"; echo "Factor: (1+0.10/360)^$diasRestantes = " . number_format($factor3, 6); } echo "
Total intereses = Bs " . number_format($resultado['interesesMoratorios'], 2) . "
"; ?>
Intereses = Bs
0): ?>
Multa por Incumplimiento
Multa = Bs

COMPOSICIÓN DEL FORMULARIO 1000

CONCEPTO IMPORTE (Bs)
a) Importe de la deuda
b) Mantenimiento de Valor
c) Intereses Moratorios
d) Multa por Incumplimiento
TOTAL A PAGAR

ANÁLISIS LEY N° 1733 DE ALIVIO TRIBUTARIO

Condonación · Regularización · Prescripción — Ley promulgada el 27/05/2026

⚠️ No se indicó el período / gestión fiscal: se estimó la gestión a partir del año de vencimiento. Para clasificar correctamente la condonación/regularización, complete el campo "Período fiscal".
1. Prescripción (Arts. 59 y 60 CTB reescritos — 4 años)
Vencimiento del pago: (año )
Inicio del cómputo (1° de enero del año siguiente):
Prescribe (4 años después):
✅ DEUDA PRESCRITA — la facultad del SIN ya venció. NO pague ni pida facilidades: oponga la prescripción (Arts. 59, 60 y 150 CTB).
⏳ Aún NO prescribe. Faltan ~ días (prescribiría el ).
*Cómputo estándar sin causales de interrupción (notificación de RD, reconocimiento o pago parcial, solicitud de facilidades — Art. 61) ni de suspensión (Orden de Fiscalización, recursos — Art. 62). Las medidas coactivas NO interrumpen. Se suman +2 años si no se inscribió o usó un régimen que no le corresponde (Art. 59.III).
2. Condonación total (Art. 2)
La gestión está dentro de la condonación (). Se perdona la totalidad de la deuda: tributo omitido, mantenimiento de valor, intereses y multas.
Total con la Ley 1733 = Bs 0,00  (régimen normal: Bs )
*No accede al borrón total si el tributo omitido acumulado al 31/12/2017 es ≥ Bs 10.000.000 (en ese caso, va por regularización).
Alcanza también a deudas en impugnación, ejecución tributaria o cobranza coactiva, salvo que ya haya remate o disposición de bienes.
2. Regularización con descuento (Art. 3)
Gestión : no hay borrón, pero se condonan intereses y multas. El tributo omitido se paga completo.
Concepto Al contado Hasta 36 cuotas
Tributo omitido
Mantenimiento de valor (50%) (100%)
Intereses 0,00 ✔ 0,00 ✔
Multas / sanciones 0,00 ✔ 0,00 ✔
TOTAL
Cuota referencial (36 meses): Bs /mes.
Ahorro al contado vs. régimen normal: Bs .
💡 El contado es más barato (perdona el 50% del mantenimiento de valor; las cuotas lo cobran completo). ⚠️ Si incumple el plan de cuotas (Art. 3.VII) pierde todos los beneficios y el saldo se recalcula con intereses y multas.
*Mantenimiento de valor tomado del cálculo de la columna izquierda (actualizado a la fecha de pago ingresada). Plazo para acogerse: ~24/09/2026 (ampliable al 31/12/2026).
2. Condonación / Regularización
La gestión es posterior a 2025: queda fuera del alcance de la condonación y la regularización de la Ley 1733. Aplica el régimen normal (Formulario 1000 de arriba).
⭐ Camino recomendado
Oponer la PRESCRIPCIÓN. La deuda ya prescribió bajo el nuevo plazo de 4 años. Antes de pagar o pedir facilidades, presente la solicitud de prescripción invocando expresamente los Arts. 59, 60 y 150 del CTB. Pagar (o pedir facilidades sobre) una deuda prescrita es renunciar gratis a la defensa."; } elseif ($l['categoria'] === 'condonacion') { echo "Acogerse a la CONDONACIÓN (Art. 2). La deuda se borra en su totalidad. Verifique que no exista remate o disposición de bienes."; } elseif ($l['categoria'] === 'regularizacion') { echo "REGULARIZAR, preferentemente al contado (Art. 3). La deuda aún no prescribe. El contado perdona intereses, multas y el 50% del mantenimiento de valor. Tiene plazo hasta ~24/09/2026 (ampliable al 31/12/2026)."; } else { echo "Gestión fuera del alivio: corresponde el cálculo del régimen normal (Formulario 1000 de arriba)."; } ?>
Análisis informativo basado en la Ley N° 1733 (27/05/2026); no sustituye asesoría profesional sobre un caso concreto. Fuentes: Ley 1733 de Alivio Tributario y Prescripción según la Ley 1733.
Redondeo SIAT (RND N° 102500000013):
Cálculos con 5 decimales, redondeo a 2 decimales. Si el 3er decimal ≥5, se incrementa el 2do decimal.
Fórmulas que se aplicarán:

Mantenimiento de Valor: MV = [(UFV_pago / UFV_vencimiento) - 1] × Tributo_Omitido
Tributo Actualizado: TOa = TO + MV
Intereses Moratorios: I = TOa × [(1 + r/360)^días - 1]

Tasas de Interés Escalonadas:
• 4% anual para mora hasta 4 años
• 6% anual para mora de 5 a 7 años
• 10% anual para mora de 8 años en adelante

Multas por Incumplimiento:
• Persona Natural: 50 UFVs
• Persona Jurídica: 100 UFVs

Consulta Directa BCB:
Los valores UFV se obtienen en tiempo real desde el Banco Central de Bolivia.

Análisis Ley N° 1733 de Alivio Tributario:
Junto al cálculo normal se mostrará un análisis de condonación (Art. 2), regularización con condonación de intereses y multas (Art. 3) y prescripción de 4 años (Arts. 59-60 reescritos).