701 lines
102 KiB
Plaintext
701 lines
102 KiB
Plaintext
[
|
|
"agent_framework_oci/tests/test_phraseology_rewrite_revalidation.py::test_phraseology_block_is_rewritten_once_and_all_rails_are_revalidated",
|
|
"agent_framework_oci/tests/test_phraseology_rewrite_revalidation.py::test_phraseology_rewrite_does_not_loop_when_rewritten_text_is_still_blocked",
|
|
"tests/migration/test_adversarial_parity.py::test_anatel_rail_e_framework_native_sem_dependencia_legado",
|
|
"tests/migration/test_adversarial_parity.py::test_cval_bloqueia_contestacao_antes_do_side_effect",
|
|
"tests/migration/test_adversarial_parity.py::test_finalizacao_informacional_infer_tipo_de_billing_analysis_json",
|
|
"tests/migration/test_adversarial_parity.py::test_finalizacao_informacional_infer_tipo_pela_fatura",
|
|
"tests/migration/test_adversarial_parity.py::test_fix_whole_utterance_transcription_preserva_fronteira_de_frase",
|
|
"tests/migration/test_adversarial_parity.py::test_output_guardrail_context_extrai_protocolos_das_tools",
|
|
"tests/migration/test_adversarial_parity.py::test_output_guardrail_context_inclui_pedido_atual_para_aoferta",
|
|
"tests/migration/test_adversarial_parity.py::test_output_guardrail_context_nao_duplica_user_text_ja_no_historico",
|
|
"tests/migration/test_adversarial_parity.py::test_post_finalize_replay_e_short_circuit_framework",
|
|
"tests/migration/test_adversarial_parity.py::test_post_finalize_replay_preserva_terminal_status_e_fallback_sem_historico",
|
|
"tests/migration/test_adversarial_parity.py::test_post_finalize_replay_status_invalido_usa_fallback_seguro",
|
|
"tests/migration/test_adversarial_parity.py::test_processing_interruption_classifier_falha_faz_replay_seguro",
|
|
"tests/migration/test_adversarial_parity.py::test_processing_interruption_classifier_resultado_1_reprocessa",
|
|
"tests/migration/test_adversarial_parity.py::test_processing_interruption_interrompivel_pede_classificacao",
|
|
"tests/migration/test_adversarial_parity.py::test_similarity_matcher_recupera_erros_de_transcricao_comuns",
|
|
"tests/migration/test_adversarial_parity.py::test_tool_clarification_aceita_opcao_ordinal",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[ - ]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[ fim -Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[-]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[FIM-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[Fim, pode encerrar-Fim, pode encerrar]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[Fim-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[Fim.-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[Mim-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[Mim?-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[Sim-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[cancela o Tamboro-cancela o Tamboro]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[chegou ao fim-chegou ao fim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[fim de semana-fim de semana]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[fim!-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[fim-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[isso \\xe9 pra mim-isso \\xe9 pra mim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[mim mesmo-mim mesmo]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[mim-Sim]",
|
|
"tests/migration/test_adversarial_parity.py::test_transcription_fix_paridade_original[n\\xe3o-n\\xe3o]",
|
|
"tests/migration/test_adversarial_parity.py::test_vas_variation_preserva_multiset_e_direcao_atual",
|
|
"tests/migration/test_adversarial_parity.py::test_vas_variation_streaming_nao_entra_no_recorte_avulso_padrao",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_aceita_alias_itens_para_contestacao",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_aceita_cpf_como_alias_social_sec_no",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_falha_operacional_com_candidato_dispara_contestacao",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_falha_workflow_preserva_output_parcial_nao_cancelados",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_sem_candidatos_nao_dispara_contestacao",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_sms_falho_preserva_sucesso_e_flag",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_contestacao_wrapper_mapeia_falha_tecnica_como_sistemica",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_contestacao_wrapper_preserva_erro_de_negocio_e_protocolo",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_contestacao_wrapper_preserva_tipo_atendimento_e_contexto_do_turno",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_invoice_explanation_branch_devolver_orquestrador_nao_auto_finaliza",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_invoice_explanation_branch_nao_sem_vas_recomenda_nao_resolvido",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_invoice_explanation_service_failure_preserva_fraseologia_sem_auto_finalize",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_pro_rata_aceite_e_nao_controle_recomendam_resolvido",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_pro_rata_branch_devolver_orquestrador_nao_auto_finaliza",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_vas_estrategico_rejeitado_declara_rag_para_cada_servico_estrategico",
|
|
"tests/migration/test_backend_wrapper_contract_parity.py::test_vas_estrategico_workflow_payload_preserva_tres_itens_e_action_agrupa_duas_linhas",
|
|
"tests/migration/test_business_events_and_guardrails.py::test_business_events_are_published_recursively_once",
|
|
"tests/migration/test_business_events_and_guardrails.py::test_cached_tool_result_does_not_republish_business_events",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_cancelamento_falha_tecnica_na_contestacao_recomenda_auto_finalizacao",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_cancelamento_item_ja_contestado_preserva_sucesso_do_cancelamento",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_cancelamento_sem_contestacao_expoe_protocolo_de_cancelamento",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_familia_contesta_titular_e_dependente_em_uma_unica_chamada",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_lote_trinta_contesta_somente_unico_candidato",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_wrapper_contestacao_zerada_usa_total_cancelado_na_mensagem",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_wrapper_itens_ja_contestados_preserva_mensagem_deterministica",
|
|
"tests/migration/test_cancel_backend_wrapper_parity.py::test_wrapper_next_subject_nao_afeta_mensagem_deterministica",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_action_cancelamento_lote_aproveita_um_sucesso_entre_falhas",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_cancelamento_dependente_resolve_cpf_da_linha_antes_do_protocolo",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_cancelamento_encadeia_contestacao_no_workflow_runtime",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_cancelamento_lote_limita_concorrencia_a_cinco",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_cancelamento_lote_nao_executa_side_effect_se_protocolo_por_linha_falhar",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_cancelamento_propaga_bloqueio_da_contestacao_sem_mascarar_sucesso",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_cancelamento_redireciona_item_estrategico_para_workflow_correto",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_cancelamento_sem_candidato_nao_abre_contestacao",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_falha_de_bloqueio_permanece_candidata_a_contestacao",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_invoice_detail_corrige_linha_do_item_antes_do_cancelamento",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_plano_familia_mantem_titular_na_contestacao_e_dependente_no_cancelamento",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_resposta_composta_preserva_protocolos_cancelamento_e_contestacao",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_result_payload_invoice_explanation_recomenda_finalizacao_por_last_node",
|
|
"tests/migration/test_cancel_composite_workflow.py::test_result_payload_pro_rata_recomenda_finalizacao_somente_nos_ramos_finais",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_cancelamento_com_protocolo_sem_item_contestado_continua_resolvido",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_candidato_explicito_e_contestado_mesmo_sem_cancelamento_bem_sucedido",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_falha_parcial_rt01_ainda_dispara_rt02[block_vas_failed-Timeout no bloqueio]",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_falha_parcial_rt01_ainda_dispara_rt02[cancel_vas_failed-Erro no cancelamento]",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_falha_sms_e_propagada_sem_expor_sms_sent",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_holder_msisdn_nao_e_trocado_pela_linha_dependente",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_item_do_titular_nao_e_marcado_como_dependente",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_lista_explicita_vazia_de_candidatos_nao_faz_fallback_para_cancelados",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_no_match_nao_contesta_valor_nem_chama_contestacao",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_protocol_closed_da_contestacao_e_preservado",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_sms_flag_interno_nao_vaza_no_contrato_externo",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_success_implicito_por_cancelados_sem_flag_success",
|
|
"tests/migration/test_cancel_wrapper_remaining_parity.py::test_titular_e_dependentes_permancem_em_uma_unica_contestacao",
|
|
"tests/migration/test_contas_domain_mock.py::test_cancel_vas_is_domain_operation_not_conversation_engine",
|
|
"tests/migration/test_contas_domain_mock.py::test_cancelamento_batch_emite_vaa004_quando_falha_operacional",
|
|
"tests/migration/test_contas_domain_mock.py::test_cancelamento_batch_emite_vaa_caminho_feliz_uma_vez",
|
|
"tests/migration/test_contas_domain_mock.py::test_cancelamento_nao_recancela_servico_inativo_do_historico",
|
|
"tests/migration/test_contas_domain_mock.py::test_cancelamento_usa_historico_como_fallback_quando_ativo_nao_encontra",
|
|
"tests/migration/test_contas_domain_mock.py::test_contestation_mock",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_com_protocolo_existente_nao_cria_informacional",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_cria_protocolo_informacional_quando_invoice_explanation_executou",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_force_rt15_cria_novo_protocolo_mesmo_com_veb_fechado",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_cria_protocolo_fechado_sem_duplicar_status",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types0-Explica\\xe7\\xe3o de VAS Bundle]",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types1-Explica\\xe7\\xe3o de VAS Estrat\\xe9gico]",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types2-Explica\\xe7\\xe3o de VAS Avulso]",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types3-Explica\\xe7\\xe3o de VAS Bundle, VAS Estrat\\xe9gico]",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types4-Explica\\xe7\\xe3o de VAS Bundle, VAS Avulso]",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types5-Explica\\xe7\\xe3o de VAS Estrat\\xe9gico, VAS Avulso]",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types6-Explica\\xe7\\xe3o de VAS Bundle, VAS Estrat\\xe9gico, VAS Avulso]",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_nao_cria_protocolo_apenas_por_prefetch_invoice_explanation",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_nao_duplica_protocolo_quando_contestacao_ja_existe",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_normaliza_status_invalido_e_summary",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_preserva_status_valido_e_prefixa_summary",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_reusa_protocolo_veb_ja_fechado_sem_abrir_outro",
|
|
"tests/migration/test_contas_domain_mock.py::test_finalizacao_veb_deferido_suprime_evento_cvn_de_protocolo",
|
|
"tests/migration/test_contas_domain_mock.py::test_invoice_explanation_converte_retry_transport_em_rct_por_tentativa",
|
|
"tests/migration/test_contas_domain_mock.py::test_invoice_explanation_falha_preserva_rct_das_tres_tentativas",
|
|
"tests/migration/test_contas_domain_mock.py::test_read_only_integrations_with_fixtures",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_abrir_contestacao_deriva_refund_manual_e_normaliza_barcode_zero",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_check_invoice_status_enriquece_prefetch_sem_nova_api",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_check_invoice_status_falha_sem_prefetch",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_cutdate_da_fatura_define_manual",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_cutdate_regra_um_mes",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_cutoff_referencia_corrige_bug_mes_seguinte",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_dependente_forca_conta_certa_manual",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_due_day_iso_e_br",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_refund_boleto_para_fatura_em_aberto_com_fatura_normal",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_refund_credito_para_dacc_cartao_ou_parcelamento",
|
|
"tests/migration/test_contestation_business_rules_full.py::test_refund_credito_para_fatura_paga_ou_ja_contestada",
|
|
"tests/migration/test_contestation_failure_mapping.py::test_contestacao_failed_preserva_provider_message_e_protocolo",
|
|
"tests/migration/test_contestation_failure_mapping.py::test_contestacao_failed_sem_mensagem_provider_vira_falha_sistemica",
|
|
"tests/migration/test_dispute_actions_remaining_parity.py::test_conta_certa_manual_falha_api_e_best_effort",
|
|
"tests/migration/test_dispute_actions_remaining_parity.py::test_sms_falha_nao_interrompe_fluxo_e_marca_flag",
|
|
"tests/migration/test_dispute_actions_remaining_parity.py::test_sms_usa_barcode_titular_e_payload_padrao",
|
|
"tests/migration/test_dispute_actions_remaining_parity.py::test_status_sr_nao_faz_tracking_de_fatura_errada",
|
|
"tests/migration/test_dispute_actions_remaining_parity.py::test_status_sr_sms_path_e_tracking_completo",
|
|
"tests/migration/test_external_guardrails_judges_spi.py::test_contas_config_substitui_policies_tim_por_extensoes",
|
|
"tests/migration/test_external_guardrails_judges_spi.py::test_external_judges_load_from_agent_config",
|
|
"tests/migration/test_external_guardrails_judges_spi.py::test_sync_external_rail_runs_in_worker_thread",
|
|
"tests/migration/test_external_guardrails_judges_spi.py::test_sync_judges_run_concurrently_in_threads",
|
|
"tests/migration/test_finalization_parity_extended.py::test_cpf_alias_is_forwarded_to_informational_protocol",
|
|
"tests/migration/test_finalization_parity_extended.py::test_deferred_bundle_and_strategic_items_create_combined_rt15_without_workflow_latch",
|
|
"tests/migration/test_finalization_parity_extended.py::test_existing_session_protocol_prevents_duplicate_informational_rt15",
|
|
"tests/migration/test_finalization_parity_extended.py::test_free_customer_phrase_without_evidence_does_not_create_protocol",
|
|
"tests/migration/test_finalization_parity_extended.py::test_handoff_suppression_emits_only_sad001",
|
|
"tests/migration/test_finalization_parity_extended.py::test_invoice_detail_conflict_overrides_saved_informational_type",
|
|
"tests/migration/test_finalization_parity_extended.py::test_invoice_detail_without_match_ignores_saved_type_and_does_not_create_protocol",
|
|
"tests/migration/test_finalization_parity_extended.py::test_invoice_explanation_finalization_orders_events_and_returns_alias",
|
|
"tests/migration/test_finalization_parity_extended.py::test_invoice_explanation_negative_emits_cvn009_mpi005_without_protocol_when_no_notes",
|
|
"tests/migration/test_finalization_parity_extended.py::test_invoice_explanation_only_registers_protocol_at_finalization",
|
|
"tests/migration/test_finalization_parity_extended.py::test_invoice_explanation_uses_canonical_notes_not_free_text",
|
|
"tests/migration/test_finalization_parity_extended.py::test_known_avulso_is_classified_without_invoice_detail",
|
|
"tests/migration/test_finalization_parity_extended.py::test_legacy_final_alias_normalizes_to_resolved_without_spurious_protocol",
|
|
"tests/migration/test_finalization_parity_extended.py::test_partial_invoice_inference_merges_saved_avulso_type",
|
|
"tests/migration/test_finalization_parity_extended.py::test_prefetch_invoice_context_guarantees_lookup_and_rt15_without_latched_workflow",
|
|
"tests/migration/test_finalization_parity_extended.py::test_protocol_failure_does_not_fail_finalization_and_emits_negative_events",
|
|
"tests/migration/test_finalization_parity_extended.py::test_rag_saved_type_is_used_when_invoice_detail_is_absent",
|
|
"tests/migration/test_finalization_parity_extended.py::test_sad_decision_tree_handoff_second_time",
|
|
"tests/migration/test_finalization_parity_extended.py::test_strategic_notes_take_priority_over_prior_invoice_explanation_notes",
|
|
"tests/migration/test_finalization_parity_extended.py::test_strategic_partner_is_classified_without_invoice_detail",
|
|
"tests/migration/test_finalization_parity_extended.py::test_terminal_veb_resolution_suppresses_cvn_mpi_and_duplicate_rt15",
|
|
"tests/migration/test_finalization_parity_extended.py::test_three_informational_vas_types_have_canonical_order",
|
|
"tests/migration/test_finalization_parity_extended.py::test_transactional_cancel_finalization_does_not_emit_cvn_or_mpi_even_with_summary",
|
|
"tests/migration/test_finalization_parity_extended.py::test_transactional_workflow_does_not_emit_informational_acceptance",
|
|
"tests/migration/test_finalization_parity_extended.py::test_unresolved_transition_does_not_reemit_positive_cvn_or_mpi",
|
|
"tests/migration/test_framework_llm_composition_directive.py::test_direct_answer_eh_desabilitada_quando_tool_exige_composicao_llm",
|
|
"tests/migration/test_framework_llm_composition_directive.py::test_framework_detecta_instrucao_de_composicao_llm_recursiva",
|
|
"tests/migration/test_framework_llm_composition_directive.py::test_pro_rata_orientacao_declara_composicao_no_llm_do_framework",
|
|
"tests/migration/test_framework_native_structure.py::test_agent_workflow_init_realmente_inicializa_router_agentes_e_graph",
|
|
"tests/migration/test_framework_native_structure.py::test_all_active_workflow_actions_registered",
|
|
"tests/migration/test_framework_native_structure.py::test_contestacao_workflow_encerra_imediatamente_quando_cval_bloqueia",
|
|
"tests/migration/test_framework_native_structure.py::test_domain_does_not_import_langgraph_directly",
|
|
"tests/migration/test_framework_native_structure.py::test_guardrail_config_declares_all_execution_stages",
|
|
"tests/migration/test_framework_native_structure.py::test_official_templates_use_framework_state_graph",
|
|
"tests/migration/test_framework_native_structure.py::test_workflow_runtime_preserva_snapshot_parcial_quando_action_posterior_falha",
|
|
"tests/migration/test_framework_rag_directive.py::test_tool_pode_forcar_rag_e_fornecer_query_override",
|
|
"tests/migration/test_framework_rag_directive.py::test_vas_estrategico_rejeitado_declara_rag_sem_executar_rag_no_dominio",
|
|
"tests/migration/test_framework_zero_legacy.py::test_framework_source_has_zero_legacy_namespace_references",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[PINJ--True]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[PINJ-0-False]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[PINJ-1-True]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[PINJ-prosa 1 e veredito 0-False]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[PINJ-sem digito-True]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[REVPREC--True]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[REVPREC-0-True]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[REVPREC-1-False]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[REVPREC-Resposta: 1-False]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_guardrail_semantics[REVPREC-n\\xe3o sei-True]",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_binary_polarity_contract",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_pinj_prompt_is_binary_and_keeps_examples",
|
|
"tests/migration/test_guardrail_binary_parity.py::test_revprec_prompt_preserves_boundaries",
|
|
"tests/migration/test_guardrail_context_dict_history.py::test_format_context_block_suporta_history_em_dict_do_contas",
|
|
"tests/migration/test_guardrail_original_defaults_parity.py::test_framework_loader_instancia_coer_e_preserva_fraseologia_tim_desabilitada",
|
|
"tests/migration/test_guardrail_original_defaults_parity.py::test_original_default_guardrails_estao_ativos_no_pipeline_framework",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_billing_analysis_falha_emite_cvn007_sem_perder_complete_invoices",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_cache_hit_expoe_cache_age_sem_republicar_eventos",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_cache_incompleto_busca_detail_quando_solicitado_depois",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_expoe_timings_e_erros_por_subconsulta",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_isola_cache_por_sessao",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_nova_sessao_pode_emitir_cvn_novamente",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_prefetch_emite_cvn_uma_vez_por_sessao",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_reusa_cache_na_mesma_sessao",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_sem_session_nao_compartilha_cache_global",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_singleflight_mesma_sessao_nao_duplica_chamadas",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_context_use_cache_false_forca_nova_busca",
|
|
"tests/migration/test_invoice_context_framework_native.py::test_invoice_explanation_reusa_evidencia_prefetch_sem_nova_api",
|
|
"tests/migration/test_mcp_contestation_subject_guard.py::test_cancel_preflight_exact_plan_is_out_of_scope_and_never_rebound_to_vas",
|
|
"tests/migration/test_mcp_contestation_subject_guard.py::test_correct_subject_is_preserved",
|
|
"tests/migration/test_mcp_contestation_subject_guard.py::test_invoice_resolver_exact_plan_identity_wins_before_similarity_matcher",
|
|
"tests/migration/test_mcp_contestation_subject_guard.py::test_preflight_does_not_replace_explicit_plan_with_vas",
|
|
"tests/migration/test_mcp_contestation_subject_guard.py::test_recovers_explicit_contestation_subject_from_original_text",
|
|
"tests/migration/test_no_legacy_dependency.py::test_no_legacy_imports_or_references",
|
|
"tests/migration/test_observability_code_mapping.py::test_agent_observer_maps_before_analytics_and_event_bus",
|
|
"tests/migration/test_observability_code_mapping.py::test_contas_telemetry_observer_returns_mapped_envelope",
|
|
"tests/migration/test_observability_code_mapping.py::test_generation_observation_name_is_mapped_before_langfuse_and_event_bus",
|
|
"tests/migration/test_observability_code_mapping.py::test_langfuse_analytics_direct_sdk_path_also_maps_observation_name",
|
|
"tests/migration/test_observability_code_mapping.py::test_mapper_passthrough_and_contract_fields",
|
|
"tests/migration/test_observability_code_mapping.py::test_span_name_is_mapped_before_otel_event_bus_and_langfuse",
|
|
"tests/migration/test_observability_code_mapping.py::test_telemetry_maps_direct_events",
|
|
"tests/migration/test_observability_default_overlay_compatibility.py::test_agent_overlay_can_override_default_action",
|
|
"tests/migration/test_observability_default_overlay_compatibility.py::test_agent_overlay_overrides_only_declared_entries",
|
|
"tests/migration/test_observability_default_overlay_compatibility.py::test_framework_default_carries_legacy_phraseology_rewrite_policy",
|
|
"tests/migration/test_observability_default_overlay_compatibility.py::test_old_agent_without_mapping_gets_framework_default_registry",
|
|
"tests/migration/test_observability_default_overlay_compatibility.py::test_old_legacy_rail_keeps_retry_with_new_framework_and_no_agent_mapping",
|
|
"tests/migration/test_observability_mapping_provider_boundary.py::test_mapping_path_can_resolve_from_python_import_root",
|
|
"tests/migration/test_observability_mapping_provider_boundary.py::test_provider_maps_guardrail_name_before_telemetry",
|
|
"tests/migration/test_observability_mapping_registry_actions.py::test_action_resolution_accepts_internal_and_external_aliases",
|
|
"tests/migration/test_observability_mapping_registry_actions.py::test_compact_and_rich_mapping_are_backward_compatible",
|
|
"tests/migration/test_observability_mapping_registry_actions.py::test_guardrails_yaml_policy_precedes_registry_action",
|
|
"tests/migration/test_observability_mapping_registry_actions.py::test_output_supervisor_uses_registry_action_without_name_hardcode",
|
|
"tests/migration/test_observability_mapping_registry_actions.py::test_parallel_executor_uses_same_registry",
|
|
"tests/migration/test_original_compliance_anatel.py::test_fluxo_ajuste_com_protocolo_passa",
|
|
"tests/migration/test_original_compliance_anatel.py::test_fluxo_ajuste_sem_protocolo_bloqueia",
|
|
"tests/migration/test_original_compliance_anatel.py::test_fluxo_nao_ajuste_passa_sem_verificar",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_de_protocolo_aceitos[O n\\xfamero de protocolo: 654321 foi registrado.]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_de_protocolo_aceitos[PROTOCOLO: 1000001]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_de_protocolo_aceitos[Protocolo: 123456]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_de_protocolo_aceitos[Seu protocolo \\xe9 200001.]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_de_protocolo_aceitos[protocolo - 9876543]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_invalidos_ou_ausentes_bloqueiam[O ajuste foi feito.]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_invalidos_ou_ausentes_bloqueiam[Protocolo: 12345]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_invalidos_ou_ausentes_bloqueiam[Tudo certo com sua solicita\\xe7\\xe3o.]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_formatos_invalidos_ou_ausentes_bloqueiam[protocolo ABC123]",
|
|
"tests/migration/test_original_compliance_anatel.py::test_pipeline_ajuste_com_protocolo_passa",
|
|
"tests/migration/test_original_compliance_anatel.py::test_pipeline_ajuste_sem_protocolo_nao_bloqueia_cmp",
|
|
"tests/migration/test_original_compliance_anatel.py::test_pipeline_cmp_nao_entra_nos_results",
|
|
"tests/migration/test_original_compliance_anatel.py::test_pipeline_sem_context_nao_exige_protocolo",
|
|
"tests/migration/test_original_compliance_anatel.py::test_requer_protocolo_true_com_protocolo_passa",
|
|
"tests/migration/test_original_compliance_anatel.py::test_requer_protocolo_true_sem_protocolo_bloqueia",
|
|
"tests/migration/test_original_contestation_validation.py::test_contestation_action_calculates_totals_only_for_items_actually_contested",
|
|
"tests/migration/test_original_contestation_validation.py::test_contestation_action_classifies_already_contested_and_missing_requested_item",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_aprova_quando_total_ajustes_dentro_do_limite",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_classe_estrategico_canonica",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_item_fora_da_secao_vas",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_item_inexistente",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_quando_total_ajustes_excede_fatura",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_valor_maior_que_o_item",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_vas_estrategico",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_emite_span_quando_aprova",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_emite_spans_quando_bloqueia",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_prefere_evidencia_vas_quando_item_aparece_em_multiplas_visoes",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_reconhece_vas_por_type_do_billing_analysis",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_span_blocked_inclui_contagens",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_usa_classe_avulso_canonica",
|
|
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_valida_todos_antes_de_retornar",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[agebeo max]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[apou]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[babel]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[chat lovme]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[disnei]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[dizer]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[dog lovers]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[fitimiap]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[fluidi]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[fuze forge]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[globoplei]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[gueimiloft]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[instarena]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[ispian]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[jok\\xf4]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[kidsclube]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[laivifci]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[master chefe]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[mestershef]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[mundome]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[netiflix]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[paramaunt]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[plei kids]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[pocoio]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[praim tube]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[star]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[superclip]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[tamboro]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[teplingo]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[tim miusic]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[trucaller]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[trucoler]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[ubook]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[uman fitness]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_erro_de_transcricao_ranqueia_familia_no_topo[zodiaque]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[agebeo max]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[apou]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[babel]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[chat lovme]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[disnei]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[dizer]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[dog lovers]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[fitimiap]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[fluidi]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[fuze forge]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[globoplei]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[gueimiloft]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[instarena]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[ispian]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[jok\\xf4]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[kidsclube]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[laivifci]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[master chefe]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[mestershef]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[mundome]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[netiflix]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[paramaunt]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[plei kids]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[pocoio]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[praim tube]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[star]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[superclip]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[tamboro]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[teplingo]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[tim miusic]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[trucaller]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[trucoler]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[ubook]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[uman fitness]",
|
|
"tests/migration/test_original_item_matcher_transcription.py::test_top_k_nao_perde_a_familia[zodiaque]",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_no_match_credito_todos_nao_encontrados_singular",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_no_match_misto_credito",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_no_match_misto_singular_cada_lista",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_no_match_misto_sms",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_no_match_sms_todos_nao_encontrados",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_payload_nao_classificavel_sem_sucesso_retorna_vazio",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_1_1_misto_com_sms_aplica_regra_6",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_1_1_misto_credito",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_2_credito_plural_com_regra_5",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_2_credito_singular",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_3_e_6_2_falha_no_sms_plural",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_3_sucesso_com_sms_singular",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_7_protocolos_multiplos",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_8_adiciona_ponto_quando_texto_nao_termina_em_pontuacao",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_8_erro_terminal_copia_literal_e_protocolo",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_regra_8_item_ja_contestado_informa_cancelamentos_realizados",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_sms_enviado_prevalece_quando_contested_items_esta_vazio",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_sucesso_sem_itens_detalhados_gera_confirmacao_generica",
|
|
"tests/migration/test_original_vas_cancellation_message.py::test_sucesso_sem_itens_e_sem_protocolo_so_confirmacao",
|
|
"tests/migration/test_original_vas_variation.py::test_ambiguidade_falha_fechada",
|
|
"tests/migration/test_original_vas_variation.py::test_ambos_sem_data_falha_fechada",
|
|
"tests/migration/test_original_vas_variation.py::test_avulso_variado_casa_nome_e_valor",
|
|
"tests/migration/test_original_vas_variation.py::test_bucket_por_msisdn",
|
|
"tests/migration/test_original_vas_variation.py::test_candidato_sem_data_nao_pode_ser_eliminado",
|
|
"tests/migration/test_original_vas_variation.py::test_cenario_real_cy0001_pega_so_o_item_que_variou",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[-None]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[0000-12-31T20:53:32.000Z-None]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[01/11/2025-('2025', '11', '01')]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[01/11/25-('2025', '11', '01')]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[2025-11-01T00:00:00.000Z-('2025', '11', '01')]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[25/06/26-('2026', '06', '25')]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[32/13/25-None]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[None-None]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_date_key_normaliza_ou_recusa[lixo-None]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_match_key_normaliza_nome_e_valor",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_match_key_sem_identidade[-19.9]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_match_key_sem_identidade[Carnal Mensal-None]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_match_key_sem_identidade[Carnal Mensal-n/a]",
|
|
"tests/migration/test_original_vas_variation.py::test_charge_match_key_sem_identidade[None-19.9]",
|
|
"tests/migration/test_original_vas_variation.py::test_cobranca_duplicada_conta_as_duas",
|
|
"tests/migration/test_original_vas_variation.py::test_cobranca_so_na_linha_secundaria_casa_naquela_linha",
|
|
"tests/migration/test_original_vas_variation.py::test_data_unica_casa_item_em_outro_bucket_da_fatura_atual",
|
|
"tests/migration/test_original_vas_variation.py::test_data_unica_casando_a_atual_conta_como_entrada",
|
|
"tests/migration/test_original_vas_variation.py::test_data_unica_sem_casar_a_atual_conta_como_saida",
|
|
"tests/migration/test_original_vas_variation.py::test_data_unica_sem_current_invoice_nao_oferta",
|
|
"tests/migration/test_original_vas_variation.py::test_desc_devolvido_e_o_cru_da_fatura",
|
|
"tests/migration/test_original_vas_variation.py::test_descarte_emite_exatamente_um_evento_por_cobranca",
|
|
"tests/migration/test_original_vas_variation.py::test_duas_cobrancas_identicas_novas_contam_as_duas",
|
|
"tests/migration/test_original_vas_variation.py::test_duas_identicas_com_uma_na_passada_conta_apenas_uma",
|
|
"tests/migration/test_original_vas_variation.py::test_duas_variacoes_e_duas_identidades_uma_sem_msisdn",
|
|
"tests/migration/test_original_vas_variation.py::test_entrou_na_atual_e_detectado",
|
|
"tests/migration/test_original_vas_variation.py::test_estrategico_com_nome_qualificado_continua_fora",
|
|
"tests/migration/test_original_vas_variation.py::test_explained_charges_degrada_sem_quebrar[ ]",
|
|
"tests/migration/test_original_vas_variation.py::test_explained_charges_degrada_sem_quebrar[None]",
|
|
"tests/migration/test_original_vas_variation.py::test_explained_charges_degrada_sem_quebrar[]",
|
|
"tests/migration/test_original_vas_variation.py::test_explained_charges_degrada_sem_quebrar[texto sem nada]",
|
|
"tests/migration/test_original_vas_variation.py::test_explained_charges_degrada_sem_quebrar[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]",
|
|
"tests/migration/test_original_vas_variation.py::test_explained_charges_so_extrai_bullet_com_data",
|
|
"tests/migration/test_original_vas_variation.py::test_explicacao_nao_altera_casamento_ja_valido",
|
|
"tests/migration/test_original_vas_variation.py::test_fatura_realista_expoe_so_os_avulsos_que_entraram",
|
|
"tests/migration/test_original_vas_variation.py::test_forma_alternativa_ddmmyyyy_e_float",
|
|
"tests/migration/test_original_vas_variation.py::test_grupo_avulso_ausente",
|
|
"tests/migration/test_original_vas_variation.py::test_grupo_streaming_fora_do_recorte_avulso",
|
|
"tests/migration/test_original_vas_variation.py::test_guard_classe_mista_na_mesma_fatura",
|
|
"tests/migration/test_original_vas_variation.py::test_guard_nome_estrategico_no_bucket_avulso_da_api",
|
|
"tests/migration/test_original_vas_variation.py::test_guards_valem_no_passe_por_data",
|
|
"tests/migration/test_original_vas_variation.py::test_hint_nao_e_reutilizado_por_duas_cobrancas",
|
|
"tests/migration/test_original_vas_variation.py::test_inalterados_nao_entram",
|
|
"tests/migration/test_original_vas_variation.py::test_item_sem_valor_nao_entra",
|
|
"tests/migration/test_original_vas_variation.py::test_mesma_cobranca_em_duas_linhas_falha_fechada",
|
|
"tests/migration/test_original_vas_variation.py::test_mesmo_valor_produtos_diferentes_datas_distintas",
|
|
"tests/migration/test_original_vas_variation.py::test_msisdn_ausente_continua_bloqueando_no_passe_por_data",
|
|
"tests/migration/test_original_vas_variation.py::test_msisdn_ausente_nao_produz_item_cancelavel",
|
|
"tests/migration/test_original_vas_variation.py::test_mudanca_de_valor_conta_o_valor_novo",
|
|
"tests/migration/test_original_vas_variation.py::test_multiplicidade_preservada_quando_a_contagem_bate",
|
|
"tests/migration/test_original_vas_variation.py::test_multiplicidade_real_dois_hints_casam_dois_itens",
|
|
"tests/migration/test_original_vas_variation.py::test_nome_curto_casa_com_nome_qualificado_da_fatura",
|
|
"tests/migration/test_original_vas_variation.py::test_nome_da_variacao_mais_longo_que_o_da_fatura_nao_casa",
|
|
"tests/migration/test_original_vas_variation.py::test_nome_identico_continua_casando_pela_primeira_passada",
|
|
"tests/migration/test_original_vas_variation.py::test_nome_qualificado_casa_por_valor_e_data",
|
|
"tests/migration/test_original_vas_variation.py::test_nome_qualificado_com_data_divergente_nao_casa",
|
|
"tests/migration/test_original_vas_variation.py::test_ordem_das_linhas_nao_altera_a_decisao",
|
|
"tests/migration/test_original_vas_variation.py::test_ordem_nao_altera_o_caso_a",
|
|
"tests/migration/test_original_vas_variation.py::test_ordenacao_por_data_nao_lexicografica",
|
|
"tests/migration/test_original_vas_variation.py::test_passe_residual_exige_cardinalidade_exata",
|
|
"tests/migration/test_original_vas_variation.py::test_payload_invalido_devolve_vazio[grupo-sem-items]",
|
|
"tests/migration/test_original_vas_variation.py::test_payload_invalido_devolve_vazio[grupos-invalidos]",
|
|
"tests/migration/test_original_vas_variation.py::test_payload_invalido_devolve_vazio[lista-vazia]",
|
|
"tests/migration/test_original_vas_variation.py::test_payload_invalido_devolve_vazio[none]",
|
|
"tests/migration/test_original_vas_variation.py::test_payload_invalido_devolve_vazio[tipo-errado]",
|
|
"tests/migration/test_original_vas_variation.py::test_payload_invalido_devolve_vazio[vazio]",
|
|
"tests/migration/test_original_vas_variation.py::test_prefixo_de_tokens_desligado_por_padrao",
|
|
"tests/migration/test_original_vas_variation.py::test_prefixo_no_meio_do_nome_nao_casa",
|
|
"tests/migration/test_original_vas_variation.py::test_removido_nao_oferta",
|
|
"tests/migration/test_original_vas_variation.py::test_resolucao_parcial_e_proibida",
|
|
"tests/migration/test_original_vas_variation.py::test_sem_fatura_devolve_none",
|
|
"tests/migration/test_original_vas_variation.py::test_sem_hint_para_a_cobranca_falha_fechada",
|
|
"tests/migration/test_original_vas_variation.py::test_sem_variacao_devolve_lista_vazia",
|
|
"tests/migration/test_original_vas_variation.py::test_sentinela_na_explicacao_nao_vira_evidencia",
|
|
"tests/migration/test_original_vas_variation.py::test_streaming_e_ignorado",
|
|
"tests/migration/test_original_vas_variation.py::test_titular_e_dependente_datas_diferentes_casa_a_linha_certa",
|
|
"tests/migration/test_original_vas_variation.py::test_titular_e_dependente_mesma_data_falha_fechada",
|
|
"tests/migration/test_original_vas_variation.py::test_uma_variacao_e_duas_identidades_uma_sem_msisdn_falha_fechada",
|
|
"tests/migration/test_original_vas_variation.py::test_valor_divergente_entre_as_fontes_nao_casa",
|
|
"tests/migration/test_original_vas_variation.py::test_valor_divergente_nao_casa_mesmo_com_prefixo",
|
|
"tests/migration/test_original_vas_variation.py::test_variado_ausente_da_fatura_e_logado",
|
|
"tests/migration/test_original_vas_variation.py::test_variation_source_cai_no_invoice_detail",
|
|
"tests/migration/test_original_vas_variation.py::test_variation_source_prefere_a_analise",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_ignora_grupo_que_nao_e_vas",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_le_a_analise_do_invoice_detail_como_fallback",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_nao_consulta_a_fatura",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_particiona_pela_uniao_dos_grupos",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_pega_o_avulso_tambem",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_pega_o_estrategico_que_variou",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_sem_analise_devolve_vazio",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_sem_variacao_devolve_vazio",
|
|
"tests/migration/test_original_vas_variation.py::test_vas_variado_soma_os_dois_grupos",
|
|
"tests/migration/test_original_vas_variation.py::test_vencimento_ilegivel_aborta",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A01-fluid-light-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A02-fluid-premium-x-light]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A03-aya-books-x-audiobooks]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A04-aya-ensinah-x-books]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A05-exa-seguranca-x-cloud]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A06-bancah-jornais-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A07-itgame-light-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A08-aluguel-filme-1-x-2]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A09-tim-games-mensal-x-semanal]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A10-kids-plus-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A11-exa-premium-x-protecao]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A12-tim-games-prefixo]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A13-fit-app-x-fit-me-app]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A14-tim-music-plus-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A15-kids-prefixo]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B01-fitme-16.99-x-17.00]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B02-fitme-16.99-x-16.98]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B03-fluid-14.99-x-15.00]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B04-exa-9.99-x-9.98]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B05-fitme-prefixo-valor-errado]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B06-aya-24.90-x-24.91]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B07-itgame-12.90-x-12.09]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B08-fitme-16.99-x-169.90]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C01-hbo-secao-terceiros]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C02-netflix-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C03-youtube-mis-bucket]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C04-deezer-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C05-apple-music-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C06-bundle-incluso]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C07-fitme-classificado-estrategico]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D01-fitme-dois-candidatos]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D02-fitme-tres-candidatos]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D03-aya-tres-marcas]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D04-mesmo-nome-duas-linhas]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D05-duplicata-mesma-linha]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D06-fluid-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D07-exa-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D08-bancah-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E01-prefixo-invertido]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E02-substring-no-meio]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E03-sufixo-games-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E04-token-parcial-tube]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E05-token-solto-app]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E06-fitme-fail-closed-por-padrao]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F01-msisdn-ausente]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F02-item-na-linha-secundaria]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F03-secao-sem-classe]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F04-desc-vazia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F05-valor-nao-parseavel]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F06-fatura-sem-o-item]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_flag_liga_a_segunda_passada_e_so_isso",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_flag_ligada_nao_reabre_msisdn_nem_ambiguidade",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E01-prefixo-invertido]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E02-substring-no-meio]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E03-sufixo-games-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E04-token-parcial-tube]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E05-token-solto-app]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E06-fitme-fail-closed-por-padrao]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A01-fluid-light-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A02-fluid-premium-x-light]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A03-aya-books-x-audiobooks]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A04-aya-ensinah-x-books]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A05-exa-seguranca-x-cloud]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A06-bancah-jornais-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A07-itgame-light-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A08-aluguel-filme-1-x-2]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A09-tim-games-mensal-x-semanal]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A10-kids-plus-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A11-exa-premium-x-protecao]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A12-tim-games-prefixo]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A13-fit-app-x-fit-me-app]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A14-tim-music-plus-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A15-kids-prefixo]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B01-fitme-16.99-x-17.00]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B02-fitme-16.99-x-16.98]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B03-fluid-14.99-x-15.00]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B04-exa-9.99-x-9.98]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B05-fitme-prefixo-valor-errado]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B06-aya-24.90-x-24.91]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B07-itgame-12.90-x-12.09]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B08-fitme-16.99-x-169.90]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C01-hbo-secao-terceiros]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C02-netflix-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C03-youtube-mis-bucket]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C04-deezer-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C05-apple-music-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C06-bundle-incluso]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C07-fitme-classificado-estrategico]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D01-fitme-dois-candidatos]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D02-fitme-tres-candidatos]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D03-aya-tres-marcas]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D04-mesmo-nome-duas-linhas]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D05-duplicata-mesma-linha]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D06-fluid-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D07-exa-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D08-bancah-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E01-prefixo-invertido]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E02-substring-no-meio]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E03-sufixo-games-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E04-token-parcial-tube]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E05-token-solto-app]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E06-fitme-fail-closed-por-padrao]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F01-msisdn-ausente]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F02-item-na-linha-secundaria]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F03-secao-sem-classe]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F04-desc-vazia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F05-valor-nao-parseavel]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F06-fatura-sem-o-item]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A01-fluid-light-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A02-fluid-premium-x-light]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A03-aya-books-x-audiobooks]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A04-aya-ensinah-x-books]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A05-exa-seguranca-x-cloud]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A06-bancah-jornais-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A07-itgame-light-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A08-aluguel-filme-1-x-2]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A09-tim-games-mensal-x-semanal]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A10-kids-plus-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A11-exa-premium-x-protecao]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A12-tim-games-prefixo]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A13-fit-app-x-fit-me-app]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A14-tim-music-plus-x-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A15-kids-prefixo]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B01-fitme-16.99-x-17.00]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B02-fitme-16.99-x-16.98]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B03-fluid-14.99-x-15.00]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B04-exa-9.99-x-9.98]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B05-fitme-prefixo-valor-errado]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B06-aya-24.90-x-24.91]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B07-itgame-12.90-x-12.09]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B08-fitme-16.99-x-169.90]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C01-hbo-secao-terceiros]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C02-netflix-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C03-youtube-mis-bucket]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C04-deezer-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C05-apple-music-em-secao-avulsa]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C06-bundle-incluso]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C07-fitme-classificado-estrategico]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D01-fitme-dois-candidatos]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D02-fitme-tres-candidatos]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D03-aya-tres-marcas]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D04-mesmo-nome-duas-linhas]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D05-duplicata-mesma-linha]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D06-fluid-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D07-exa-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D08-bancah-familia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E01-prefixo-invertido]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E02-substring-no-meio]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E03-sufixo-games-premium]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E04-token-parcial-tube]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E05-token-solto-app]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E06-fitme-fail-closed-por-padrao]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F01-msisdn-ausente]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F02-item-na-linha-secundaria]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F03-secao-sem-classe]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F04-desc-vazia]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F05-valor-nao-parseavel]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F06-fatura-sem-o-item]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.85]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.95]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.97]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.99]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.9]",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_shadow_similaridade_tem_overlap_irremovivel",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_suite_tem_exatamente_50_casos_com_a_distribuicao_exigida",
|
|
"tests/migration/test_original_vas_variation_adversarial.py::test_valores_sao_decimal_nunca_float",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[contestacao_tool_tipo_atendimento_cancelamento_vas_avulso]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[contestacao_tool_tipo_atendimento_contestacao]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[contestacao_tool_tipo_atendimento_pro_rata]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[contestacao_tool_tipo_atendimento_valor_divergente]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[finalizar_atendimento_erro_no_match]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[finalizar_atendimento_nao_resolvido]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[finalizar_atendimento_outros_assuntos]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[finalizar_atendimento_resolvido]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[finalizar_atendimento_resolvido_outros_assuntos]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[invoice_explanation_nao_registra_nao]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[invoice_explanation_nao_sem_vas_finaliza]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[invoice_explanation_sim_abre_protocolo_aceite]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[pro_rata_aceitou_esclarecimento_registra_mensalidade]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[pro_rata_nao_aceitou_devolve_orquestrador]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[pro_rata_nao_controle_registra_mensalidade]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[vas_bundle_puro_nao_reforca_e_registra_bundle]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[vas_estrategico_nao_com_estrategico_explica_cancelamento]",
|
|
"tests/migration/test_original_workflow_cases.py::test_original_workflow_case_on_framework_runtime[vas_estrategico_sim_finaliza_sem_protocolo_imediato]",
|
|
"tests/migration/test_output_supervisor_no_contract_hardcodes.py::test_output_supervisor_contains_no_customer_grl_taxonomy_or_named_policy_switches",
|
|
"tests/migration/test_output_supervisor_no_contract_hardcodes.py::test_retry_is_driven_by_metadata_not_rail_name",
|
|
"tests/migration/test_output_supervisor_no_contract_hardcodes.py::test_rewrite_is_driven_by_remediation_metadata",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_action_contestacao_pro_rata_usa_items_e_totais",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_action_definir_devolucao_busca_danfe_quando_ausente",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_calculo_falha_quando_danfe_nao_cobre_credito",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_calculo_falha_sem_periodo",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_calculo_pro_rata_outro_plano_30_dias_considera_um_dia_controle",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_calculo_pro_rata_usa_liquido_periodo_e_danfe",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_mensagem_pagamento_sms_soma_items_e_protocolo",
|
|
"tests/migration/test_pro_rata_full_parity.py::test_orientar_pagamento_mantem_composicao_no_llm_do_framework",
|
|
"tests/migration/test_rag_resilience_and_informational_context.py::test_framework_rag_falha_tecnica_nao_quebra_fluxo",
|
|
"tests/migration/test_rag_resilience_and_informational_context.py::test_informational_rag_avulso_preserva_contexto_para_finalizacao",
|
|
"tests/migration/test_rag_resilience_and_informational_context.py::test_informational_rag_estrategico_sem_invoice_detail",
|
|
"tests/migration/test_real_legacy_integration_compat.py::test_cancelamento_accepts_original_cancellation_aliases",
|
|
"tests/migration/test_real_legacy_integration_compat.py::test_divergencia_preserves_original_user_password_basic_auth",
|
|
"tests/migration/test_real_legacy_integration_compat.py::test_profile_bill_uses_complete_invoices_contract_like_original_factory",
|
|
"tests/migration/test_real_legacy_integration_compat.py::test_profile_full_appends_msisdn_when_original_url_has_no_placeholder",
|
|
"tests/migration/test_real_legacy_integration_compat.py::test_query_vas_accepts_original_aliases_and_timeout",
|
|
"tests/migration/test_real_legacy_integration_compat.py::test_query_vas_legacy_base_url_appends_country_code_and_msisdn",
|
|
"tests/migration/test_real_legacy_integration_compat.py::test_vas_history_and_contrato_default_client_id_match_original",
|
|
"tests/migration/test_remaining_command_contracts.py::test_cancelamento_always_sends_non_empty_message_id",
|
|
"tests/migration/test_remaining_command_contracts.py::test_contrato_uses_clientId_not_client_id",
|
|
"tests/migration/test_remaining_command_contracts.py::test_profile_full_uses_original_ClientID_header",
|
|
"tests/migration/test_remaining_command_contracts.py::test_service_request_status_message_id_prioriza_call_id",
|
|
"tests/migration/test_remaining_command_contracts.py::test_sms_preserva_sender_name_original",
|
|
"tests/migration/test_remaining_command_contracts.py::test_vas_history_preserves_original_header_contract",
|
|
"tests/migration/test_tim_contract_parity.py::test_billing_analysis_anexa_transport_metadata_de_tentativas",
|
|
"tests/migration/test_tim_contract_parity.py::test_protocol_v2_contract",
|
|
"tests/migration/test_tim_contract_parity.py::test_rct_retry_policy_preserves_attempt_semantics",
|
|
"tests/migration/test_tim_contracts_and_idempotency.py::test_bill_pdf_and_secure_pdf_are_distinct_contracts",
|
|
"tests/migration/test_tim_contracts_and_idempotency.py::test_cancel_workflow_action_is_idempotent_without_domain_local_cache",
|
|
"tests/migration/test_tim_contracts_and_idempotency.py::test_complete_invoices_preserves_clientid_contract",
|
|
"tests/migration/test_tim_contracts_and_idempotency.py::test_line_info_extracts_nested_social_sec_no",
|
|
"tests/migration/test_tim_contracts_and_idempotency.py::test_query_vas_preserves_original_client_id_and_url",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_contestacao_vaa007_falha_preserva_protocolo_e_itens",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_contestacao_vaa_metadata_preserva_contexto_tim_original",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_finalizacao_cvn010_preserva_protocolos_e_contexto_ura",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_finalizacao_mpi006_e_sad001_preservam_metadata_conversacional",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_invoice_explanation_mpi005_preserva_turno_e_contexto",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_pro_rata_mpi010_preserva_contexto_do_turno",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_tim_payload_mapper_aceita_agent_specific_data_json_string_historico",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_vas_bundle_nao_defera_protocolo_e_emite_veb005",
|
|
"tests/migration/test_tim_event_metadata_parity.py::test_vas_estrategico_veb_preserva_turno_e_contexto_ura",
|
|
"tests/migration/test_tool_policy_operation_types.py::test_contas_tool_policies_accept_all_operation_types",
|
|
"tests/migration/test_vaa_dispute_parity.py::test_contestacao_emite_vaa005_006_008_quando_barcode_elegivel",
|
|
"tests/migration/test_vaa_dispute_parity.py::test_contestacao_emite_vaa005_007_quando_provider_falha",
|
|
"tests/migration/test_vaa_dispute_parity.py::test_sms_emite_vaa012_014_e_falha_vaa013_015",
|
|
"tests/migration/test_vaa_dispute_parity.py::test_status_sr_emite_vaa016_ou_017_sem_quebrar_workflow",
|
|
"tests/migration/test_vas_response_renderer.py::test_vas_renderer_does_not_invent_missing_value",
|
|
"tests/migration/test_vas_response_renderer.py::test_vas_renderer_includes_available_values",
|
|
"tests/migration/test_workflow_execution_latch.py::test_latch_nao_duplica_workflow",
|
|
"tests/migration/test_workflow_execution_latch.py::test_transaction_state_patch_preserva_latch",
|
|
"tests/migration/test_workflow_execution_latch.py::test_workflow_completo_e_registrado_sem_pending",
|
|
"tests/migration/test_workflow_execution_latch.py::test_workflow_pausado_ja_e_registrado_como_executado",
|
|
"tests/migration/test_wrapper_last_contracts.py::test_cancelamento_boleto_zerado_ou_nao_nao_vaza_sms_sent",
|
|
"tests/migration/test_wrapper_last_contracts.py::test_cancelamento_compositor_e_deterministico_sem_diretiva_llm",
|
|
"tests/migration/test_wrapper_last_contracts.py::test_cancelamento_corrige_linha_item_por_invoice_detail",
|
|
"tests/migration/test_wrapper_last_contracts.py::test_invoice_explanation_preserva_fatura_e_analise_variacao_no_input",
|
|
"tests/migration/test_wrapper_last_contracts.py::test_pro_rata_devolucao_forca_composicao_llm_framework",
|
|
"tests/migration/test_wrapper_last_contracts.py::test_rag_dominio_apenas_declara_queries_e_framework_executa",
|
|
"tests/migration/test_wrapper_last_contracts.py::test_vas_estrategico_normaliza_nome_e_agrupa_linhas"
|
|
] |