@ -53,6 +53,50 @@ class OrderFlowMixin:
}
return any ( term in normalized for term in stock_terms )
def _extract_budget_hint_from_message ( self , message : str ) - > float | None :
normalized = self . _normalize_text ( message )
patterns = (
r " (?:ate|até|de|por|valor|orcamento|orcamento de) \ s*r? \ $? \ s*( \ d { 1,3}(?:[.,] \ d {3} )*(?:, \ d+)?| \ d+(?:[.,] \ d+)?) \ s*mil \ b " ,
r " (?:ate|até|de|por|valor|orcamento|orcamento de) \ s*r? \ $? \ s*( \ d { 4,6}(?:[.,] \ d {2} )?) \ b " ,
)
for pattern in patterns :
match = re . search ( pattern , normalized )
if not match :
continue
extracted = self . _normalize_positive_number ( match . group ( 1 ) + ( " mil " if " mil " in match . group ( 0 ) else " " ) )
if extracted :
return extracted
return None
def _extract_vehicle_profile_hint_from_message ( self , message : str ) - > list [ str ] :
normalized = self . _normalize_text ( message )
allowed = [ ]
for marker in ( " suv " , " sedan " , " hatch " , " pickup " ) :
if marker in normalized :
allowed . append ( marker )
return allowed
def _capture_order_search_hints_from_message ( self , user_id : int | None , message : str ) - > None :
if user_id is None :
return
context = self . _get_user_context ( user_id )
if not isinstance ( context , dict ) :
return
generic_memory = context . get ( " generic_memory " )
if not isinstance ( generic_memory , dict ) :
generic_memory = { }
context [ " generic_memory " ] = generic_memory
if " orcamento_max " not in generic_memory :
budget = self . _extract_budget_hint_from_message ( message )
if budget :
generic_memory [ " orcamento_max " ] = int ( round ( budget ) )
if " perfil_veiculo " not in generic_memory or not generic_memory . get ( " perfil_veiculo " ) :
profile = self . _extract_vehicle_profile_hint_from_message ( message )
if profile :
generic_memory [ " perfil_veiculo " ] = profile
def _is_valid_cpf ( self , cpf : str ) - > bool :
return is_valid_cpf ( cpf )
@ -390,6 +434,7 @@ class OrderFlowMixin:
}
draft [ " payload " ] . update ( extracted )
self . _capture_order_search_hints_from_message ( user_id = user_id , message = message )
self . _try_prefill_order_cpf_from_memory ( user_id = user_id , payload = draft [ " payload " ] )
self . _try_prefill_order_vehicle_from_context ( user_id = user_id , payload = draft [ " payload " ] )