mimus-assa / enerv-sage

0 stars 0 forks source link

agregar que en el prompt podamos incluir el nombre de quien cotiza y el numero de telefono #9

Closed mimus-assa closed 1 month ago

mimus-assa commented 1 month ago

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

mimus-assa commented 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.
mimus-assa commented 1 month ago
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.
mimus-assa commented 1 month ago

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)
mimus-assa commented 1 month ago

b6e682e..86aa377 main -> main