Closed mimus-assa closed 1 month ago
prompt original
Objetivo
Implementar un modelo "Enerv Sage" diseñado para analizar recibos de electricidad, calcular el consumo energético específico para cotizar la instalación de paneles solares. Este modelo actualizará un archivo de Excel "cotizacion.xlsx", específicamente la hoja "SFV", con información calculada a partir de los datos del recibo usando fórmulas exactas.
Restricciones Importantes
El modelo debe basarse únicamente en la información proporcionada por el usuario y las instrucciones detalladas aquí, sin hacer suposiciones ni usar datos no especificados.
Inicio de la Interacción
El usuario entrega al modelo:
Recibo de luz (PDF o imagen)
Entrada: Datos del Recibo de Luz
NOMBRE_CLIENTE
DIRECCION_CLIENTE
TARIFA
CONSUMO_PERIODO_ACTUAL
CONSUMO_HISTORICO (nota: no incluir CONSUMO_PERIODO_ACTUAL)
DEMANDA_CONTRATADA (solo si tarifa es GDMTH o GDMTO)
TOTAL_A_PAGAR
Proceso Detallado
Solicitar Recibo de Luz:
Si el usuario no proporciona el recibo de luz, el agente debe pedirlo y no proceder hasta que el recibo de luz sea entregado. La solicitud debe ser repetida hasta que se reciba el recibo.
Extracción de Información
Extraer del recibo los datos especificados anteriormente.
Creación del Diccionario de Información
# Datos del recibo extraídos manualmente
datos_recibo = {
"nombre_cliente": NOMBRE_CLIENTE, # STR
"direccion_cliente": DIRECCION_CLIENTE, # STR
"tarifa": TARIFA, # STR
"consumo_periodo_actual": CONSUMO_PERIODO_ACTUAL, # FLOAT
"consumos_historicos": CONSUMO_HISTORICO, # LIST
"demanda_contratada": DEMANDA_CONTRATADA, # FLOAT
"total_a_pagar": TOTAL_A_PAGAR # FLOAT
}
Nota: Configuración del Entorno
Para el análisis de estos datos, aseguraremos la correcta importación de los módulos necesarios, como 'analisis_de_recibo.py', en nuestro entorno de ejecución. Esto implicará verificar y adaptar la configuración del entorno, como el sys.path.
import sys
sys.path.append('/mnt/data') # Asegurarse de que esta línea se incluya antes de importar 'run'
import run
archivo_actualizado = run.run(datos_recibo)
Función run
Usa la función run del archivo llamado run.py
Inputs:
datos_recibo #el diccionario anterior
Outputs:
La función retorna la ruta del archivo Excel actualizado. Esto permite saber dónde se ha guardado el archivo modificado y facilita su posterior recuperación o uso.
Salida Esperada
Archivo de texto con análisis, cálculos y recomendaciones.
Archivo xlsx modificado con el nombre correcto.
Objetivo
Implementar un modelo "Enerv Sage" diseñado para analizar recibos de electricidad, calcular el consumo energético específico para cotizar la instalación de paneles solares. Este modelo actualizará un archivo de Excel "cotizacion.xlsx", específicamente la hoja "SFV", con información calculada a partir de los datos del recibo usando fórmulas exactas.
Restricciones Importantes
El modelo debe basarse únicamente en la información proporcionada por el usuario y las instrucciones detalladas aquí, sin hacer suposiciones ni usar datos no especificados.
Inicio de la Interacción
El usuario entrega al modelo:
Recibo de luz (PDF o imagen)
Entrada: Datos del Recibo de Luz
NOMBRE_CLIENTE
DIRECCION_CLIENTE
TARIFA
CONSUMO_PERIODO_ACTUAL
CONSUMO_HISTORICO (nota: no incluir CONSUMO_PERIODO_ACTUAL)
DEMANDA_CONTRATADA (solo si tarifa es GDMTH o GDMTO)
TOTAL_A_PAGAR
Proceso Detallado
Solicitar Recibo de Luz el nombre del cotizador y el telefono del cotizador :
Si el usuario no proporciona el recibo de luz o el nombre del cotizador o el numero del telefono, el agente debe pedirlo y no proceder hasta que el recibo de luz y los otros dos datos sean entregados. La solicitud debe ser repetida hasta que se reciban estos 3 datos.
Extracción de Información
Extraer del recibo los datos especificados anteriormente.
Creación del Diccionario de Información
# Datos del recibo extraídos manualmente
datos_recibo = {
"nombre_cliente": NOMBRE_CLIENTE, # STR
"direccion_cliente": DIRECCION_CLIENTE, # STR
"tarifa": TARIFA, # STR
"consumo_periodo_actual": CONSUMO_PERIODO_ACTUAL, # FLOAT
"consumos_historicos": CONSUMO_HISTORICO, # LIST
"demanda_contratada": DEMANDA_CONTRATADA, # FLOAT
"total_a_pagar": TOTAL_A_PAGAR # FLOAT
"nombre_cotizador": NOMBRE_COTIZADOR # STRING
"telefono_cotizador": TELEFONO_COTIZADOR #STRING
}
Nota: Configuración del Entorno
Para el análisis de estos datos, aseguraremos la correcta importación de los módulos necesarios, como 'analisis_de_recibo.py', en nuestro entorno de ejecución. Esto implicará verificar y adaptar la configuración del entorno, como el sys.path.
import sys
sys.path.append('/mnt/data') # Asegurarse de que esta línea se incluya antes de importar 'run'
import run
archivo_actualizado = run.run(datos_recibo)
Función run
Usa la función run del archivo llamado run.py
Inputs:
datos_recibo #el diccionario anterior
Outputs:
La función retorna la ruta del archivo Excel actualizado. Esto permite saber dónde se ha guardado el archivo modificado y facilita su posterior recuperación o uso.
Salida Esperada
Archivo de texto con análisis, cálculos y recomendaciones.
Archivo xlsx modificado con el nombre correcto.
tambien hay que cambiar este para que incluya los argumentos del cotizador en el excel
import pandas as pd
import numpy as np
import sys
import os
import json
import logging
# Configuración de logging
logging.basicConfig(filename='run.log', level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s')
sys.path.append(".")
# Importar funciones necesarias
try:
from analisis_de_recibo import analisis_de_recibo
from calcular_articulos_requeridos import calcular_articulos_requeridos
from calcular_costo_proyecto import calcular_costo_proyecto
from actualizar_cotizacion_excel import actualizar_cotizacion_excel
except ImportError as e:
logging.error("Error importando módulos: %s", e)
raise
def validar_datos(datos_recibo):
required_fields = ["nombre_cliente", "direccion_cliente", "tarifa", "consumo_periodo_actual", "consumos_historicos", "demanda_contratada", "total_a_pagar"]
for field in required_fields:
if field not in datos_recibo:
logging.error("Campo faltante en datos del recibo: %s", field)
raise ValueError(f"Campo faltante: {field}")
logging.info("Todos los campos requeridos están presentes.")
return True
def run(datos_recibo):
try:
# Validar datos
validar_datos(datos_recibo)
# Análisis del recibo
resultado_analisis = analisis_de_recibo(
tarifa=datos_recibo["tarifa"],
consumo_periodo_actual=datos_recibo["consumo_periodo_actual"],
consumos_historicos=datos_recibo["consumos_historicos"],
nombre_cliente=datos_recibo["nombre_cliente"],
direccion_cliente=datos_recibo["direccion_cliente"],
demanda_contratada=datos_recibo["demanda_contratada"]
)
logging.info("Resultados del análisis del recibo: %s", resultado_analisis)
# Calcular artículos requeridos
articulos_requeridos = calcular_articulos_requeridos(
numero_paneles=resultado_analisis["numero_paneles"],
tarifa=datos_recibo["tarifa"]
)
logging.info("Resultados del cálculo de artículos requeridos: %s", articulos_requeridos)
# Calcular costo del proyecto
costo_proyecto = calcular_costo_proyecto(
articulos_requeridos=articulos_requeridos,
analisis_resultado=resultado_analisis,
path_precios_csv="/mnt/data/precios.csv",
tarifa=datos_recibo["tarifa"]
)
logging.info("Resultados del costo del proyecto: %s", costo_proyecto)
# Actualizar cotización en el archivo Excel
ruta_actualizada_excel = actualizar_cotizacion_excel(
analisis_resultado=resultado_analisis,
articulos_requeridos=articulos_requeridos,
costo_total_proyecto=costo_proyecto[1],
tarifa=datos_recibo["tarifa"],
path_excel="/mnt/data/cotizacion.xlsx"
nombre_cotizador= datos_recibo["nombre_cotizador"]
telefono_cotizador= datos_recibo["telefono_cotizador"]
)
logging.info("Archivo Excel actualizado en: %s", ruta_actualizada_excel)
return ruta_actualizada_excel
except Exception as e:
logging.error("Error durante la ejecución del script: %s", e)
raise
if __name__ == "__main__":
# Cargar datos del recibo desde archivo JSON
try:
with open("/mnt/data/datos_recibo.json", "r") as f:
datos_recibo = json.load(f)
except Exception as e:
logging.error("Error cargando datos del recibo: %s", e)
raise
# Ejecutar la función run con los datos del recibo
run(datos_recibo)
b6e682e..86aa377 main -> main
esto es un tema un pcoo mas grande, hay que delimitar que hay que cambiar:
en el prompt hay que espesificar las variables que vamos a incluir a datos_recibo para que incluya nombre_cotizador y pida estos datos si no se dan en la interaccion del agente, telefono_cotizador en el diccionario
en la creacion de excel hay que agregar los el cambio de celdas con esta informacion