Files
soft_usite/pkg/services/arquitectura_service.go
T
Lizandro GDandClaude Sonnet 5 516220a8a1 feat: automatización de cotizaciones, contratos, actas y cuentas de cobro con IA
Implementa las 4 fases de la especificación de automatización: módulo de
plantillas/tarifas editable por el equipo, generación de PDF (HTML+JS vía
Chrome headless) para cotizaciones/contratos/arquitecturas/cuentas de cobro,
chat propio en el dashboard reutilizando el mismo motor y tools del bot de
Telegram, y nuevas tools del agente para crear estos documentos end-to-end.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-03 00:45:58 +00:00

58 lines
1.6 KiB
Go

package services
import (
"fmt"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)
// GenerarArquitectura produce el PDF de una propuesta técnica a partir de un
// requerimiento en texto libre. Quien llama (Claude) ya consultó
// listar_arquitecturas_referencia para reutilizar patrones ya resueltos en vez de
// improvisar, y trae la propuesta ya armada; el backend solo la renderiza a PDF y,
// si aplica, la deja guardada como nueva referencia reutilizable.
func GenerarArquitectura(requerimiento, propuesta, nombre string, clienteID *uint, guardarComoReferencia bool, generadoPor string) (*models.DocumentoGenerado, error) {
if requerimiento == "" {
return nil, fmt.Errorf("requerimiento requerido")
}
if propuesta == "" {
return nil, fmt.Errorf("propuesta requerida")
}
if nombre == "" {
nombre = "Propuesta técnica"
}
var cliente *models.Cliente
if clienteID != nil {
c, err := models.GetClienteByID(*clienteID)
if err == nil {
cliente = c
}
}
datos := DatosBaseDocumento(map[string]interface{}{
"Nombre": nombre,
"Requerimiento": requerimiento,
"Propuesta": propuesta,
"Cliente": cliente,
})
doc, _, err := GenerarDocumento("arquitectura", datos, clienteID, nil, generadoPor)
if err != nil {
return nil, err
}
if guardarComoReferencia {
ref := &models.Arquitectura{
Nombre: nombre,
Descripcion: requerimiento,
ContenidoHTML: propuesta,
EsReferencia: true,
ClienteID: clienteID,
}
_ = models.CreateArquitectura(ref) // no bloquea la generación del documento si falla
}
return doc, nil
}