frontend/src/api/budget.ts:23:export type BudgetImportStatusAudit = { sources: Record<string, Record<string, number>>; quality: Record<string, number>; akb_raiffeisen: Record<string, any> }
frontend/src/api/marketRefresh.ts:26:  apiPost<AssetRefreshJob>('/api/market/asset-price-refresh', { stale_hours: 24 })
frontend/src/api/marketRefresh.ts:28:  apiGet<AssetRefreshJob>(`/api/market/asset-price-refresh/${encodeURIComponent(jobId)}`, { refresh })
frontend/src/pages/BudgetImportPage.vue:30:            <option value="raiffeisen">Raiffeisen</option>
frontend/src/pages/BudgetImportReviewPage.vue:148:const tabs = [{ key: '', label: 'Alle neuen' }, { key: 'review', label: 'Review nötig' }, { key: 'auto', label: 'Auto-zugeordnet' }, { key: 'income', label: 'Einkommen' }, { key: 'transfers', label: 'Interne Transfers' }, { key: 'galaxus', label: 'Galaxus/Digitec' }, { key: 'unclear', label: 'Unklar' }, { key: 'duplicates', label: 'Duplikate prüfen' }, { key: 'auto_ignored_duplicates', label: 'Automatisch ignorierte Duplikate' }, { key: 'covered_by_source', label: 'Covered by Source' }, { key: 'migros', label: 'Migros' }, { key: 'visa', label: 'VISA' }, { key: 'raiffeisen', label: 'Raiffeisen' }, { key: 'akb', label: 'AKB' }, { key: 'money_in', label: 'Geld Eingang' }, { key: 'not_income_transfer', label: 'Nicht Einkommen / Transfer' }, { key: 'credit_card_payment', label: 'Kreditkartenausgleich' }, { key: 'investment_transfers', label: 'True Wealth / Investment Transfers' }, { key: 'reference_2025', label: '2025 Referenz' }, { key: 'ignored', label: 'Ignoriert / bereits verarbeitet' }]
frontend/src/pages/BudgetIncomePage.vue:135:function sourceLabel(value?: string | null) { return ({ akb_bank: 'AKB CSV', raiffeisen_bank: 'Raiffeisen CSV', import_candidate: 'Import Review', manual: 'Manuell' } as Record<string, string>)[String(value || '')] || value || 'Manuell' }
frontend/src/pages/BudgetReviewBacklogPage.test.ts:14:  header: { candidates_total: 10, open_candidates: 5, candidates_without_category: 2, low_confidence: 3, duplicates: 1, covered_by_migros: 4, reference_2025: 7, galaxus_digitec: 1, migros_review: 2, akb: 3, raiffeisen: 4, fixed_cost_candidates: 5 },
frontend/src/pages/BudgetReviewBacklogPage.test.ts:20:    akb_raiffeisen: { akb_count: 3, raiffeisen_count: 4, income_count: 1, transfer_count: 2, akb_groups: [{ merchant_key: 'akb', merchant_name: 'AKB Transfer', count: 3, sources: ['akb_bank'], candidate_ids: ['a1'] }], raiffeisen_groups: [{ merchant_key: 'raiff', merchant_name: 'Raiffeisen Lohn', count: 4, sources: ['raiffeisen_bank'], candidate_ids: ['r1'] }] },
frontend/src/pages/BudgetReviewBacklogPage.vue:23:      <Card><template #title>AKB/Raiffeisen</template><template #content><div class="grid gap-2 sm:grid-cols-4"><Tag :value="`AKB: ${groups.akb_raiffeisen?.akb_count || 0}`" severity="info" /><Tag :value="`Raiffeisen: ${groups.akb_raiffeisen?.raiffeisen_count || 0}`" severity="info" /><Tag :value="`Einnahmen: ${groups.akb_raiffeisen?.income_count || 0}`" severity="success" /><Tag :value="`Transfers: ${groups.akb_raiffeisen?.transfer_count || 0}`" severity="warn" /></div><h3 class="mt-4 font-semibold">AKB</h3><GroupList :groups="groups.akb_raiffeisen?.akb_groups || []" /><h3 class="mt-4 font-semibold">Raiffeisen</h3><GroupList :groups="groups.akb_raiffeisen?.raiffeisen_groups || []" /></template></Card>
frontend/src/pages/BudgetReviewBacklogPage.vue:50:const headerLabels: Record<string, [string, string]> = { candidates_total: ['Kandidaten total', 'alle importierten Kandidaten'], open_candidates: ['Offene Kandidaten', 'aktives Review 2026'], candidates_without_category: ['Ohne Kategorie', 'Arbeitsgruppe'], low_confidence: ['Niedrige Confidence', 'Priorität Review'], duplicates: ['Duplikate', 'separater Tab'], covered_by_migros: ['Covered by Migros', 'nicht confirmbar'], reference_2025: ['2025 Referenz', 'aus 2026 ausgeblendet'], galaxus_digitec: ['Galaxus/Digitec', 'separat prüfen'], migros_review: ['Migros Review', 'Bon-Ebene'], akb: ['AKB', 'bestehende Kandidaten'], raiffeisen: ['Raiffeisen', 'bestehende Kandidaten'], fixed_cost_candidates: ['Fixkosten-Kandidaten', 'keine Buchung'] }
frontend/src/pages/BudgetTransactionsPage.vue:116:function sourceLabel(value?: string | null) { return ({ visa_credit_card: 'VISA', credit_card_csv: 'VISA', migros_receipt: 'Migros', migros_receipts: 'Migros', raiffeisen_bank: 'Raiffeisen', akb_bank: 'AKB', import_candidate: 'Import Review', manual: 'Manuell' } as Record<string, string>)[String(value || '')] || value || 'Manuell' }
frontend/src/pages/BudgetWorkflowHelpUx.test.ts:42:    vi.mocked(getBudgetTransactions).mockResolvedValue([{ budget_transaction_id: 'tx1', transaction_date: '2026-01-10', account_name: 'Raiffeisen Marcel', description: 'Supermarkt', payee: 'Supermarkt', category_name: 'Essen & Haushalt', amount_original: '42.25', currency_original: 'CHF', amount_chf: '42.25', transaction_type: 'expense', status: 'confirmed', source_type: 'raiffeisen_bank' }] as any)
frontend/src/pages/BudgetWorkflowHelpUx.test.ts:45:    vi.mocked(getBudgetTransactionCandidates).mockResolvedValue([{ transaction_candidate_id: 'cand1', source_file_label: 'raiffeisen.csv', source_type: 'raiffeisen_bank', transaction_date: '2026-01-11', description: 'True Wealth Einzahlung', amount_original: '200.00', currency_original: 'CHF', status: 'transfer_candidate', classification: 'investment_transfer', review_reason: 'true_wealth_investment_transfer', confidence: '0.95', requires_review: true, account_source: 'Raiffeisen Marcel' }] as any)
frontend/src/pages/HouseholdImportsPage.vue:287:function profileLabel(profile: string) { return ({ akb_bank: 'AKB', raiffeisen_bank: 'Raiffeisen', visa_credit_card: 'VISA', migros_receipts: 'Migros-Belege' } as Record<string, string>)[profile] || profile }
frontend/src/pages/HouseholdImportsPage.vue:293:  const preferred = ['raiffeisen_bank', 'akb_bank', 'visa_credit_card', 'migros_receipts'].find(profile =>
frontend/src/pages/HouseholdUx.test.ts:919:        { source_type: 'raiffeisen_bank', requires_mapping: true },
frontend/src/pages/HouseholdUx.test.ts:925:        { mapping_id: 'map-rai', source_type: 'raiffeisen_bank', budget_account_id: 'b3', canonical_account_id: 'c3', confirmed: true, is_active: true },
frontend/src/pages/HouseholdUx.test.ts:941:      { slotId: 3, profile: 'raiffeisen_bank', mappingId: 'map-rai', csvText: 'rai csv', selected: true },
frontend/src/pages/HouseholdUx.test.ts:948:      { profile: 'raiffeisen_bank', csv_text: 'rai csv', mapping_id: 'map-rai' },
src/jarvis_finance/api/main.py:38:    "/api/portfolio/manual-snapshot/raiffeisen/preview",
src/jarvis_finance/api/routers/market.py:31:@router.post("/market/asset-price-refresh", response_model=AssetPriceRefreshJobResponse)
src/jarvis_finance/api/routers/market.py:45:@router.get("/market/asset-price-refresh/{job_id}", response_model=AssetPriceRefreshJobResponse)
src/jarvis_finance/api/routers/overview.py:71:    build_daily_valuation_job_status,
src/jarvis_finance/api/routers/overview.py:119:from jarvis_finance.services.raiffeisen_manual_snapshot import (
src/jarvis_finance/api/routers/overview.py:120:    confirm_raiffeisen_manual_snapshot,
src/jarvis_finance/api/routers/overview.py:121:    preview_raiffeisen_manual_snapshot,
src/jarvis_finance/api/routers/overview.py:127:@router.post("/portfolio/manual-snapshot/raiffeisen/preview", response_model=ManualSnapshotPreviewResponse)
src/jarvis_finance/api/routers/overview.py:128:def raiffeisen_manual_snapshot_preview(
src/jarvis_finance/api/routers/overview.py:133:        return preview_raiffeisen_manual_snapshot(conn, **request.model_dump())
src/jarvis_finance/api/routers/overview.py:139:    "/portfolio/manual-snapshot/raiffeisen/confirm",
src/jarvis_finance/api/routers/overview.py:143:def raiffeisen_manual_snapshot_confirm(
src/jarvis_finance/api/routers/overview.py:147:        return confirm_raiffeisen_manual_snapshot(conn, **request.model_dump())
src/jarvis_finance/api/routers/overview.py:271:def portfolio_daily_valuation_job(conn: Connection = Depends(get_db)) -> dict:
src/jarvis_finance/api/routers/overview.py:273:    return build_daily_valuation_job_status(conn)
src/jarvis_finance/api/schemas/performance_activation.py:471:    modelled_daily_valuation: TrueWealthModelledDailyPackage
src/jarvis_finance/cli/main.py:254:                "writes=0 reason=explicit_daily_valuation_activation_required"
src/jarvis_finance/cli/main.py:330:            result = refresh_crypto_prices(
src/jarvis_finance/cli/main.py:444:            result = refresh_crypto_prices(conn, provider=CoinGeckoClient(), currency="USD", limit=args.limit, dry_run=args.dry_run)
src/jarvis_finance/dashboard/views/page_00_command_center.py:96:        crypto_result = refresh_crypto_prices(conn, provider=CoinGeckoClient(max_retries=2, initial_backoff_seconds=1.0, max_backoff_seconds=8.0), currency="CHF", only_missing=True, sleep_seconds=1.0)
src/jarvis_finance/dashboard/views/page_04_crypto.py:136:        result = refresh_crypto_prices(conn, provider=CoinGeckoClient(max_retries=2, initial_backoff_seconds=1.0, max_backoff_seconds=8.0), currency="CHF", only_missing=True, sleep_seconds=1.0)
src/jarvis_finance/equity/manage.py:298:        ("raiffeisen", "Raiffeisen"),
src/jarvis_finance/imports/broker_mapping.py:194:        flags.append("raiffeisen_instrument_detail_missing")
src/jarvis_finance/imports/broker_parsers.py:176:def parse_raiffeisen_xlsx(path: Path) -> ParsedBrokerFile:
src/jarvis_finance/imports/broker_parsers.py:204:    if platform == "raiffeisen" and suffix == ".xlsx":
src/jarvis_finance/imports/broker_parsers.py:205:        return parse_raiffeisen_xlsx(path)
src/jarvis_finance/ledger/performance.py:235:            Quality("unavailable", ("ambiguous_daily_valuation",), points[0][0], points[-1][0]),
src/jarvis_finance/market/providers.py:238:def refresh_crypto_prices(
src/jarvis_finance/services/asset_price_refresh.py:176:    result = refresh_crypto_prices(
src/jarvis_finance/services/budget_csv_imports.py:15:from jarvis_finance.services.household_source_analysis import parse_raiffeisen_physical_records
src/jarvis_finance/services/budget_csv_imports.py:66:    "raiffeisen_bank": ImportProfile(
src/jarvis_finance/services/budget_csv_imports.py:67:        name="raiffeisen_bank",
src/jarvis_finance/services/budget_csv_imports.py:68:        source_type="raiffeisen_bank",
src/jarvis_finance/services/budget_csv_imports.py:69:        filename_patterns=("raiffeisen",),
src/jarvis_finance/services/budget_csv_imports.py:110:        return "raiffeisen_bank"
src/jarvis_finance/services/budget_csv_imports.py:120:    raiffeisen_header_detected = False
src/jarvis_finance/services/budget_csv_imports.py:121:    if profile_name in {None, "raiffeisen_bank"}:
src/jarvis_finance/services/budget_csv_imports.py:130:                raiffeisen_header_detected = True
src/jarvis_finance/services/budget_csv_imports.py:132:    if profile_name == "raiffeisen_bank" and not raiffeisen_header_detected:
src/jarvis_finance/services/budget_csv_imports.py:134:    if not raiffeisen_header_detected:
src/jarvis_finance/services/budget_csv_imports.py:143:    header_profile = "raiffeisen_bank" if raiffeisen_header_detected else detect_import_profile(list(columns))
src/jarvis_finance/services/budget_csv_imports.py:151:    if detected == "raiffeisen_bank":
src/jarvis_finance/services/budget_csv_imports.py:152:        rows = parse_raiffeisen_physical_records(
src/jarvis_finance/services/budget_csv_imports.py:210:    elif profile.name in {"raiffeisen_bank", "akb_bank"}:
src/jarvis_finance/services/budget_import_status.py:13:    "Raiffeisen-CSV": "source_type IN ('raiffeisen_bank') OR lower(coalesce(source_type,'')) LIKE '%raiffeisen%' OR lower(coalesce(source_file_label,'')) LIKE '%raiffeisen%'",
src/jarvis_finance/services/budget_import_status.py:129:    akb_raiffeisen = {
src/jarvis_finance/services/budget_import_status.py:131:        "Raiffeisen": _source_token_summary(conn, "raiffeisen"),
src/jarvis_finance/services/budget_import_status.py:135:    return {"sources": sources, "quality": quality, "akb_raiffeisen": akb_raiffeisen}
src/jarvis_finance/services/budget_import_status.py:261:        "akb": audit["akb_raiffeisen"]["AKB"]["candidates"],
src/jarvis_finance/services/budget_import_status.py:262:        "raiffeisen": audit["akb_raiffeisen"]["Raiffeisen"]["candidates"],
src/jarvis_finance/services/budget_import_status.py:269:    raiff_where = _safe_candidate_where("source_type='raiffeisen_bank'")
src/jarvis_finance/services/budget_import_status.py:280:        "akb_raiffeisen": {"akb_count": _count_where(conn, akb_where), "raiffeisen_count": _count_where(conn, raiff_where), "akb_groups": _merchant_groups(conn, akb_where), "raiffeisen_groups": _merchant_groups(conn, raiff_where), "income_count": _count_where(conn, _safe_candidate_where("source_type IN ('akb_bank','raiffeisen_bank') AND classification IN ('income_candidate','possible_income')")), "transfer_count": _count_where(conn, _safe_candidate_where("source_type IN ('akb_bank','raiffeisen_bank') AND (classification LIKE '%transfer%' OR status='transfer_candidate')"))},
src/jarvis_finance/services/budget_import_upload.py:24:    "raiffeisen": "raiffeisen_bank",
src/jarvis_finance/services/budget_import_upload.py:25:    "raiffeisen_bank": "raiffeisen_bank",
src/jarvis_finance/services/budget_imports.py:787:            "confidence": conf, "requires_review": needs_review, "status": status, "notes": json.dumps({"transaction_type": tx_type, "reason": reason, "target_account_hint": decision.get("target_account_hint"), "transfer": {"budget_impact": "neutral", "pair_status": "unmatched", "from_account_name": "Raiffeisen" if candidate_source_type == "raiffeisen_bank" else None, "to_account_name": decision.get("target_account_hint")}}, ensure_ascii=False),
src/jarvis_finance/services/budget_imports.py:827:            "bank": "source_type IN ('bank_csv','raiffeisen_bank','akb_bank')",
src/jarvis_finance/services/budget_imports.py:830:            "raiffeisen": "source_type='raiffeisen_bank'",
src/jarvis_finance/services/budget_imports.py:877:        WHERE source_type IN ('akb_bank','raiffeisen_bank','bank_csv')
src/jarvis_finance/services/budget_imports.py:903:        notes = json.dumps({"transaction_type": decision["transaction_type"], "reason": decision["review_reason"], "target_account_hint": decision.get("target_account_hint"), "transfer": {"budget_impact": "neutral", "pair_status": "unmatched", "from_account_name": "Raiffeisen" if row["source_type"] == "raiffeisen_bank" else None, "to_account_name": decision.get("target_account_hint")}, "reclassified_by": "income_csv_recognition_v1"}, ensure_ascii=False)
src/jarvis_finance/services/budget_monthly_import.py:31:    if "raiffeisen" in text:
src/jarvis_finance/services/budget_monthly_import.py:67:                elif "raiffeisen" in lowered:
src/jarvis_finance/services/budget_monthly_import.py:68:                    profile = "raiffeisen_bank"
src/jarvis_finance/services/cash_service.py:168:    "raiffeisen_bank",
src/jarvis_finance/services/daily_valuations.py:182:            refreshed = refresh_crypto_prices(
src/jarvis_finance/services/household_classification.py:253:    if source_type in {"akb_bank", "raiffeisen_bank"}:
src/jarvis_finance/services/household_classification.py:682:            source_type in {"akb_bank", "raiffeisen_bank"}
src/jarvis_finance/services/household_classification.py:706:    if source_type in {"akb_bank", "raiffeisen_bank"} and amount > 0:
src/jarvis_finance/services/household_classification.py:766:    if source_type in {"akb_bank", "raiffeisen_bank"} and amount > 0 and any(
src/jarvis_finance/services/household_classification.py:792:    if source_type in {"akb_bank", "raiffeisen_bank"} and amount > 0:
src/jarvis_finance/services/household_import.py:208:        row.get("source_type") not in {"akb_bank", "raiffeisen_bank"}
src/jarvis_finance/services/household_import.py:764:                    row.get("source_type") not in {"akb_bank", "raiffeisen_bank"}
src/jarvis_finance/services/household_import.py:811:    if profile in {"raiffeisen_bank", "akb_bank"}:
src/jarvis_finance/services/household_import.py:1756:                "raiffeisen_bank": "Raiffeisen",
src/jarvis_finance/services/household_import.py:2706:        or str(candidate["source_type"]) not in {"akb_bank", "raiffeisen_bank"}
src/jarvis_finance/services/household_import.py:2754:        and str(candidate["source_type"]) in {"akb_bank", "raiffeisen_bank"}
src/jarvis_finance/services/household_import.py:2863:            "source_label": {"akb_bank": "AKB", "raiffeisen_bank": "Raiffeisen", "visa_credit_card": "VISA", "migros_receipts": "Migros-Beleg"}.get(str(candidate["source_type"]), "Import"),
src/jarvis_finance/services/household_import.py:3032:        "raiffeisen_bank": "Raiffeisen",
src/jarvis_finance/services/household_review_corrections.py:118:            "raiffeisen_bank": "Raiffeisen",
src/jarvis_finance/services/household_review_corrections.py:518:            or str(candidate["source_type"]) not in {"akb_bank", "raiffeisen_bank"}
src/jarvis_finance/services/household_review_corrections.py:543:            "raiffeisen_bank",
src/jarvis_finance/services/household_source_analysis.py:42:def fold_raiffeisen_rows(rows: list[dict[str, Any]]) -> list[dict[str, Any]]:
src/jarvis_finance/services/household_source_analysis.py:69:def parse_raiffeisen_physical_records(
src/jarvis_finance/services/modelled_wealth.py:11:from jarvis_finance.services.daily_valuations import SOURCE_KEY as CRYPTO_VALUATION_SOURCE
src/jarvis_finance/services/performance_activation.py:18:from jarvis_finance.services.daily_valuations import run_daily_crypto_valuation
src/jarvis_finance/services/performance_activation.py:37:def build_daily_valuation_job_status(conn: Connection) -> dict[str, Any]:
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:68:        "SELECT platform_id FROM platforms WHERE lower(name) LIKE '%raiffeisen%' ORDER BY platform_id"
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:71:        raise ValueError("raiffeisen_platform_not_uniquely_mapped")
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:84:        raise ValueError(f"raiffeisen_cash_target_{suffix}_not_uniquely_mapped")
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:98:        raise ValueError("raiffeisen_membership_target_not_uniquely_mapped")
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:166:        raise ValueError("raiffeisen_targets_not_distinct")
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:243:            "contract": "raiffeisen_manual_snapshot_preview_v1",
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:248:        "preview_id": f"raiffeisen-preview-{token}",
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:249:        "confirmation_id": f"raiffeisen-confirm-{token}",
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:275:def preview_raiffeisen_manual_snapshot(conn: Connection, **payload: Any) -> dict[str, Any]:
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:311:def _confirm_raiffeisen_manual_snapshot_locked(
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:348:    membership_account_id = membership.account_id or stable_id("account", "raiffeisen", "membership-share")
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:471:def confirm_raiffeisen_manual_snapshot(
src/jarvis_finance/services/raiffeisen_manual_snapshot.py:487:        result = _confirm_raiffeisen_manual_snapshot_locked(
src/jarvis_finance/services/reports_v1.py:129:    wanted = {"visa_credit_card": "VISA", "migros_purchase": "Migros", "akb_bank": "AKB", "raiffeisen_bank": "Raiffeisen", "manual": "Manuell"}
src/jarvis_finance/services/transfer_pairing.py:18:    "raiffeisen_bank": ("raiffeisen",),
src/jarvis_finance/services/truewealth_productization.py:17:CONTRACT = "truewealth_raiffeisen_recipient_v1"
src/jarvis_finance/services/truewealth_productization.py:18:SOURCE = "truewealth_raiffeisen_cashflow_v1"
src/jarvis_finance/services/truewealth_productization.py:109:           WHERE c.source_type='raiffeisen_bank'
src/jarvis_finance/services/truewealth_productization.py:259:            source_reasons.append("raiffeisen_cash_account_role_required")
src/jarvis_finance/services/truewealth_productization.py:261:            source_reasons.append("active_raiffeisen_account_required")
src/jarvis_finance/services/truewealth_productization.py:263:            source_reasons.append("raiffeisen_account_currency_not_chf")
src/jarvis_finance/services/truewealth_productization.py:264:        if str(row.get("candidate_source_type") or "") != "raiffeisen_bank":
src/jarvis_finance/services/truewealth_productization.py:265:            source_reasons.append("raiffeisen_source_provenance_required")
src/jarvis_finance/services/truewealth_productization.py:267:            source_reasons.append("raiffeisen_account_source_mismatch")
src/jarvis_finance/services/truewealth_valuation.py:304:def store_truewealth_modelled_daily_valuation(conn: Connection, *, as_of: str | None) -> dict[str, Any]:
src/jarvis_finance/services/truewealth_valuation.py:566:    stored = store_truewealth_modelled_daily_valuation(conn, as_of=actual_day)
src/jarvis_finance/services/truewealth_valuation.py:611:        "modelled_daily_valuation": {
src/jarvis_finance/services/wealth_cockpit.py:238:        "raiffeisen": "raiffeisen_bank",
src/jarvis_finance/services/wealth_cockpit.py:1297:        elif "raiffeisen" in provider:
src/jarvis_finance/services/wealth_cockpit.py:1300:                "raiffeisen",
src/jarvis_finance/storage/migrations.py:2085:def _create_daily_market_analytics_tables(conn: Connection) -> None:
src/jarvis_finance/storage/migrations.py:2841:    """Add bounded manual-snapshot and controlled refresh job lineage."""
src/jarvis_finance/storage/migrations.py:2994:    _create_daily_market_analytics_tables(conn)
tests/unit/test_api_write_security.py:26:def test_raiffeisen_preview_is_explicitly_read_only_in_disabled_mode() -> None:
tests/unit/test_api_write_security.py:27:    assert "/api/portfolio/manual-snapshot/raiffeisen/preview" in READ_ONLY_POST_PATHS
tests/unit/test_broker_mapping_import_wizard.py:96:def test_platform_account_mapping_for_postfinance_and_true_wealth_and_raiffeisen_cash() -> None:
tests/unit/test_broker_mapping_import_wizard.py:105:    assert "raiffeisen_instrument_detail_missing" in rf["quality_flags"]
tests/unit/test_broker_parser_dry_run_pipeline.py:28:from jarvis_finance.imports.broker_parsers import parse_postfinance_docx, parse_raiffeisen_xlsx, parse_true_wealth_docx
tests/unit/test_broker_parser_dry_run_pipeline.py:109:def test_synthetic_raiffeisen_parser_recognizes_cash_and_aggregate_control_snapshot(tmp_path: Path) -> None:
tests/unit/test_broker_parser_dry_run_pipeline.py:110:    path = tmp_path / "synthetic_raiffeisen.xlsx"
tests/unit/test_broker_parser_dry_run_pipeline.py:112:    parsed = parse_raiffeisen_xlsx(path)
tests/unit/test_broker_parser_dry_run_pipeline.py:143:def test_raiffeisen_aggregate_only_is_blocked_not_productive_position(tmp_path: Path) -> None:
tests/unit/test_broker_parser_dry_run_pipeline.py:144:    path = tmp_path / "synthetic_raiffeisen.xlsx"
tests/unit/test_broker_parser_dry_run_pipeline.py:147:    run_broker_import_dry_run(c, parse_raiffeisen_xlsx(path), source_filename=path.name)
tests/unit/test_broker_parser_dry_run_pipeline.py:166:    path = tmp_path / "synthetic_raiffeisen.xlsx"
tests/unit/test_broker_parser_dry_run_pipeline.py:169:    run_broker_import_dry_run(c, parse_raiffeisen_xlsx(path), source_filename=path.name)
tests/unit/test_budget_import_production_v2.py:32:    assert detect_import_profile(["IBAN", "Booked At", "Text", "Credit/Debit Amount", "Balance", "Valuta Date"]) == "raiffeisen_bank"
tests/unit/test_budget_import_production_v2.py:41:        "raiffeisen_bank": "IBAN;Booked At;Text;Credit/Debit Amount;Balance;Valuta Date\nCH00;2026-01-05;Lohn Marcel;123.45;1000;2026-01-05\n",
tests/unit/test_budget_import_production_v2.py:90:    result = import_budget_csv_text(conn, "raiffeisen_bank", csv_text, source_file_label="raiffeisen.csv", dry_run=False, income_category_id=income)
tests/unit/test_budget_import_production_v2.py:125:    import_budget_csv_text(conn, "raiffeisen_bank", csv_text, source_file_label="raiffeisen.csv", dry_run=False, income_category_id=income)
tests/unit/test_budget_import_production_v2.py:138:def test_reclassify_existing_akb_raiffeisen_candidates_without_confirming() -> None:
tests/unit/test_budget_import_status_audit_v1.py:39:    insert_candidate(conn, "raiff-dup", source_type="raiffeisen_bank", status="duplicate_candidate", category_id=None, account_source="CH00")
tests/unit/test_budget_import_status_audit_v1.py:63:def test_akb_raiffeisen_audit_reports_presence_without_fake_importing() -> None:
tests/unit/test_budget_import_status_audit_v1.py:71:    assert summary["akb_raiffeisen"]["AKB"]["candidates"] == 0
tests/unit/test_budget_import_status_audit_v1.py:72:    assert summary["akb_raiffeisen"]["Raiffeisen"]["effective_transactions"] == 0
tests/unit/test_budget_import_status_audit_v1.py:73:    assert summary["akb_raiffeisen"]["csv_calculated_accounts"] == 0
tests/unit/test_budget_import_status_audit_v1.py:74:    assert summary["akb_raiffeisen"]["csv_anchor_snapshots"] == 0
tests/unit/test_budget_import_upload_ux_v1.py:41:        ("raiffeisen.csv", RAIFFEISEN_CSV, "raiffeisen_bank"),
tests/unit/test_budget_internal_transfer_hotfix.py:50:        "raiffeisen_bank",
tests/unit/test_budget_internal_transfer_hotfix.py:53:        source_file_label="synthetic-raiffeisen-run",
tests/unit/test_budget_internal_transfer_hotfix.py:83:        "SELECT COUNT(*) FROM budget_import_rules WHERE rule_id='rule_raiffeisen_swisslos_akb_transfer'"
tests/unit/test_budget_internal_transfer_hotfix.py:99:        if row["source_type"] == "raiffeisen_bank"
tests/unit/test_budget_internal_transfer_hotfix.py:138:        "raiffeisen_bank",
tests/unit/test_budget_internal_transfer_hotfix.py:141:        source_file_label="synthetic-raiffeisen-only",
tests/unit/test_budget_workflow_help_ux.py:20:    raiffeisen = confirm_create_budget_account(conn, {"name": "Raiffeisen Marcel", "account_type": "checking", "currency": "CHF"})["entity_id"]
tests/unit/test_budget_workflow_help_ux.py:25:    return raiffeisen, akb, visa, food, income
tests/unit/test_budget_workflow_help_ux.py:30:    raiffeisen, akb, _visa, food, income = setup_base(conn)
tests/unit/test_budget_workflow_help_ux.py:31:    confirm_budget_transaction(conn, {"account_id": raiffeisen, "transaction_type": "expense", "transaction_date": "2026-01-05", "description": "Supermarkt", "amount_original": "10.00", "currency_original": "CHF", "category_id": food})
tests/unit/test_budget_workflow_help_ux.py:34:    transfer = confirm_transfer(conn, {"from_account_id": raiffeisen, "to_account_id": akb, "amount_original": "5.00", "currency_original": "CHF", "transaction_date": "2026-01-07", "description": "Haushaltsübertrag", "transfer_type": "internal_transfer"})
tests/unit/test_budget_workflow_help_ux.py:50:    raiffeisen, _akb, visa, food, _income = setup_base(conn)
tests/unit/test_budget_workflow_help_ux.py:54:    confirm_budget_transaction(conn, {"account_id": raiffeisen, "transaction_type": "expense", "transaction_date": "2026-02-01", "description": "Apotheke", "amount_original": "7.00", "currency_original": "CHF", "category_id": food})
tests/unit/test_budget_workflow_help_ux.py:55:    confirm_transfer(conn, {"from_account_id": raiffeisen, "to_account_id": visa, "amount_original": "100.00", "currency_original": "CHF", "transaction_date": "2026-02-02", "description": "VISA Kartenabrechnung", "transfer_type": "credit_card_payment"})
tests/unit/test_budget_workflow_help_ux.py:56:    confirm_transfer(conn, {"from_account_id": raiffeisen, "to_account_id": true_wealth_cash, "amount_original": "200.00", "currency_original": "CHF", "transaction_date": "2026-02-03", "description": "True Wealth Einzahlung", "transfer_type": "investment_transfer"})
tests/unit/test_budget_workflow_help_ux.py:67:    _raiffeisen, _akb, _visa, _food, income = setup_base(conn)
tests/unit/test_budget_workflow_help_ux.py:69:    import_budget_csv_text(conn, "raiffeisen_bank", csv_text, source_file_label="raiffeisen.csv", dry_run=False, income_category_id=income)
tests/unit/test_crypto_price_update.py:47:    result = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=0)
tests/unit/test_crypto_price_update.py:66:    first = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=0)
tests/unit/test_crypto_price_update.py:67:    second = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=0)
tests/unit/test_crypto_price_update.py:102:    first = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=3600)
tests/unit/test_crypto_price_update.py:103:    second = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=3600)
tests/unit/test_crypto_price_update.py:121:    refresh_crypto_prices(conn, provider=MockProvider(), currency="CHF", max_age_seconds=0)
tests/unit/test_crypto_price_update.py:140:    refresh_crypto_prices(conn, provider=MockProvider(), currency="CHF", max_age_seconds=0)
tests/unit/test_crypto_price_update.py:190:    result = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=0)
tests/unit/test_crypto_price_update.py:201:    refresh_crypto_prices(conn, provider=MockProvider(), currency="CHF", max_age_seconds=3600, only_symbol="BTC")
tests/unit/test_crypto_price_update.py:204:    result = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=3600, only_missing=True)
tests/unit/test_crypto_price_update.py:215:    refresh_crypto_prices(conn, provider=MockProvider(), currency="CHF", max_age_seconds=3600)
tests/unit/test_crypto_price_update.py:221:    result = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=3600, only_stale=True)
tests/unit/test_crypto_price_update.py:234:    symbol_result = refresh_crypto_prices(conn, provider=provider, currency="CHF", max_age_seconds=0, only_symbol="ETH")
tests/unit/test_crypto_price_update.py:239:    limit_result = refresh_crypto_prices(conn, provider=provider2, currency="CHF", max_age_seconds=0, limit=1)
tests/unit/test_crypto_price_update.py:248:    result = refresh_crypto_prices(conn, provider=MockProvider(), currency="CHF", max_age_seconds=0, dry_run=True)
tests/unit/test_crypto_price_update.py:280:    refresh_crypto_prices(conn, provider=MissingProvider(), currency="CHF", max_age_seconds=0, only_symbol="BTC")
tests/unit/test_crypto_price_update.py:281:    refresh_crypto_prices(conn, provider=MissingProvider(), currency="CHF", max_age_seconds=0, only_symbol="BTC")
tests/unit/test_data_quality_alert_lifecycle.py:189:    refresh_crypto_prices(conn, provider=FreshProvider(), currency="CHF", max_age_seconds=3600, only_symbol="BTC")
tests/unit/test_data_quality_alert_lifecycle.py:247:    refresh_crypto_prices(conn, provider=MissingProvider(), currency="CHF", max_age_seconds=0, only_symbol="BTC")
tests/unit/test_data_quality_alert_lifecycle.py:248:    refresh_crypto_prices(conn, provider=MissingProvider(), currency="CHF", max_age_seconds=0, only_symbol="BTC")
tests/unit/test_household_classification_v2_golden.py:35:    parse_raiffeisen_physical_records,
tests/unit/test_household_classification_v2_golden.py:66:    configure_source_mapping(conn, {"confirm": True, "source_type": "raiffeisen_bank", "source_reference": "SYN-BANK-1", "budget_account_id": "bacc_bank"})
tests/unit/test_household_classification_v2_golden.py:149:            "source_type": "raiffeisen_bank",
tests/unit/test_household_classification_v2_golden.py:160:            "source_type": "raiffeisen_bank",
tests/unit/test_household_classification_v2_golden.py:173:    assert _mapping_account_is_compatible("raiffeisen_bank", base)
tests/unit/test_household_classification_v2_golden.py:174:    assert not _mapping_account_is_compatible("raiffeisen_bank", base | {"performance_included": 1})
tests/unit/test_household_classification_v2_golden.py:176:        "raiffeisen_bank", base | {"budget_currency": "EUR", "canonical_currency": "EUR"}
tests/unit/test_household_classification_v2_golden.py:196:        "confirm": True, "source_type": "raiffeisen_bank",
tests/unit/test_household_classification_v2_golden.py:223:    bank_preview = preview_household_import(bank_conn, {"files": [{"profile": "raiffeisen_bank", "csv_text": bank_csv}]})
tests/unit/test_household_classification_v2_golden.py:228:def test_auto_detects_legacy_comma_raiffeisen_with_unquoted_description_delimiter() -> None:
tests/unit/test_household_classification_v2_golden.py:233:    assert parsed["profile"] == "raiffeisen_bank"
tests/unit/test_household_classification_v2_golden.py:303:        row(merchant="Coop Terminal ABC123", source="raiffeisen_bank"),
tests/unit/test_household_classification_v2_golden.py:325:        row(merchant="Synthetic Lottery Mobile", source="raiffeisen_bank", amount="-91.00", tx_date="2026-02-11"),
tests/unit/test_household_classification_v2_golden.py:372:        row(merchant="Zinsgutschrift", source="raiffeisen_bank", amount="1.25"),
tests/unit/test_household_classification_v2_golden.py:460:def test_raiffeisen_same_day_same_amount_rows_with_distinct_balances_are_never_fuzzy_deduplicated() -> None:
tests/unit/test_household_classification_v2_golden.py:466:    parsed = parse_budget_csv_text(csv_text, "raiffeisen_bank")
tests/unit/test_household_classification_v2_golden.py:471:def test_raiffeisen_forced_profile_recovers_unquoted_description_commas() -> None:
tests/unit/test_household_classification_v2_golden.py:476:    parsed = parse_budget_csv_text(csv_text, "raiffeisen_bank")
tests/unit/test_household_classification_v2_golden.py:482:def test_raiffeisen_127_lines_become_69_logical_rows_across_two_references() -> None:
tests/unit/test_household_classification_v2_golden.py:498:    logical = parse_raiffeisen_physical_records(physical)
tests/unit/test_household_classification_v2_golden.py:513:        "source_type": "raiffeisen_bank",
tests/unit/test_household_classification_v2_golden.py:521:            "WHERE source_type='raiffeisen_bank' ORDER BY mapping_id"
tests/unit/test_household_classification_v2_golden.py:529:    base_file = {"profile": "raiffeisen_bank", "csv_text": csv_text}
tests/unit/test_household_classification_v2_golden.py:816:        "profile": "raiffeisen_bank",
tests/unit/test_household_classification_v2_golden.py:874:    assert extract_counterparty(outgoing, "raiffeisen_bank") == "synthetic utility ag"
tests/unit/test_household_classification_v2_golden.py:876:    assert extract_counterparty(salary_credit, "raiffeisen_bank") == "synthetic employer ag"
tests/unit/test_household_classification_v2_golden.py:1155:    payload = {"files": [{"profile": "raiffeisen_bank", "csv_text": csv_text}]}
tests/unit/test_household_classification_v2_golden.py:1185:    payload = {"files": [{"profile": "raiffeisen_bank", "csv_text": csv_text}]}
tests/unit/test_household_classification_v2_golden.py:1211:    payload = {"files": [{"profile": "raiffeisen_bank", "csv_text": csv_text}]}
tests/unit/test_household_classification_v2_golden.py:1243:    raiffeisen_rows = ["IBAN;Booked At;Text;Credit/Debit Amount;Balance;Valuta Date"]
tests/unit/test_household_classification_v2_golden.py:1246:        raiffeisen_rows.append(
tests/unit/test_household_classification_v2_golden.py:1253:        {"profile": "raiffeisen_bank", "csv_text": "\n".join(raiffeisen_rows) + "\n"},
tests/unit/test_household_classification_v2_golden.py:1299:            "profile": "raiffeisen_bank",
tests/unit/test_household_classification_v2_golden.py:1391:        source="raiffeisen_bank",
tests/unit/test_household_classification_v2_golden.py:1408:        row(merchant="Salary payment", source="raiffeisen_bank", amount="100.00"),
tests/unit/test_household_import_v1_golden.py:50:    configure_source_mapping(conn, {"confirm": True, "source_type": "raiffeisen_bank", "source_reference": "SYN-RAI-001", "budget_account_id": "bacc_rai"})
tests/unit/test_household_import_v1_golden.py:56:def raiffeisen_csv(amount: str = "-100.00", text: str = "SWISSLOS E-COMMERCE", tx_date: str = "2026-01-26") -> str:
tests/unit/test_household_import_v1_golden.py:66:        {"profile": "raiffeisen_bank", "csv_text": raiffeisen_csv()},
tests/unit/test_household_import_v1_golden.py:136:            "profile": "raiffeisen_bank",
tests/unit/test_household_import_v1_golden.py:153:def test_golden_raiffeisen_2026_01_26_swisslos_chf100_is_safe_v3_transfer_and_confirm_is_noop_twice() -> None:
tests/unit/test_household_import_v1_golden.py:175:        {"profile": "raiffeisen_bank", "csv_text": raiffeisen_csv("-10.00", "Payment Coffee")},
tests/unit/test_household_import_v1_golden.py:188:                "profile": "raiffeisen_bank",
tests/unit/test_household_import_v1_golden.py:189:                "csv_text": raiffeisen_csv("123.45", "Unresolved incoming payment"),
tests/unit/test_household_import_v1_golden.py:221:                "profile": "raiffeisen_bank",
tests/unit/test_household_import_v1_golden.py:222:                "csv_text": raiffeisen_csv("9261.30", "August salary Marcel"),
tests/unit/test_household_import_v1_golden.py:332:    bank_payment = preview_household_import(conn, {"files": [{"profile": "raiffeisen_bank", "csv_text": raiffeisen_csv("-55.00", "VISA CARD PAYMENT")}]})
tests/unit/test_household_import_v1_golden.py:429:    stolen["files"][0]["csv_text"] = raiffeisen_csv("-101.00")
tests/unit/test_household_import_v1_golden.py:438:    payload = {"files": [{"profile": "raiffeisen_bank", "csv_text": raiffeisen_csv("-10.00")}]}
tests/unit/test_household_import_v1_golden.py:447:    payload["files"][0]["mapping_id"] = mapping_ids["raiffeisen_bank"]
tests/unit/test_household_import_v1_golden.py:549:        "SELECT budget_account_id FROM household_account_source_mappings WHERE source_type='raiffeisen_bank'"
tests/unit/test_household_import_v1_golden.py:562:    payload = {"files": [{"profile": "raiffeisen_bank", "csv_text": raiffeisen_csv("-25.50", "Synthetic Grocery")}]}
tests/unit/test_household_import_v1_golden.py:603:    bank = raiffeisen_csv("-10.00", "Ordinary purchase")
tests/unit/test_household_import_v1_golden.py:606:        {"profile": "raiffeisen_bank", "csv_text": bank},
tests/unit/test_household_import_v1_golden.py:879:    payload = {"files": [{"profile": "raiffeisen_bank", "csv_text": csv_text}]}
tests/unit/test_household_import_v1_golden.py:1032:        source_type="raiffeisen_bank",
tests/unit/test_household_import_v1_golden.py:1051:    assert {item["value"] for item in first["source_options"]} == {"visa_credit_card", "raiffeisen_bank"}
tests/unit/test_household_import_v1_golden.py:1068:           VALUES ('review-rule-mutation','wrong-proposal','raiffeisen_bank',?,'review',1,
tests/unit/test_market_alerts.py:28:    ids = refresh_crypto_prices(c, provider=provider, currency='CHF')
tests/unit/test_market_alerts.py:34:    cached = refresh_crypto_prices(c, provider=provider, currency='CHF', max_age_seconds=3600)
tests/unit/test_market_alerts.py:44:    refresh_crypto_prices(c, provider=provider, currency='CHF', max_age_seconds=0)
tests/unit/test_market_alerts.py:45:    refresh_crypto_prices(c, provider=MockProvider([PriceQuote('ethereum','CHF',None,quality_status='missing',error_message='no price')]), currency='CHF', max_age_seconds=0)
tests/unit/test_modelled_wealth.py:502:               VALUES(?,'household_import_v1','raiffeisen_bank',?,?,?,'configured',1,?,?)""",
tests/unit/test_modelled_wealth.py:537:           VALUES('candidate-5632','private.csv','raiffeisen_bank','2026-08-25','Private row',
tests/unit/test_modelled_wealth.py:544:        conn, "raiffeisen", canonical_account_id="bank-known"
tests/unit/test_modelled_wealth.py:547:        conn, "raiffeisen", canonical_account_id="bank-unknown"
tests/unit/test_portfolio_data_ingestion_reconciliation.py:334:def test_scope_aware_raiffeisen_akb_transfer_is_internal_for_portfolio_and_external_for_account() -> None:
tests/unit/test_portfolio_data_ingestion_reconciliation.py:336:    add_transaction(conn, "transfer-out", "internal_transfer", "a", "2025-06-01T00:00:00+00:00", net="-100", transfer_group="raiffeisen-akb")
tests/unit/test_portfolio_data_ingestion_reconciliation.py:337:    add_transaction(conn, "transfer-in", "internal_transfer", "b", "2025-06-01T00:00:00+00:00", net="100", transfer_group="raiffeisen-akb")
tests/unit/test_raiffeisen_manual_snapshot.py:13:from jarvis_finance.services.raiffeisen_manual_snapshot import (
tests/unit/test_raiffeisen_manual_snapshot.py:14:    confirm_raiffeisen_manual_snapshot,
tests/unit/test_raiffeisen_manual_snapshot.py:15:    preview_raiffeisen_manual_snapshot,
tests/unit/test_raiffeisen_manual_snapshot.py:69:    preview = preview_raiffeisen_manual_snapshot(conn, **source_facts())
tests/unit/test_raiffeisen_manual_snapshot.py:99:    preview = preview_raiffeisen_manual_snapshot(conn, **source_facts())
tests/unit/test_raiffeisen_manual_snapshot.py:111:    preview = preview_raiffeisen_manual_snapshot(conn, **source_facts())
tests/unit/test_raiffeisen_manual_snapshot.py:113:        confirm_raiffeisen_manual_snapshot(
tests/unit/test_raiffeisen_manual_snapshot.py:116:            preview_id=f"raiffeisen-preview-{'0' * 32}",
tests/unit/test_raiffeisen_manual_snapshot.py:117:            confirmation_id=f"raiffeisen-confirm-{'0' * 32}",
tests/unit/test_raiffeisen_manual_snapshot.py:127:    result = confirm_raiffeisen_manual_snapshot(conn, **request)
tests/unit/test_raiffeisen_manual_snapshot.py:128:    replay = confirm_raiffeisen_manual_snapshot(conn, **request)
tests/unit/test_raiffeisen_manual_snapshot.py:144:        confirm_raiffeisen_manual_snapshot(
tests/unit/test_raiffeisen_manual_snapshot.py:196:    preview = preview_raiffeisen_manual_snapshot(conn, **source_facts())
tests/unit/test_raiffeisen_manual_snapshot.py:206:        confirm_raiffeisen_manual_snapshot(
tests/unit/test_raiffeisen_manual_snapshot.py:217:    preview = preview_raiffeisen_manual_snapshot(conn, **source_facts())
tests/unit/test_raiffeisen_manual_snapshot.py:229:        confirm_raiffeisen_manual_snapshot(
tests/unit/test_raiffeisen_manual_snapshot.py:297:    preview = preview_raiffeisen_manual_snapshot(conn, **facts)
tests/unit/test_raiffeisen_manual_snapshot.py:304:    confirmed = confirm_raiffeisen_manual_snapshot(
tests/unit/test_raiffeisen_manual_snapshot.py:323:    preview = preview_raiffeisen_manual_snapshot(target, **source_facts())
tests/unit/test_raiffeisen_manual_snapshot.py:340:            statuses.append(confirm_raiffeisen_manual_snapshot(conn, **request)["status"])
tests/unit/test_review_backlog_cleanup_v1.py:68:    cand(conn, "raiff", merchant="Raiffeisen Lohn", source_type="raiffeisen_bank", category_id=None, classification="income_candidate")
tests/unit/test_review_backlog_cleanup_v1.py:80:    assert dashboard["groups"]["akb_raiffeisen"]["akb_count"] == 1
tests/unit/test_review_backlog_cleanup_v1.py:81:    assert dashboard["groups"]["akb_raiffeisen"]["raiffeisen_count"] == 1
tests/unit/test_sprint14_performance_contract.py:48:def test_ttwror_rejects_ambiguous_duplicate_daily_valuations():
tests/unit/test_sprint14_performance_contract.py:58:    assert result.quality.reasons == ("ambiguous_daily_valuation",)
tests/unit/test_sprint16_household_onboarding.py:23:def _raiffeisen_csv() -> str:
tests/unit/test_sprint16_household_onboarding.py:63:    for account_id in ("acct_raiffeisen", "acct_akb"):
tests/unit/test_sprint16_household_onboarding.py:74:    raiffeisen = tmp_path / "raiffeisen.csv"
tests/unit/test_sprint16_household_onboarding.py:76:    raiffeisen.write_text(_raiffeisen_csv())
tests/unit/test_sprint16_household_onboarding.py:83:                "raiffeisen": {
tests/unit/test_sprint16_household_onboarding.py:109:        "raiffeisen_csv": raiffeisen,
tests/unit/test_sprint16_household_onboarding.py:111:        "raiffeisen_account_id": "acct_raiffeisen",
tests/unit/test_sprint16_household_onboarding.py:132:           FROM accounts WHERE account_id IN ('acct_s16_raiffeisen_extra','acct_s16_visa_liability')
tests/unit/test_sprint16_household_onboarding.py:138:    assert dry["raiffeisen"] == {
tests/unit/test_sprint16_household_onboarding.py:154:    conn.execute("UPDATE accounts SET is_health_reserve=1 WHERE account_id='acct_s16_raiffeisen_extra'")
tests/unit/test_sprint16_household_onboarding.py:159:            account_id="acct_s16_raiffeisen_extra",
tests/unit/test_sprint16_household_onboarding.py:166:    conn.execute("UPDATE accounts SET is_health_reserve=0 WHERE account_id='acct_s16_raiffeisen_extra'")
tests/unit/test_sprint16_household_onboarding.py:167:    conn.execute("UPDATE budget_accounts SET is_active=0 WHERE budget_account_id='bacc_s16_raiffeisen_b'")
tests/unit/test_sprint16_household_onboarding.py:172:            budget_id="bacc_s16_raiffeisen_b",
tests/unit/test_sprint16_household_onboarding.py:173:            account_id="acct_s16_raiffeisen_extra",
tests/unit/test_sprint20b_performance_activation_daily_valuations.py:14:from jarvis_finance.services.daily_valuations import run_daily_crypto_valuation
tests/unit/test_sprint20b_performance_activation_daily_valuations.py:16:    build_daily_valuation_job_status,
tests/unit/test_sprint20b_performance_activation_daily_valuations.py:97:def test_crypto_daily_valuation_is_canonical_and_idempotent(tmp_path: Path) -> None:
tests/unit/test_sprint20b_performance_activation_daily_valuations.py:117:def test_pending_crypto_transaction_never_changes_confirmed_daily_valuation(tmp_path: Path) -> None:
tests/unit/test_sprint20b_performance_activation_daily_valuations.py:301:        item for item in build_daily_valuation_job_status(conn)["sources"]
tests/unit/test_sprint20d_truewealth_productization.py:72:           VALUES(?,?,'raiffeisen_bank',?,?,?,?,'CHF','confirmed',?,?,?,?)""",
tests/unit/test_sprint20d_truewealth_productization.py:74:            candidate_id, "raiffeisen.csv", day,
tests/unit/test_sprint20d_truewealth_productization.py:243:            "raiffeisen_cash_account_role_required",
tests/unit/test_sprint20d_truewealth_productization.py:466:    assert conn.execute("SELECT COUNT(*) FROM transactions WHERE source_type='truewealth_raiffeisen_cashflow_v1'").fetchone()[0] == 1
tests/unit/test_sprint20d_truewealth_productization.py:565:    assert conn.execute("SELECT COUNT(*) FROM transactions WHERE source_type='truewealth_raiffeisen_cashflow_v1'").fetchone()[0] == 2
tests/unit/test_sprint20d_truewealth_valuation.py:21:    store_truewealth_modelled_daily_valuation,
tests/unit/test_sprint20d_truewealth_valuation.py:115:    stored = store_truewealth_modelled_daily_valuation(conn, as_of='2026-07-28')
tests/unit/test_sprint20d_truewealth_valuation.py:116:    repeated = store_truewealth_modelled_daily_valuation(conn, as_of='2026-07-28')
tests/unit/test_sprint20d_truewealth_valuation.py:177:    second = store_truewealth_modelled_daily_valuation(conn, as_of='2026-07-28')
tests/unit/test_sprint20e_crypto_market_recovery.py:21:from jarvis_finance.services.performance_activation import build_daily_valuation_job_status
tests/unit/test_sprint20e_crypto_market_recovery.py:376:        for source in build_daily_valuation_job_status(conn)["sources"]
tests/unit/test_sprint20e_crypto_market_recovery.py:391:        for item in build_daily_valuation_job_status(conn)["sources"]
tests/unit/test_sprint20e_crypto_market_recovery.py:409:        for item in build_daily_valuation_job_status(conn)["sources"]
tests/unit/test_sprint20e_crypto_market_recovery.py:436:        for source in build_daily_valuation_job_status(conn)["sources"]
tests/unit/test_sprint20e_crypto_market_recovery.py:463:        for source in build_daily_valuation_job_status(conn)["sources"]
tests/unit/test_transfer_pairing_v2.py:32:    raiffeisen = confirm_create_budget_account(
tests/unit/test_transfer_pairing_v2.py:44:    return raiffeisen, akb, reserve
tests/unit/test_transfer_pairing_v2.py:58:        source_file_label="synthetic-run-raiffeisen",
tests/unit/test_transfer_pairing_v2.py:59:        candidate_source_type="raiffeisen_bank",
tests/unit/test_transfer_pairing_v2.py:63:            "SELECT transaction_candidate_id FROM budget_transaction_candidates WHERE source_type='raiffeisen_bank'"
tests/unit/test_transfer_pairing_v2.py:221:        source_type="raiffeisen_bank",
tests/unit/test_transfer_pairing_v2.py:235:        source_type="raiffeisen_bank",

__HERMES_CWD_8d46a20096ed__/home/agent/.hermes/worktrees/FinanceManager-sprint23__HERMES_CWD_8d46a20096ed__
