o
    ͬtjp                     @  sx   d Z ddlmZ ddlmZmZ ddlmZ eG dd dZeG dd dZ	eG d	d
 d
Z
eG dd dZdS )zAModelos ligeros de la API CRM (campos conocidos + payload crudo).    )annotations)	dataclassfield)Anyc                   @  sZ   e Zd ZU dZded< dZded< dZded	< dZded
< edddZ	edddZ
dS )ResourceResultu'   Respuesta genérica de un recurso REST.r   data   intstatus_code strresourcepathreturnboolc                 C  s   d| j   ko
dk S   S )Nr   i,  )r
   self r   4/var/www/html/bot-asterisk-ari/backend/crm/models.pyok   s   zResourceResult.okc                 C  s.   | j d u rdS t| j tttfr| j sdS dS )NTF)r   
isinstancelistdictr   r   r   r   r   is_empty   s
   
zResourceResult.is_emptyN)r   r   )__name__
__module____qualname____doc____annotations__r
   r   r   propertyr   r   r   r   r   r   r   	   s   
 r   c                   @  s\   e Zd ZU ded< dZded< dZded< eedZded< e	dddZ
edddZdS )Clienter   idr   nombreapellidodefault_factorydict[str, Any]rawpayloadr   c                 C  s^   | t |dpd t |dp|dpd t |dp&|dp&d t|dS )Nr!   r   r"   namer#   lastname)r!   r"   r#   r'   r   getstripr   clsr(   r   r   r   from_api&   s   zCliente.from_apic                 C      d dd | j| jfD  S )N c                 s      | ]}|r|V  qd S Nr   .0pr   r   r   	<genexpr>3       z*Cliente.nombre_completo.<locals>.<genexpr>joinr"   r#   r-   r   r   r   r   nombre_completo1       zCliente.nombre_completoN)r(   r&   r   r    r   r   )r   r   r   r   r"   r#   r   r   r'   classmethodr0   r   r<   r   r   r   r   r       s   
 
r    c                   @  sB   e Zd ZU ded< dZded< eedZded< edd
dZ	dS )Productor   r!   r   r"   r$   r&   r'   r(   r   c                 C  sJ   | t |dpd t |dp|dp|dpd t|dS )Nr!   r   r"   r)   descripcion)r!   r"   r'   r+   r.   r   r   r   r0   <   s   
zProducto.from_apiN)r(   r&   r   r@   )
r   r   r   r   r"   r   r   r'   r?   r0   r   r   r   r   r@   6   s   
 r@   c                   @  s   e Zd ZU ded< dZded< dZded< dZded< dZded< dZded< d	Z	d
ed< dZ
ded< d	Zd
ed< dZded< d	Zd
ed< dZded< dZded< eedZded< ed ddZed!ddZd"ddZd!ddZdS )#Polizasr   r!   r   r"   r#   polizaproductoplan_actual        floatprecio_actualplan_ofrecidoprecio_ofrecidoprecio_especialmonto_aseguradomonedacreador$   r&   r'   r(   r   c                 C  s@  zt |dpd}W n ttfy   d}Y nw | t|dp!d t|dp+d t|dp5d t|dp?d t|dpId t|d	pSd t|d
p]d t|dpgd t|dpqd t|dp{d t|dpd t|dpd t |dpdt|dS )NpreciorF   r!   r   r"   r#   rC   rD   rE   rH   rM   rN   rI   rJ   rK   rL   )r!   r"   r#   rC   rD   rE   rH   rM   rN   rI   rJ   rK   rL   r'   )rG   r,   	TypeError
ValueErrorr   r-   r   )r/   r(   rO   r   r   r   r0   [   s*   zPolizas.from_apic                 C  r1   )Nr2   c                 s  r3   r4   r   r5   r   r   r   r8   t   r9   z*Polizas.nombre_completo.<locals>.<genexpr>r:   r   r   r   r   r<   r   r=   zPolizas.nombre_completoc                 C  sB   | j | j| j| j| j| j| j| j| j| j	| j
| j| j| j| jdS )Nr!   r"   r#   r<   rC   rD   rE   rH   rM   rN   rI   rJ   rK   rL   r'   rR   r   r   r   r   	to_publicv   s    zPolizas.to_publicc                 C  s   dd| j  d| jpd d| jpd d| jpd d| jp d d| j d	| j d
| jp1d d| jp8d d| j	 d| j
pDd d| j g}d|S )z(Texto para inyectar en el agente OpenAI.uL   DATOS PRECARGADOS DE LA PÓLIZA DEL CLIENTE (fuente CRM, no inventes otros):z- Documento/ID: z
- Nombre: z(no informado)u   - Número de póliza: z- Producto: z- Plan_actual: z- Precio_actual: z
- Moneda: u   - Fecha de creación: z(no informada)z- Plan_ofrecido: z- Precio_ofrecido: z- precio_especial: z- Monto_asegurado: 
)r!   r<   rC   rD   rE   rH   rM   rN   rI   rJ   rK   rL   r;   )r   linesr   r   r   to_prompt_block   s   





zPolizas.to_prompt_blockN)r(   r&   r   rB   r>   )r   r&   )r   r   r   r   r"   r#   rC   rD   rE   rH   rI   rJ   rK   rL   rM   rN   r   r   r'   r?   r0   r   r<   rS   rV   r   r   r   r   rB   J   s*   
 
rB   N)r   
__future__r   dataclassesr   r   typingr   r   r    r@   rB   r   r   r   r   <module>   s    