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
Consulta Directa al BCB:
Los valores UFV se obtienen en tiempo real desde el Banco Central de Bolivia.
No se almacenan datos localmente.
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".
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).";
}
?>
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).