# REQ-001 Test Catalog Test ID: TC-REQ-001-001 Verifies: - REQ-001.01-AC01 - REQ-001.02-AC01 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_dividend_updates_only_profit_buffer_and_records_executed_at_and_tax`, `tests/test_v1_portfolios_manual_ledger.py::test_dividend_requires_executed_at_and_rejects_fee_field`, `tests/test_v1_portfolios_manual_ledger.py::test_dividend_rejects_sub_minimum_numeric_precision`, `tests/test_v1_portfolios_manual_ledger.py::test_dividend_rejects_amount_exceeding_numeric_20_8` Automated: true Test ID: TC-REQ-001-002 Verifies: - REQ-001.02-AC01 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_dividend_requires_executed_at_and_rejects_fee_field` Automated: true Test ID: TC-REQ-001-003 Verifies: - REQ-001.02-AC01 - REQ-001.07-AC01 Test reference: `tests/test_bat025_portfolio_ledger_manual_metadata_migration.py::test_dividend_precision_and_reversal_round_trip_on_real_postgres`, `tests/test_bat025_portfolio_ledger_manual_metadata_migration.py::test_dividend_large_integer_with_8dp_is_rejected_to_protect_double_snapshot` Automated: true Test ID: TC-REQ-001-004 Verifies: - REQ-001.02-AC01 - REQ-001.08-AC01 Test reference: `tests/test_bat025_portfolio_ledger_manual_metadata_migration.py::test_existing_high_precision_snapshot_still_allows_legacy_manual_actions`, `tests/test_bat025_portfolio_ledger_manual_metadata_migration.py::test_large_invest_and_large_dividend_tax_metadata_are_accepted_when_snapshot_is_safe` Automated: true Test ID: TC-REQ-001-005 Verifies: - REQ-001.03-AC01 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_dividend_updates_only_profit_buffer_and_records_executed_at_and_tax` Automated: true Test ID: TC-REQ-001-006 Verifies: - REQ-001.04-AC01 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_unified_ledger_includes_dividend_fields`, `tests/test_v1_portfolios_manual_ledger.py::test_unified_ledger_openapi_contains_nullable_amount` Automated: true Test ID: TC-REQ-001-007 Verifies: - REQ-001.05-AC01 - REQ-001.05-AC02 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_dividend_duplicate_requires_confirmation` Automated: true Test ID: TC-REQ-001-008 Verifies: - REQ-001.05-AC03 Test reference: `tests/test_bat025_portfolio_ledger_manual_metadata_migration.py::test_cold_repositories_concurrent_dividend_requests_follow_duplicate_contract` Automated: true Test ID: TC-REQ-001-009 Verifies: - REQ-001.06-AC01 - REQ-001.07-AC01 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_dividend_reversal_decreases_profit_buffer`, `tests/test_bat025_portfolio_ledger_manual_metadata_migration.py::test_dividend_precision_and_reversal_round_trip_on_real_postgres` Automated: true Test ID: TC-REQ-001-010 Verifies: - REQ-001.07-AC01 Test reference: `tests/test_bat025_portfolio_ledger_manual_metadata_migration.py::test_large_existing_buffer_plus_min_dividend_is_rejected_before_snapshot_divergence` Automated: true Test ID: TC-REQ-001-011 Verifies: - REQ-001.08-AC01 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_confirm_duplicate_false_is_accepted_for_non_dividend_actions`, `tests/test_v1_portfolios_manual_ledger.py::test_confirm_duplicate_true_is_rejected_for_non_dividend_actions` Automated: true Test ID: TC-REQ-001-012 Verifies: - REQ-001.09-AC01 Test reference: `tests/test_v1_portfolios_manual_ledger.py::test_manual_write_rejects_service_token`, `tests/test_v1_portfolios_manual_ledger.py::test_owner_mismatch_returns_403`, `tests/test_v1_portfolios_manual_ledger.py::test_daemon_managed_requires_confirmation_then_records_evidence`, `tests/test_v1_portfolios_manual_ledger.py::test_manual_ledger_conflict_message_is_sanitized` Automated: true