Volver a la documentación

⚖️ Endpoints de Comparador

Herramientas para la estimación y comparación de ofertas energéticas

📝 Descripción General

Los endpoints de comparador permiten realizar cálculos estimativos de costes anuales basados en los datos de consumo real de un punto de suministro (CUPS).

Existen dos grandes familias de endpoints:

🔍 Filtrado Inteligente: El sistema ahora soporta filtrado por el código técnico de la tarifa (codigo_atr) y por zona geográfica (_PEN, _BAL, _CAN), asegurando que solo se comparen ofertas válidas para el suministro.
🔐 Autentificación: Estos endpoints requieren un token JWT válido obtenido a través del sistema de autentificación. Consulte la Guía de Autenticación JWT para más detalles.
POST /comparador_anual_tarifa

🔍 Comparador Anual por Tarifa

Calcula el coste estimado anual aplicando las condiciones de una tarifa específica del sistema al histórico de consumo del CUPS.

🚀 Optimización: Si la tarifa seleccionada es de Precio Fijo, el sistema omite el proceso de perfilado horario pesado, realizando el cálculo directamente sobre los totales mensuales de SIPS. Esto reduce el tiempo de respuesta de segundos a milisegundos.

Cuerpo de la Petición (JSON)

Campo Tipo Descripción
cups string Requerido Código CUPS.
id_tarifa string Requerido ID de la tarifa.
incluir_detalle_mensual boolean Opcional (default: true). Si se incluye, devuelve el desglose de costes mes a mes.

Ejemplo de Petición cURL

curl -X POST "http://localhost:5000/comparador_anual_tarifa" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cups": "ES0031...", "id_tarifa": "123", "incluir_detalle_mensual": true}'
POST /comparador_anual_tarifas_bulk

🚀 Comparador Anual Masivo (Bulk)

Calcula las estimaciones para una lista de tarifas en una única petición. Es el endpoint óptimo para interfaces que muestran comparativas completas.

⚡ Rendimiento: Este endpoint utiliza una caché de hilo (thread-safe) para los datos del CUPS, evitando accesos redundantes a SIPS durante el procesamiento de la lista.

Cuerpo de la Petición (JSON)

Campo Tipo Descripción
cups string Requerido Código CUPS.
id_tarifas array Requerido Lista de IDs de tarifas a calcular.
POST /comparador_anual_manual

🛠️ Comparador Anual Manual

Realiza una estimación personalizada permitiendo configurar manualmente precios, fees y otros parámetros comerciales.

Cuerpo de la Petición (JSON)

Campo Tipo Descripción
cups string Requerido Código CUPS.
tipo_precio string fijo o indexado
precios_energia object Precios por período (P1, P2, etc.) en €/kWh.
fee number Fee de gestión (para indexados).
precios_potencia object Precios de potencia (€/kW/año).
incluir_detalle_mensual boolean Opcional (default: true).

Ejemplo de Petición

{
  "cups": "ES0031405678912345AB1F",
  "tipo_precio": "fijo",
  "precios_energia": {
    "p1": 0.15,
    "p2": 0.12,
    "p3": 0.08
  },
  "precios_potencia": {
    "p1": 35.5,
    "p2": 1.2
  }
}

📤 Estructura de Respuesta (Estimación Anual)

Los endpoints /comparador_anual_* devuelven un objeto con el resumen de la estimación y, opcionalmente, el detalle mensual.

{
  "cups": "ES0031405678912345AB1F",
  "tarifa_atr": "2.0TD",
  "tipo_precio": "fijo",
  "consumo_total_kwh": 4250.50,
  "coste_energia": 645.20,
  "coste_potencia": 320.15,
  "total": 965.35,
  "resultado_mensual": [
    {
      "mes_referencia": "01",
      "coste_total": 110.50,
      "coste_energia": 80.25,
      "coste_potencia": 30.25,
      ...
    }
  ]
}

🌐 Comparador Web

Familia de endpoints pensados para el portal web del cliente. Devuelven, para todas las tarifas activas en el sistema, una estimación completa de factura (energía + potencia + bono social + alquiler + impuestos) y señalan automáticamente la mejor tarifa (la de menor importe total).

🧮 Impuestos y conceptos automáticos: Estos endpoints aplican automáticamente el Impuesto Eléctrico (IE), el IVA, el bono social y el alquiler de equipos a partir de la tabla prices.inputs_comparador, en función de la tarifa ATR.
🔍 Filtrado por tarifa ATR y zona geográfica: Solo se comparan ofertas compatibles con la tarifa ATR del suministro y con la zona geográfica (PENINSULA, BALEARES, CANARIAS, etc.).
POST /comparador_web_cups

🔍 Comparador Web por CUPS

Calcula la factura mensual equivalente que pagaría el cliente con cada una de las tarifas activas, utilizando el histórico de consumo real del CUPS obtenido de SIPS. Internamente calcula la factura anual con todos los conceptos (incluyendo IE, IVA, bono social y alquiler) y la divide entre 12.

Cuerpo de la Petición (JSON)

CampoTipoDescripción
cups string Requerido Código CUPS del punto de suministro.

Ejemplo de Petición cURL

curl -X POST "http://localhost:5000/comparador_web_cups" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cups": "ES0031405678912345AB1F"}'

Ejemplo de Respuesta

{
  "cups": {
    "cups": "ES0031405678912345AB1F",
    "tarifa_atr": "2.0TD",
    "geo_zone": "PENINSULA",
    "provincia": "28",
    "potencias_kw": { "P1": 4.6, "P2": 4.6 },
    "consumo_total_anual_kwh": 4250.50,
    "consumo_periodos_anual_kwh": { "P1": 1500.0, "P2": 1250.5, "P3": 1500.0 },
    "consumo_medio_mensual_kwh": 354.21,
    "consumo_periodos_medio_kwh": { "P1": 125.0, "P2": 104.21, "P3": 125.0 }
  },
  "tarifas": [
    {
      "tarifa_id": "123",
      "nombre_tarifa_precio": "Tarifa Plana 2.0TD",
      "alias_precio": "PLANA-2TD",
      "tipo_precio": "fijo",
      "coste_energia": 53.77,
      "coste_potencia": 26.68,
      "bono_social": 0.04,
      "alquiler": 0.81,
      "base_imponible": 81.30,
      "impuesto_electrico": 2.74,
      "iva": 17.65,
      "total_factura": 101.69
    },
    {
      "tarifa_id": "124",
      "nombre_tarifa_precio": "Tarifa Indexada PVPC+",
      "alias_precio": "IDX-PVPC",
      "tipo_precio": "indexado",
      "coste_energia": 49.10,
      "coste_potencia": 26.68,
      "bono_social": 0.04,
      "alquiler": 0.81,
      "base_imponible": 76.63,
      "impuesto_electrico": 2.58,
      "iva": 16.63,
      "total_factura": 95.84
    }
  ],
  "mejor_tarifa": {
    "tarifa_id": "124",
    "nombre_tarifa_precio": "Tarifa Indexada PVPC+",
    "alias_precio": "IDX-PVPC",
    "tipo_precio": "indexado",
    "total_factura": 95.84
  }
}
POST /comparador_web_factura

🧾 Comparador Web por Factura

Compara una factura real aportada por el cliente contra todas las tarifas activas. La tarifa ATR y la zona geográfica se obtienen automáticamente del CUPS, mientras que los consumos, potencias e importes los aporta el usuario tal y como aparecen en su factura. La comparativa se realiza para el periodo indicado (fecha_inicio_periodofecha_fin_periodo).

Cuerpo de la Petición (JSON)

CampoTipoDescripción
cupsstringRequerido Código CUPS.
fecha_inicio_periodostring (YYYY-MM-DD)Requerido Inicio del periodo facturado.
fecha_fin_periodostring (YYYY-MM-DD)Requerido Fin del periodo facturado.
consumo_p1_kwhconsumo_p6_kwhnumberConsumo por periodo en kWh (los que no apliquen a 0 o ausentes).
consumo_total_kwhnumberOpcional. Si no se envía, se calcula como suma de los periodos.
potencia_p1_kwpotencia_p6_kwnumberPotencias contratadas por periodo en kW.
total_potencia_eurnumberImporte total de potencia en la factura real.
total_energia_eurnumberImporte total de energía en la factura real.
total_factura_eurnumberTotal de la factura (con impuestos).
total_sin_impuestos_eurnumberBase imponible de la factura.
total_impuestos_eurnumberSuma de impuestos repercutidos.

Ejemplo de Petición cURL

curl -X POST "http://localhost:5000/comparador_web_factura" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "cups": "ES0031405678912345AB1F",
    "fecha_inicio_periodo": "2026-01-01",
    "fecha_fin_periodo":    "2026-01-31",
    "consumo_p1_kwh": 150.0,
    "consumo_p2_kwh": 120.0,
    "consumo_p3_kwh": 100.0,
    "potencia_p1_kw": 4.6,
    "potencia_p2_kw": 4.6,
    "total_potencia_eur": 26.50,
    "total_energia_eur": 55.20,
    "total_sin_impuestos_eur": 81.70,
    "total_impuestos_eur": 20.30,
    "total_factura_eur": 102.00
  }'

Ejemplo de Respuesta

{
  "factura_real": {
    "cups": "ES0031405678912345AB1F",
    "fecha_inicio_periodo": "2026-01-01",
    "fecha_fin_periodo": "2026-01-31",
    "dias_intervalo": 30,
    "tarifa_atr": "2.0TD",
    "geo_zone": "PENINSULA",
    "provincia": "28",
    "consumo_total_kwh": 370.0,
    "consumo_por_periodo_kwh": { "P1": 150.0, "P2": 120.0, "P3": 100.0, "P4": 0, "P5": 0, "P6": 0 },
    "potencias_kw": { "P1": 4.6, "P2": 4.6, "P3": 0, "P4": 0, "P5": 0, "P6": 0 },
    "total_potencia_eur": 26.50,
    "total_energia_eur": 55.20,
    "total_factura_eur": 102.00,
    "total_sin_impuestos_eur": 81.70,
    "total_impuestos_eur": 20.30
  },
  "tarifas": [
    {
      "tarifa_id": "123",
      "nombre_tarifa_precio": "Tarifa Plana 2.0TD",
      "alias_precio": "PLANA-2TD",
      "tipo_precio": "fijo",
      "coste_energia": 52.10,
      "coste_potencia": 25.80,
      "bono_social": 0.04,
      "alquiler": 0.78,
      "base_imponible": 78.72,
      "impuesto_electrico": 2.65,
      "iva": 17.09,
      "total_factura": 98.46,
      "ahorro_vs_factura_real": 3.54,
      "porcentaje_ahorro": 3.47
    }
  ],
  "mejor_tarifa": {
    "tarifa_id": "123",
    "nombre_tarifa_precio": "Tarifa Plana 2.0TD",
    "total_factura": 98.46,
    "ahorro_vs_factura_real": 3.54,
    "porcentaje_ahorro": 3.47
  }
}
POST /comparador_web_datos_input

📝 Comparador Web por Datos Manuales (sin CUPS)

Igual que /comparador_web_factura pero sin CUPS. El cliente introduce manualmente la tarifa_atr que tiene contratada y el resto de datos de la factura. Útil para simulaciones rápidas en formularios web cuando todavía no se dispone (o no se quiere consultar) el CUPS.

🌍 Zona geográfica: El endpoint asume PENINSULA por defecto. Para otras zonas, la lógica interna usa el parámetro geo_zone (BALEARES, CANARIAS, CEUTA, MELILLA); si tu integración necesita exponerlo, contactar con el equipo de API.

Cuerpo de la Petición (JSON)

CampoTipoDescripción
tarifa_atrstringRequerido Tarifa ATR contratada (ej. 2.0TD, 3.0TD, 6.1TD).
fecha_inicio_periodostring (YYYY-MM-DD)Requerido Inicio del periodo a comparar.
fecha_fin_periodostring (YYYY-MM-DD)Requerido Fin del periodo a comparar.
consumo_p1_kwhconsumo_p6_kwhnumberConsumos por periodo en kWh.
consumo_total_kwhnumberOpcional, suma de periodos si se omite.
potencia_p1_kwpotencia_p6_kwnumberPotencias contratadas por periodo en kW.
total_potencia_eur, total_energia_eur, total_factura_eur, total_sin_impuestos_eur, total_impuestos_eurnumberOpcionales. Si se envían, se calcula el ahorro frente a la factura real.

Ejemplo de Petición cURL

curl -X POST "http://localhost:5000/comparador_web_datos_input" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "tarifa_atr": "2.0TD",
    "fecha_inicio_periodo": "2026-01-01",
    "fecha_fin_periodo":    "2026-01-31",
    "consumo_p1_kwh": 150.0,
    "consumo_p2_kwh": 120.0,
    "consumo_p3_kwh": 100.0,
    "potencia_p1_kw": 4.6,
    "potencia_p2_kw": 4.6,
    "total_factura_eur": 102.00
  }'

Ejemplo de Respuesta

{
  "factura_real": {
    "fecha_inicio_periodo": "2026-01-01",
    "fecha_fin_periodo": "2026-01-31",
    "dias_intervalo": 31,
    "tarifa_atr": "2.0TD",
    "geo_zone": "PENINSULA",
    "consumo_total_kwh": 370.0,
    "consumo_por_periodo_kwh": { "P1": 150.0, "P2": 120.0, "P3": 100.0, "P4": 0, "P5": 0, "P6": 0 },
    "potencias_kw": { "P1": 4.6, "P2": 4.6, "P3": 0, "P4": 0, "P5": 0, "P6": 0 },
    "total_potencia_eur": null,
    "total_energia_eur": null,
    "total_factura_eur": 102.00,
    "total_sin_impuestos_eur": null,
    "total_impuestos_eur": null
  },
  "tarifas": [
    {
      "tarifa_id": "123",
      "nombre_tarifa_precio": "Tarifa Plana 2.0TD",
      "tipo_precio": "fijo",
      "coste_energia": 53.81,
      "coste_potencia": 26.66,
      "bono_social": 0.04,
      "alquiler": 0.81,
      "base_imponible": 81.32,
      "impuesto_electrico": 2.74,
      "iva": 17.65,
      "total_factura": 101.71,
      "ahorro_vs_factura_real": 0.29,
      "porcentaje_ahorro": 0.28
    }
  ],
  "mejor_tarifa": {
    "tarifa_id": "123",
    "nombre_tarifa_precio": "Tarifa Plana 2.0TD",
    "total_factura": 101.71,
    "ahorro_vs_factura_real": 0.29,
    "porcentaje_ahorro": 0.28
  }
}

📤 Estructura de Respuesta (Comparador Web)

Los endpoints /comparador_web_* comparten una estructura común:

❌ Errores Comunes

Código Descripción
401 Unauthorized Token JWT ausente o expirado.
404 Not Found El CUPS no existe en el sistema SIPS.
400 Bad Request Faltan parámetros obligatorios en el cuerpo del POST.