@ -902,7 +902,7 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
context = context ,
)
)
or self . _has_rental_payment_ or_fine_request ( message )
or self . _has_rental_payment_ message ( message )
) :
return None
@ -1042,7 +1042,6 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
if (
self . _has_rental_return_management_request ( message , user_id = user_id )
or self . _has_rental_payment_request ( message , user_id = user_id )
or self . _has_rental_fine_request ( message , user_id = user_id )
) :
return False
if (
@ -1291,8 +1290,6 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
# Detecta pedidos para registrar pagamento de aluguel.
def _has_rental_payment_request ( self , message : str , user_id : int | None = None ) - > bool :
normalized_message = self . _normalize_text ( message ) . strip ( )
if " multa " in normalized_message :
return False
payment_terms = ( " pagamento " , " comprovante " , " pix " , " boleto " )
if not any ( term in normalized_message for term in payment_terms ) :
return False
@ -1303,19 +1300,6 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
or self . _extract_rental_plate_from_text ( message )
)
# Detecta pedidos para registrar multa vinculada ao aluguel.
def _has_rental_fine_request ( self , message : str , user_id : int | None = None ) - > bool :
normalized_message = self . _normalize_text ( message ) . strip ( )
if " multa " not in normalized_message :
return False
return bool (
" aluguel " in normalized_message
or " locacao " in normalized_message
or " auto_infracao " in normalized_message
or self . _extract_rental_contract_number_from_text ( message )
or self . _extract_rental_plate_from_text ( message )
)
# Decide se a mensagem pode virar uma acao de aluguel sem depender do planner.
def _is_deterministic_rental_management_candidate ( self , message : str , user_id : int | None ) - > bool :
has_policy = hasattr ( self , " policy " ) and getattr ( self , " policy " ) is not None
@ -1326,7 +1310,6 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
return bool (
self . _has_rental_return_management_request ( message , user_id = user_id )
or self . _has_rental_payment_request ( message , user_id = user_id )
or self . _has_rental_fine_request ( message , user_id = user_id )
)
# Monta os argumentos da devolucao a partir do texto enviado pelo usuario.
@ -1387,54 +1370,7 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
return self . _merge_last_rental_reference ( user_id = user_id , arguments = arguments )
# Monta os argumentos da multa de aluguel a partir da mensagem recebida.
def _build_rental_fine_arguments_from_message ( self , message : str , user_id : int | None ) - > dict :
arguments : dict = { }
contract_number = self . _extract_rental_contract_number_from_text ( message )
if contract_number :
arguments [ " contrato_numero " ] = contract_number
plate = self . _extract_rental_plate_from_text ( message )
if plate :
arguments [ " placa " ] = plate
notice_number = self . _extract_rental_labeled_value (
message ,
( " auto_infracao " , " auto de infracao " , " auto da infracao " ) ,
)
if notice_number :
arguments [ " auto_infracao " ] = notice_number
issuing_agency = self . _extract_rental_labeled_value (
message ,
( " orgao_emissor " , " orgao emissor " ) ,
)
if issuing_agency :
arguments [ " orgao_emissor " ] = issuing_agency
amount_text = self . _extract_rental_labeled_value ( message , ( " valor " , ) )
amount = self . _normalize_positive_number ( amount_text )
if amount is not None :
arguments [ " valor " ] = float ( amount )
violation_date = self . _extract_rental_labeled_value ( message , ( " data_infracao " , " data da infracao " ) )
due_date = self . _extract_rental_labeled_value ( message , ( " vencimento " , " data_vencimento " , " data de vencimento " ) )
datetimes = self . _extract_rental_datetimes_from_text ( message )
if not violation_date and datetimes :
violation_date = datetimes [ 0 ]
if not due_date and len ( datetimes ) > = 2 :
due_date = datetimes [ 1 ]
if violation_date :
arguments [ " data_infracao " ] = violation_date
if due_date :
arguments [ " vencimento " ] = due_date
observations = self . _extract_rental_labeled_value ( message , ( " observacoes " , " observacao " ) )
if observations :
arguments [ " observacoes " ] = observations
return self . _merge_last_rental_reference ( user_id = user_id , arguments = arguments )
# Executa devolucao, pagamento ou multa de aluguel quando os dados ja estiverem claros.
# Executa devolucao ou pagamento de aluguel quando os dados ja estiverem claros.
async def _try_handle_deterministic_rental_management (
self ,
message : str ,
@ -1449,12 +1385,6 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
tool_name = " registrar_devolucao_aluguel "
arguments = self . _build_rental_return_arguments_from_message ( message = message , user_id = user_id )
missing_response = None
elif self . _has_rental_fine_request ( message , user_id = user_id ) :
tool_name = " registrar_multa_aluguel "
arguments = self . _build_rental_fine_arguments_from_message ( message = message , user_id = user_id )
missing_response = None
if " valor " not in arguments :
missing_response = " Para registrar a multa de aluguel, preciso do valor informado no documento. "
elif self . _has_rental_payment_request ( message , user_id = user_id ) :
tool_name = " registrar_pagamento_aluguel "
arguments = self . _build_rental_payment_arguments_from_message ( message = message , user_id = user_id )
@ -1497,7 +1427,7 @@ class OrquestradorService(ReviewFlowMixin, OrderFlowMixin, RentalFlowMixin):
return None
if (
self . _has_rental_return_management_request ( message , user_id = user_id )
or self . _has_rental_payment_ or_fine_request ( message )
or self . _has_rental_payment_ message ( message )
) :
return None
if (