tests/p1/test_dashboard_value_utils.py::DashboardValueUtilsTests::test_extract_changed_tables_and_total tests/p1/test_dashboard_value_utils.py::DashboardValueUtilsTests::test_formatters tests/p1/test_dashboard_value_utils.py::DashboardValueUtilsTests::test_safe_number_parsers tests/p1/test_dashboard_value_utils.py::DashboardValueUtilsTests::test_signature_and_prompt_are_stable tests/p1/test_dashboard_window_ui_service.py::DashboardWindowUiServiceTests::test_build_auto_sync_feedback_payload tests/p1/test_dashboard_window_ui_service.py::DashboardWindowUiServiceTests::test_build_sync_status_payload tests/p1/test_dashboard_window_ui_service.py::DashboardWindowUiServiceTests::test_format_row_count_dan_elapsed_ms tests/p1/test_dashboard_window_ui_service.py::DashboardWindowUiServiceTests::test_perf_log_builder_dan_level_decider tests/p1/test_device_registration_request_builder.py::DeviceRegistrationRequestBuilderTests::test_build_payloads tests/p1/test_device_registration_request_builder.py::DeviceRegistrationRequestBuilderTests::test_normalize_and_required_fields tests/p1/test_device_registration_request_builder.py::DeviceRegistrationRequestBuilderTests::test_parse_toko_id tests/p1/test_device_registration_response_mapper.py::DeviceRegistrationResponseMapperTests::test_extractors tests/p1/test_device_registration_response_mapper.py::DeviceRegistrationResponseMapperTests::test_result_builders_and_status_mapper tests/p1/test_device_registration_retry_policy.py::DeviceRegistrationRetryPolicyTests::test_resolve_probe_attempt_limit tests/p1/test_device_registration_retry_policy.py::DeviceRegistrationRetryPolicyTests::test_retry_decision tests/p1/test_event_outbox_backlog_burst_perf_smoke.py::test_event_outbox_backlog_burst_perf_smoke tests/p1/test_lock_contention_soak.py::test_sqlite_lock_contention_soak tests/p1/test_printer_settings_ui_state_service.py::PrinterSettingsUiStateServiceTests::test_build_settlement_option_log tests/p1/test_printer_settings_ui_state_service.py::PrinterSettingsUiStateServiceTests::test_index_validation tests/p1/test_printer_settings_ui_state_service.py::PrinterSettingsUiStateServiceTests::test_normalize_printer_entry tests/p1/test_printer_settings_value_service.py::PrinterSettingsValueServiceTests::test_point_helpers tests/p1/test_printer_settings_value_service.py::PrinterSettingsValueServiceTests::test_ppn_mode_helpers tests/p1/test_runtime_smoke.py::test_runtime_config_smoke tests/p1/test_runtime_smoke.py::test_jwt_runtime_config_smoke tests/p1/test_sync_export_perf_smoke.py::test_sync_prepare_payload_load_perf_smoke tests/p1/test_sync_export_perf_smoke.py::test_export_payload_build_load_perf_smoke tests/p1/test_transaction_export_legacy_defaults_service.py::TransactionExportLegacyDefaultsServiceTests::test_build_defaults_fallback tests/p1/test_transaction_export_legacy_defaults_service.py::TransactionExportLegacyDefaultsServiceTests::test_build_defaults_with_context_and_config tests/p1/test_transaction_export_settlement_payment_utils.py::TransactionExportSettlementPaymentUtilsTests::test_apply_legacy_aliases_and_resolve_return_nominal tests/p1/test_transaction_export_settlement_payment_utils.py::TransactionExportSettlementPaymentUtilsTests::test_ensure_entry_and_allocate_return tests/p1/test_transaction_export_settlement_payment_utils.py::TransactionExportSettlementPaymentUtilsTests::test_normalize_tunai_non_tunai tests/p1/test_transaction_export_value_utils.py::TransactionExportValueUtilsTests::test_as_number_or_default_supports_int_float_and_fallback tests/p1/test_transaction_export_value_utils.py::TransactionExportValueUtilsTests::test_as_positive_int_guards_non_positive tests/p1/test_transaction_export_value_utils.py::TransactionExportValueUtilsTests::test_normalize_dtime_value_uses_fallback_when_blank tests/p1/test_transaction_export_value_utils.py::TransactionExportValueUtilsTests::test_parse_int_list_merge_and_count_unique tests/p1/test_transaction_export_value_utils.py::TransactionExportValueUtilsTests::test_parse_semicolon_log_ignores_invalid_segment tests/p1/test_transaction_export_value_utils.py::TransactionExportValueUtilsTests::test_to_int_and_to_float_handles_locale_like_values tests/p1/test_transaksi_async_payload_guards.py::test_autocomplete_payload_guard_hanya_terima_request_terbaru tests/p1/test_transaksi_async_payload_guards.py::test_settlement_payload_guard_hanya_terima_request_terbaru tests/p1/test_transaksi_async_payload_guards.py::test_settlement_check_inflight_rilis_saat_queue_fast_penuh tests/p1/test_transaksi_harga_validation_service.py::TransaksiHargaValidationServiceTests::test_build_log_dan_warning_message tests/p1/test_transaksi_harga_validation_service.py::TransaksiHargaValidationServiceTests::test_is_valid_harga_jual_false_untuk_payload_invalid tests/p1/test_transaksi_harga_validation_service.py::TransaksiHargaValidationServiceTests::test_resolve_harga_jual_dengan_prioritas_field tests/p1/test_transaksi_payment_info_service.py::TransaksiPaymentInfoServiceTests::test_build_from_rows_hitung_total_qty_dan_total_belanja tests/p1/test_transaksi_payment_info_service.py::TransaksiPaymentInfoServiceTests::test_build_from_table_aman_untuk_sel_kosong tests/p1/test_transaksi_payment_state_service.py::TransaksiPaymentStateServiceTests::test_detect_other_kasir tests/p1/test_transaksi_payment_state_service.py::TransaksiPaymentStateServiceTests::test_has_pending_settlement tests/p1/test_transaksi_value_utils.py::TransaksiValueUtilsTests::test_as_positive_int tests/p1/test_transaksi_value_utils.py::TransaksiValueUtilsTests::test_extract_diskon_customer_from_diskon_log tests/p1/test_transaksi_value_utils.py::TransaksiValueUtilsTests::test_extract_point_from_diskon_log tests/p1/test_transaksi_value_utils.py::TransaksiValueUtilsTests::test_extract_ppn_mode_from_diskon_log tests/p1/test_transaksi_view_summary_service.py::TransaksiViewSummaryServiceTests::test_build_summary_label_payload tests/p1/test_transaksi_view_summary_service.py::TransaksiViewSummaryServiceTests::test_formatters tests/p1/test_ui_event_loop_burst.py::test_qt_event_loop_burst_perf_smoke tests/p2/test_dashboard_event_backpressure_delay.py::test_backpressure_delay_naik_saat_pending_tinggi tests/p2/test_dashboard_event_backpressure_delay.py::test_backpressure_delay_tetap_saat_nonaktif tests/p2/test_dashboard_event_backpressure_delay.py::test_backpressure_delay_naik_saat_error_rate_tinggi tests/p2/test_dr_backup_policy_service.py::test_run_backup_with_manifest_and_checksum tests/p2/test_dr_backup_policy_service.py::test_prune_backups_respects_keep_and_age tests/p2/test_dr_restore_drill_service.py::test_run_restore_drill_ok_dengan_sqlite_valid tests/p2/test_dr_restore_drill_service.py::test_run_restore_drill_deteksi_checksum_mismatch tests/p2/test_event_ingestion_backpressure_service.py::test_backpressure_mode_normal_default tests/p2/test_event_ingestion_backpressure_service.py::test_backpressure_mode_normal_inflight tests/p2/test_event_ingestion_backpressure_service.py::test_backpressure_mode_throttle tests/p2/test_event_ingestion_backpressure_service.py::test_backpressure_mode_critical tests/p2/test_event_outbox_service.py::test_outbox_enqueue_and_dedup tests/p2/test_event_outbox_service.py::test_outbox_claim_ack_and_purge_sent tests/p2/test_event_outbox_service.py::test_outbox_release_expired_and_fail_events tests/p2/test_export_runtime_metrics_service.py::test_snapshot_hitung_error_rate_dan_p95 tests/p2/test_export_runtime_metrics_service.py::test_snapshot_batasi_jumlah_sample tests/p2/test_fleet_rollout_gate_service.py::test_evaluate_metrics_file_continue tests/p2/test_fleet_rollout_gate_service.py::test_evaluate_metrics_file_halt_and_rollback tests/p2/test_fleet_rollout_service.py::test_build_rollout_plan_assigns_unique_branch_once tests/p2/test_fleet_rollout_service.py::test_build_rollout_plan_wave_progression_after_canary tests/p2/test_fleet_rollout_service.py::test_evaluate_wave_health_decision tests/test_app_close_settlement_guard.py::AppCloseSettlementGuardTests::test_close_guard_allows_close_when_retry_clears_pending tests/test_app_close_settlement_guard.py::AppCloseSettlementGuardTests::test_close_guard_blocks_and_shows_warning_when_unsent_exists tests/test_app_close_settlement_guard.py::AppCloseSettlementGuardTests::test_close_guard_blocks_when_retry_still_pending tests/test_app_close_settlement_guard.py::AppCloseSettlementGuardTests::test_close_guard_returns_false_when_mode_not_direct_only tests/test_async_refresh_stale_guards.py::AsyncRefreshStaleGuardTests::test_customer_search_controller_ignores_stale_reload_payload tests/test_async_refresh_stale_guards.py::AsyncRefreshStaleGuardTests::test_history_controller_ignores_stale_history_payload tests/test_async_refresh_stale_guards.py::AsyncRefreshStaleGuardTests::test_load_transaksi_controller_ignores_stale_list_payload tests/test_async_refresh_stale_guards.py::AsyncRefreshStaleGuardTests::test_settlement_controller_history_only_mode_updates_history tests/test_async_refresh_stale_guards.py::AsyncRefreshStaleGuardTests::test_settlement_controller_ignores_stale_refresh_payload tests/test_base_service.py::BaseServiceRetryDelegationTests::test_request_with_retry_delegates_and_maps_arguments tests/test_customer_search_model.py::test_customer_search_keyword_and_paging tests/test_customer_search_model.py::test_customer_search_returns_empty_when_table_missing tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_build_price_delta_samples_from_rows_menghasilkan_nama_dan_harga tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_build_price_delta_samples_tidak_menampilkan_old_old tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_enrich_changed_tables_with_price_delta_saat_samples_server_kosong tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_extract_changed_tables_mendukung_rows_dan_samples tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_extract_row_total_fallback_ke_penjumlahan_tabel tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_extract_samples_mendukung_harga_lama_baru tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_nanti_menunda_notifikasi_signature_sama_sebelum_ttl tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_notifikasi_muncul_lagi_setelah_ttl_habis tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_prompt_message_harga_lama_baru_tanpa_id tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_prompt_message_harga_string_lokal_diformat_benar tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_prompt_message_memuat_contoh_data_berubah tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_resolve_before_price_mengambil_harga_terakhir_yang_berbeda tests/test_dashboard_auto_sync_notify_mode.py::DashboardAutoSyncNotifyModeTests::test_sinkron_sekarang_memaksa_prompt_meski_masih_snooze tests/test_dashboard_config_auto_sync_probe_interval.py::DashboardConfigAutoSyncProbeIntervalTests::test_notify_reminder_memiliki_guard_minimum tests/test_dashboard_config_auto_sync_probe_interval.py::DashboardConfigAutoSyncProbeIntervalTests::test_notify_reminder_mengikuti_setting_valid tests/test_dashboard_config_auto_sync_probe_interval.py::DashboardConfigAutoSyncProbeIntervalTests::test_probe_interval_memiliki_guard_minimum tests/test_dashboard_config_auto_sync_probe_interval.py::DashboardConfigAutoSyncProbeIntervalTests::test_probe_interval_mengikuti_setting_valid tests/test_dashboard_settlement_close_guard.py::DashboardSettlementCloseGuardTests::test_guard_state_blocking_when_unsent_exists tests/test_dashboard_settlement_close_guard.py::DashboardSettlementCloseGuardTests::test_guard_state_non_blocking_when_empty tests/test_dashboard_settlement_close_guard.py::DashboardSettlementCloseGuardTests::test_retry_pending_settlement_clears_unsent_on_success tests/test_dashboard_settlement_close_guard.py::DashboardSettlementCloseGuardTests::test_retry_pending_settlement_keeps_unsent_on_failure tests/test_dashboard_settlement_delivery_mode.py::DashboardSettlementDeliveryModeTests::test_request_export_after_settlement_direct_only_runs_export_trigger_for_non_settlement tests/test_dashboard_settlement_delivery_mode.py::DashboardSettlementDeliveryModeTests::test_request_export_after_settlement_dual_mode_export_disabled tests/test_dashboard_settlement_delivery_mode.py::DashboardSettlementDeliveryModeTests::test_request_export_after_settlement_dual_mode_queue_export tests/test_dashboard_settlement_delivery_mode.py::DashboardSettlementDeliveryModeTests::test_request_export_after_settlement_export_only_skips_direct_and_queue_export tests/test_device_registration_service.py::test_search_store_branches_requires_web_admin tests/test_device_registration_service.py::test_search_store_branches_existing_device_shortcut tests/test_device_registration_service.py::test_search_store_branches_pending_device_shortcut tests/test_device_registration_service.py::test_search_store_branches_dynamic_filtering tests/test_device_registration_service.py::test_search_store_branches_not_found tests/test_device_registration_service.py::test_register_device_rejects_incomplete_required_fields tests/test_device_registration_service.py::test_register_device_existing_approved_shortcut tests/test_device_registration_service.py::test_register_device_existing_pending_shortcut tests/test_device_registration_service.py::test_register_device_success_sets_first_login_flags tests/test_device_registration_service.py::test_register_device_conflict_cabang_fallback_to_existing tests/test_device_registration_service.py::test_replace_branches_keeps_gudang_fields_when_schema_available tests/test_diskon_customer_model.py::DiskonCustomerModelTestCase::test_diskon_customer_applies_when_quota_available tests/test_diskon_customer_model.py::DiskonCustomerModelTestCase::test_diskon_customer_blocked_when_quota_exhausted tests/test_diskon_service.py::DiskonServiceFormatGrosirTestCase::test_format_keterangan_grosir_baseline_diambil_dari_tier_valid tests/test_diskon_service.py::DiskonServiceFormatGrosirTestCase::test_format_keterangan_grosir_data_kosong tests/test_export_cycle_service.py::ExportCycleServiceTests::test_run_cycle_forwards_upload_overrides tests/test_export_cycle_service.py::ExportCycleServiceTests::test_run_cycle_returns_aggregate_result tests/test_export_cycle_service.py::ExportCycleServiceTests::test_run_cycle_singleton_guard_prevents_overlap tests/test_export_cycle_service.py::ExportCycleServiceTests::test_run_cycle_skip_upload_does_not_call_upload_service tests/test_export_upload_api_service.py::ExportUploadApiServiceTests::test_compile_status_missing_endpoint_is_non_retryable tests/test_export_upload_api_service.py::ExportUploadApiServiceTests::test_fetch_compile_status_marks_non_retryable_for_non_transient_reason tests/test_export_upload_api_service.py::ExportUploadApiServiceTests::test_upload_file_missing_endpoint_is_non_retryable tests/test_export_upload_api_service.py::ExportUploadApiServiceTests::test_upload_file_uses_configurable_retryable_reason_list tests/test_export_upload_api_service.py::ExportUploadApiServiceTests::test_upload_file_uses_gzip_mime_type_for_gz_file tests/test_export_upload_api_service.py::ExportUploadApiServiceTests::test_upload_file_uses_xz_mime_type_for_xz_file tests/test_export_upload_service.py::ExportUploadServiceTests::test_direct_only_suppresses_settlement_backlog_rows tests/test_export_upload_service.py::ExportUploadServiceTests::test_housekeeping_cleans_old_empty_flux_rows tests/test_export_upload_service.py::ExportUploadServiceTests::test_requeue_failed_transient_respects_max_age tests/test_export_upload_service.py::ExportUploadServiceTests::test_requeue_failed_transient_rows_on_startup tests/test_export_upload_service.py::ExportUploadServiceTests::test_requeue_failed_transient_skips_non_transient_error tests/test_export_upload_service.py::ExportUploadServiceTests::test_table_toggle_suppresses_disabled_backlog_rows tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_backfills_required_metadata tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_non_retryable_marks_failed tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_retry_marks_retry_state tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_success_marks_uploaded tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_with_compile_check_accepts_per_key_done_state tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_with_compile_check_accepts_per_key_required_flags tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_with_compile_check_marks_uploaded_when_complete tests/test_export_upload_service.py::ExportUploadServiceTests::test_upload_with_compile_check_marks_uploaded_when_pending_non_blocking tests/test_free_produk_relation_flow.py::FreeProdukRelationFlowTests::test_build_detail_data_fallback_when_ui_subtotal_missing tests/test_free_produk_relation_flow.py::FreeProdukRelationFlowTests::test_build_detail_data_free_selected_without_quota_keeps_paid_only tests/test_free_produk_relation_flow.py::FreeProdukRelationFlowTests::test_build_detail_data_split_paid_and_free_rows tests/test_free_produk_relation_flow.py::FreeProdukRelationFlowTests::test_build_detail_data_uses_ui_subtotal_as_source_of_truth tests/test_free_produk_relation_flow.py::FreeProdukRelationFlowTests::test_legacy_free_builder_uses_relasi_source_produk tests/test_gui_click_automation.py::test_gui_device_registration_search_and_submit_success tests/test_gui_click_automation.py::test_gui_device_registration_auto_close_when_already_registered tests/test_gui_click_automation.py::test_gui_login_click_and_toggle_password tests/test_gui_click_automation.py::test_gui_scanner_settings_detect_pair_and_health tests/test_gui_click_automation.py::test_gui_printer_settings_buttons_and_mode tests/test_gui_click_automation.py::test_gui_scanner_header_icon_tooltip_updates tests/test_high_qty_authorization_service.py::test_high_qty_authorization_once_per_product tests/test_high_qty_authorization_service.py::test_high_qty_authorization_different_product_still_requires_verification tests/test_high_qty_authorization_service.py::test_high_qty_authorization_reset_and_clear_product tests/test_high_qty_authorization_service.py::test_high_qty_authorization_respects_threshold_from_config_value tests/test_history_settings_service.py::test_history_settings_service_get_and_set tests/test_load_transaksi_model.py::LoadTransaksiModelTestCase::test_filtered_transaksi_list_respects_config_limit tests/test_load_transaksi_model.py::LoadTransaksiModelTestCase::test_filtered_transaksi_list_uses_net_total tests/test_load_transaksi_model.py::LoadTransaksiModelTestCase::test_get_tersimpan_transaksi_list_respects_config_limit tests/test_load_transaksi_model.py::LoadTransaksiModelTestCase::test_voucher_usage_info_supports_legacy_kode_voucher_column tests/test_load_transaksi_service.py::test_parse_transaksi_id_handles_invalid_human_input tests/test_load_transaksi_service.py::test_parse_header_requires_minimum_fields tests/test_load_transaksi_service.py::test_build_preorder_payload_returns_none_when_raw_missing tests/test_login_network_policy_service.py::test_offline_blocked_when_require_online tests/test_login_network_policy_service.py::test_internet_only_allowed_when_server_down_but_internet_up tests/test_login_network_policy_service.py::test_grace_window_allows_temporary_offline_spike tests/test_login_network_policy_service.py::test_disabled_policy_always_allows tests/test_login_network_policy_service.py::test_recovery_needs_minimum_success_streak tests/test_login_network_policy_service.py::test_stress_random_snapshot_no_crash tests/test_login_network_policy_service.py::test_invalid_policy_types_are_normalized_safely tests/test_network_orchestrator_service.py::test_orchestrator_sync_allow_when_server_stable tests/test_network_orchestrator_service.py::test_orchestrator_blocks_sync_when_internet_only_by_default tests/test_network_orchestrator_service.py::test_orchestrator_honors_probe_cache_ttl tests/test_network_orchestrator_service.py::test_orchestrator_degraded_without_server_blocked_by_default tests/test_network_orchestrator_service.py::test_orchestrator_can_allow_internet_only_for_export_when_enabled tests/test_network_probe_service.py::test_probe_network_snapshot_server_ok tests/test_network_probe_service.py::test_probe_network_snapshot_internet_only tests/test_network_probe_service.py::test_probe_server_health_capabilities_future_ready tests/test_network_probe_service.py::test_probe_server_health_404_fallback_to_base_probe tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_controller_can_batalkan_true_hanya_untuk_invoice_hari_ini_belum_settle tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_controller_menolak_batal_jika_terkunci_di_history_map tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_controller_menolak_batal_jika_terkunci_di_history_settlement tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_controller_menolak_human_error_id_tidak_valid tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_controller_menolak_jika_diluar_periode_batal tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_controller_menolak_jika_sudah_settle tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_delete_transaksi_kedua_kali_ditolak_idempotent tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_delete_transaksi_menolak_jika_sudah_settle tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_delete_transaksi_menolak_non_invoice tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_delete_transaksi_sukses_menandai_trash_dan_history tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_load_transaksi_menyembunyikan_nota_yang_terkunci_history_settlement tests/test_pembatalan_transaksi_controller.py::PembatalanTransaksiControllerTests::test_search_transaksi_hanya_muncul_yang_belum_settle tests/test_pembatalan_transaksi_view_gui.py::test_gui_pembatalan_warning_jika_belum_pilih_transaksi tests/test_pembatalan_transaksi_view_gui.py::test_gui_pembatalan_tampil_warning_saat_controller_menolak_settled tests/test_pembatalan_transaksi_view_gui.py::test_gui_pembatalan_sukses_refresh_dan_info tests/test_pembayaran_calculation_service.py::test_calculate_include_mode_ppn_informative_only tests/test_pembayaran_calculation_service.py::test_calculate_exclude_mode_adds_ppn_to_total tests/test_pembayaran_calculation_service.py::test_calculate_voucher_capped_to_total tests/test_pembayaran_calculation_service.py::test_calculate_invalid_ppn_mode_falls_back_include tests/test_pembayaran_calculation_service.py::test_calculate_supports_nominal_discount_mode tests/test_pembayaran_calculation_service.py::test_calculate_nominal_mode_zero_does_not_fallback_to_percent tests/test_pembayaran_input_service.py::test_credit_payload_uses_total_harus_dibayar_for_jumlah_dibayar tests/test_pembayaran_input_service.py::test_debit_payload_uses_total_harus_dibayar_for_jumlah_dibayar tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_customer_model_returns_empty_when_table_not_exists tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_export_align_registry_rebuilds_main_with_dtime tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_export_normalize_transaksi_enforces_strict_required_defaults tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_export_service_get_exportable_tables_filters_invalid_table tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_export_service_rejects_invalid_table_name tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_get_export_tables_default_includes_settlement tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_get_export_tables_direct_only_fallback_when_direct_disabled tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_get_export_tables_direct_only_filters_settlement_when_direct_enabled tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_get_export_tables_export_only_keeps_settlement_tables tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_get_export_tables_toggle_registry_off_keeps_transaksi_and_detail tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_get_export_tables_toggle_transaksi_data_off_disables_registry tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_get_export_tables_toggle_transaksi_off_disables_detail_and_registry tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_managed_policy_disabled_does_not_override_app_settings tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_managed_policy_runtime_file_merges_only_whitelisted_keys tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_read_endpoint_config_allows_empty_base_url_on_bootstrap tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_save_config_app_only_does_not_require_api_base_url tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_sinkron_model_rejects_invalid_table_name tests/test_phase_hardening_guards.py::PhaseHardeningGuardTests::test_sinkron_model_skips_invalid_server_columns tests/test_printer_settings_panel_diagnostic_text.py::test_translate_diagnostic_message_to_kasir_language tests/test_printer_settings_panel_diagnostic_text.py::test_build_kasir_diagnostic_text_contains_main_sections tests/test_rawinput_scanner_service.py::test_rawinput_scanner_whitelist_required_for_capture tests/test_rawinput_scanner_service.py::test_rawinput_scanner_whitelist_match tests/test_retry_and_circuit_breaker.py::HttpRetryHardeningTests::test_fail_fast_http_400_without_retry tests/test_retry_and_circuit_breaker.py::HttpRetryHardeningTests::test_retry_http_503_until_success tests/test_retry_and_circuit_breaker.py::SyncCircuitBreakerServiceTests::test_non_retryable_failure_resets_counter tests/test_retry_and_circuit_breaker.py::SyncCircuitBreakerServiceTests::test_open_after_threshold_retryable_failure tests/test_retry_and_circuit_breaker.py::SyncCircuitBreakerServiceTests::test_success_resets_open_state tests/test_return_controller_settlement_guard.py::test_search_transaksi_master_hanya_tampilkan_belum_settle tests/test_return_controller_settlement_guard.py::test_proses_return_ditolak_jika_transaksi_sudah_settle tests/test_return_controller_settlement_guard.py::test_proses_return_lolos_jika_transaksi_belum_settle tests/test_return_model.py::ReturnModelTestCase::test_return_full_note_rejected tests/test_return_model.py::ReturnModelTestCase::test_return_partial_voucher_creates_voucher tests/test_return_model.py::ReturnModelTestCase::test_return_qty_exceeds_returnable_rejected tests/test_return_model.py::ReturnModelTestCase::test_return_rejected_when_transaksi_tercatat_di_history_map tests/test_return_model.py::ReturnModelTestCase::test_return_rejected_when_transaksi_tercatat_di_history_settlement tests/test_return_model.py::ReturnModelTestCase::test_return_settled_transaction_rejected tests/test_scanner_burst_stress.py::test_scanner_burst_40_unique_items_accepted tests/test_scanner_burst_stress.py::test_scanner_burst_cross_source_duplicate_rejected tests/test_scanner_detector_service.py::test_scanner_detector_enter_suffix_no_modifier tests/test_scanner_detector_service.py::test_scanner_detector_keypad_enter_supported tests/test_scanner_detector_service.py::test_scanner_detector_no_enter_suffix_flush_on_next_scan_after_gap tests/test_scanner_detector_service.py::test_scanner_detector_no_enter_suffix_poll_after_gap tests/test_scanner_device_utils.py::test_extract_device_match_token_vid_pid tests/test_scanner_device_utils.py::test_extract_device_match_token_fallback_raw_text tests/test_scanner_diagnostic_service.py::test_scanner_diagnostic_warn_when_disabled tests/test_scanner_diagnostic_service.py::test_scanner_diagnostic_runtime_rawinput_active tests/test_scanner_event_guard_service.py::test_scanner_event_guard_accept_first_event tests/test_scanner_event_guard_service.py::test_scanner_event_guard_reject_cross_source_duplicate_within_window tests/test_scanner_event_guard_service.py::test_scanner_event_guard_accept_same_source_repeated tests/test_scanner_pairing_service.py::test_normalize_discovered_devices_deduplicate tests/test_scanner_pairing_service.py::test_pair_device_append_and_replace tests/test_scanner_settings_utils.py::test_scanner_settings_roundtrip_backend_mode tests/test_scanner_settings_utils.py::test_scanner_settings_invalid_backend_mode_fallback_wedge tests/test_scanner_status_service.py::test_scanner_status_runtime_empty_off tests/test_scanner_status_service.py::test_scanner_status_disabled_off tests/test_scanner_status_service.py::test_scanner_status_rawinput_active_on tests/test_scanner_status_service.py::test_scanner_status_auto_fallback_wedge_off_without_physical_validation tests/test_scanner_status_service.py::test_scanner_status_tooltip_includes_enabled_ready_detected tests/test_schema_migrator.py::test_schema_migrator_creates_core_tables_and_version tests/test_schema_migrator.py::test_connect_sqlite_auto_runs_schema_migrator_once tests/test_schema_migrator.py::test_migration_v5_removes_voucher_return_nilai_column_and_preserves_data tests/test_settlement_controller_history_reprint.py::test_controller_history_reprint_show_info_when_success tests/test_settlement_controller_history_reprint.py::test_controller_history_reprint_show_error_when_failed tests/test_settlement_direct_service.py::test_send_settlement_direct_skip_when_disabled tests/test_settlement_direct_service.py::test_send_settlement_direct_success_response tests/test_settlement_direct_service.py::test_send_settlement_direct_rejected_response tests/test_settlement_direct_service.py::test_send_settlement_direct_duplicate_diterima_sebagai_sukses tests/test_settlement_direct_service.py::test_send_settlement_direct_http_409_idempotency_in_progress tests/test_settlement_direct_service.py::test_send_settlement_direct_http_401_unauthorized_user_context tests/test_settlement_direct_service.py::test_send_settlement_direct_skip_invalid_endpoint_kosong tests/test_settlement_direct_service.py::test_send_settlement_direct_skip_payload_empty tests/test_settlement_direct_service.py::test_send_settlement_direct_http_400_invalid_payload tests/test_settlement_direct_service.py::test_send_settlement_direct_http_409_idempotency_key_conflict_non_retry tests/test_settlement_direct_service.py::test_send_settlement_direct_http_500_db_transaction_failed_retryable tests/test_settlement_direct_service.py::test_send_settlement_direct_debug_no_commit_tetap_sukses tests/test_settlement_direct_service.py::test_send_settlement_direct_status_200_legacy_tetap_sukses tests/test_settlement_direct_service.py::test_send_settlement_direct_salvage_json_dari_body_warning_tetap_sukses tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_direct_settlement_payload_fallback_dari_counter tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_direct_settlement_payload_memilih_row_berdasarkan_transaksi_ids tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_direct_settlement_payload_mixed_return_partial_and_cancel_full tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_export_payload_uses_legacy_settlement_builder tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_legacy_settlement_payload_fallbacks_approval_and_cabang_name tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_legacy_settlement_payload_merges_return_transaksi_into_id_penjualan tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_legacy_settlement_payload_shape_and_payment_breakdown tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_settlement_payment_payload_allocates_return_per_payment_method tests/test_settlement_export_payload_legacy.py::SettlementExportPayloadLegacyTests::test_build_settlement_payment_payload_uses_netto_not_tender tests/test_settlement_history_reprint_service.py::test_settlement_history_reprint_service_success tests/test_settlement_history_reprint_service.py::test_settlement_history_reprint_service_fail_when_data_id_missing tests/test_settlement_input_service.py::test_parse_admin_input_handles_empty_invalid_and_valid tests/test_settlement_input_service.py::test_resolve_total_tunai_prefers_nilai_tunai_param tests/test_settlement_input_service.py::test_resolve_total_tunai_from_text_when_nilai_none tests/test_settlement_input_service.py::test_can_enable_settle_requires_transaction_and_amount tests/test_settlement_model.py::SettlementModelTestCase::test_get_history_settlement_by_range_respects_config_limit tests/test_settlement_model.py::SettlementModelTestCase::test_get_settlement_lock_map_backfills_map_table_from_history_json tests/test_settlement_model.py::SettlementModelTestCase::test_get_settlement_lock_map_detects_history_meski_settlement_id_belum_0 tests/test_settlement_model.py::SettlementModelTestCase::test_hitung_total_per_metode_by_ids_hanya_scope_batch tests/test_settlement_model.py::SettlementModelTestCase::test_settlement_selisih_berbasis_kewajiban_tunai tests/test_settlement_model.py::SettlementModelTestCase::test_settlement_total_harus_net_of_return_and_voucher tests/test_settlement_orchestrator_service.py::SettlementOrchestratorServiceTests::test_print_settlement_scope_berdasarkan_ids_batch tests/test_settlement_print_service.py::SettlementPrintServiceTests::test_build_html_memuat_elemen_wajib tests/test_settlement_print_service.py::SettlementPrintServiceTests::test_build_html_mendukung_total_dict_bertingkat tests/test_settlement_print_service.py::SettlementPrintServiceTests::test_rekap_kas_harus_berbasis_tunai_saja tests/test_sync_and_return_thread_guards.py::SyncAndReturnThreadGuardTests::test_return_model_read_methods_are_worker_thread_safe tests/test_sync_and_return_thread_guards.py::SyncAndReturnThreadGuardTests::test_sinkron_model_apply_sync_result_fast_path_keeps_update_insert_behavior tests/test_sync_and_return_thread_guards.py::SyncAndReturnThreadGuardTests::test_sync_service_rejects_start_when_export_running tests/test_sync_api_service_check_update_payload.py::SyncApiServiceCheckUpdatePayloadTests::test_check_update_server_mengirim_payload_dasar_tanpa_mode_tambahan tests/test_sync_api_service_check_update_payload.py::SyncApiServiceCheckUpdatePayloadTests::test_check_update_server_tanpa_param_baru_tetap_kompatibel tests/test_sync_config_export_return_tables.py::test_get_export_tables_default_includes_return_tables tests/test_sync_config_export_return_tables.py::test_get_export_tables_direct_only_keeps_return_tables tests/test_transaction_export_service_atomic.py::TransactionExportServiceAtomicTest::test_finalize_success_rolls_back_when_cursor_value_invalid tests/test_transaction_export_service_atomic.py::TransactionExportServiceAtomicTest::test_finalize_success_updates_flux_cursor_and_clears_retry tests/test_transaksi_barang_input_service.py::test_find_barang_barcode_return_error_saat_tidak_ada_atau_harga_invalid tests/test_transaksi_barang_input_service.py::test_find_barang_nama_return_error_saat_tidak_ada_atau_harga_invalid tests/test_transaksi_barang_input_service.py::test_find_barang_barcode_tidak_ditemukan_tetap_pesan_not_found tests/test_transaksi_context_gudang_per_cabang.py::TransaksiContextGudangPerCabangTests::test_context_falls_back_to_user_gudang_when_cabang_default_empty tests/test_transaksi_context_gudang_per_cabang.py::TransaksiContextGudangPerCabangTests::test_context_prioritizes_cabang_default_gudang tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_build_legacy_return_rows_payload_contains_reference_fields tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_discount_components_prevent_duplicate_product_vs_additional tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_items_payload_does_not_merge_free_qty_with_sale_qty_same_product tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_items_payload_keeps_free_b_outside_items_for_buy_a_free_b tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_items_payload_prioritizes_nominal_line_discount tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_payment_payload_includes_explicit_discount_components tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_transaksi_payload_appends_return_rows tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_transaksi_payload_includes_required_export_fields tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_transaksi_payload_resolves_gudang_from_per_cabang_when_zero tests/test_transaksi_export_legacy_required_fields.py::LegacyTransaksiRequiredFieldTests::test_legacy_transaksi_payload_uses_explicit_values_when_present tests/test_transaksi_model_lookup_price_guard.py::test_lookup_barcode_hanya_produk_dengan_harga_aktif tests/test_transaksi_model_lookup_price_guard.py::test_lookup_nama_dan_autocomplete_hanya_produk_dengan_harga_aktif tests/test_transaksi_model_payment_sync.py::TransaksiModelPaymentSyncTests::test_apply_single_payment_syncs_discount_components_into_master_transaksi tests/test_transaksi_model_pricing_grosir.py::TransaksiModelPricingGrosirTests::test_qty_satu_tetap_harga_list_dan_tier_anomali_fallback_ke_nilai tests/test_transaksi_penjualan_controller_price_guard.py::test_resolve_harga_jual_fallback_ke_harga_normal tests/test_transaksi_penjualan_controller_price_guard.py::test_apply_barang_by_id_menolak_item_tanpa_harga_aktif tests/test_transaksi_penjualan_controller_price_guard.py::test_qty_besar_verifikasi_admin_hanya_sekali_per_produk tests/test_transaksi_penjualan_controller_price_guard.py::test_build_info_transaksi_stub_tanpa_init_tetap_bisa_hitung tests/test_transaksi_penjualan_view_quick_sync.py::test_extract_missing_harga_context_mengambil_barcode tests/test_transaksi_penjualan_view_quick_sync.py::test_is_missing_harga_warning_true_untuk_pesan_harga_belum_diatur tests/test_transaksi_penjualan_view_quick_sync.py::test_is_missing_harga_warning_false_untuk_pesan_lain tests/test_transaksi_preorder_service.py::test_prepare_save_payload_sets_label_and_extends_transaksi_data tests/test_transaksi_preorder_service.py::test_prepare_save_payload_returns_none_when_transaksi_data_empty tests/test_transaksi_preorder_service.py::test_build_restore_payload_handles_invalid_detail_rows tests/test_transaksi_preorder_service.py::test_build_restore_payload_returns_none_when_preorder_payload_missing tests/test_transaksi_row_index_service.py::test_rebuild_and_find_row_reads_qty tests/test_transaksi_row_index_service.py::test_shift_after_remove_keeps_mapping_consistent tests/test_transaksi_row_index_service.py::test_find_row_repairs_stale_index_cache tests/test_transaksi_service_free_produk_api.py::test_normalize_free_produk_row_enriches_required_legacy_fields tests/test_transaksi_service_free_produk_api.py::test_normalize_free_produk_row_supports_source_alias_fields tests/test_transaksi_service_free_produk_api.py::test_http_post_json_normalizes_reason_from_error_field tests/test_transaksi_service_free_produk_api.py::test_http_post_json_http_401_keeps_server_payload tests/test_transaksi_service_free_produk_api.py::test_cek_kuota_free_produk_builds_rich_payload tests/test_ui_message_utils.py::test_sanitize_ui_message_tidak_memotong_pesan_bisnis_harga_web_admin tests/test_ui_message_utils.py::test_sanitize_ui_message_tetap_memotong_traceback_teknis tests/test_ui_message_utils.py::test_sanitize_ui_message_http_500_tetap_ditangani tests/test_voucher_model.py::VoucherModelTestCase::test_voucher_create_and_apply_usage tests/test_worker_pool_and_dashboard_async.py::WorkerPoolAndDashboardAsyncTests::test_dashboard_startup_probe_inflight_rilis_saat_queue_periodic_penuh tests/test_worker_pool_and_dashboard_async.py::WorkerPoolAndDashboardAsyncTests::test_login_controller_probe_inflight_rilis_saat_queue_periodic_penuh tests/test_worker_pool_and_dashboard_async.py::WorkerPoolAndDashboardAsyncTests::test_settlement_direct_trigger_is_non_blocking_for_caller_thread tests/test_worker_pool_and_dashboard_async.py::WorkerPoolAndDashboardAsyncTests::test_submit_ui_periodic_task_keyed_skips_stale_task tests/test_worker_pool_and_dashboard_async.py::WorkerPoolAndDashboardAsyncTests::test_submit_ui_query_task_keyed_skips_stale_task tests/test_worker_pool_and_dashboard_async.py::WorkerPoolAndDashboardAsyncTests::test_submit_ui_task_drop_saat_queue_penuh 372 tests collected in 2.64s