{"ok":true,"status":"OK","readonly_summary":true,"duration_ms":415.29,"version":"TSC Portfolio Center V6.4.2 Portfolio Data Quality Checks","data_quality_version":"V6.4.2","data_quality_active":true,"data_quality_ui_path":"/portfolio/quality","data_quality_alias_path":"/portfolio/data-quality","schema_check":{"ok":true,"status":"OK","readonly":true,"driver":"psycopg","existing_required_tables":["portfolio_transactions","portfolio_cash","portfolio_positions"],"missing_required_tables":[],"existing_optional_tables":["portfolio_price_cache","portfolio_overview_snapshots","portfolio_import_batches","portfolio_import_rows","portfolio_transaction_drafts","portfolio_targets"],"missing_optional_tables":[],"columns":{"portfolio_transactions":["amount_eur","asset_id","asset_key","broker_id","broker_key","cash_effect_eur","commit_ack","commit_gate_version","commit_note","commit_status","committed_at","created_at","currency","deleted_at","deleted_reason","draft_id","draft_key","external_id","fees","fx_rate_to_eur","gross_amount","id","is_deleted","net_amount","notes","payload_json","preview_json","price","quantity","rollback_note","rolled_back_at","source","source_reference","taxes","transaction_date","transaction_time","transaction_type","updated_at"],"portfolio_cash":["amount","amount_eur","applied_at","broker_id","broker_key","cash_balance_eur","cash_date","cash_in_eur","cash_key","cash_out_eur","cash_scope","cash_truth_source","cash_truth_version","cash_type","created_at","currency","deleted_at","first_transaction_date","fx_rate_to_eur","id","is_active","is_deleted","last_transaction_date","negative_count","notes","null_cash_effect_count","positive_count","raw_summary_json","related_transaction_id","replaced_at","source","source_rebuild_run_key","source_reference","source_run_key","transaction_count","updated_at"],"portfolio_positions":["applied_at","as_of_date","asset_id","asset_key","average_cost_eur","avg_buy_price_eur","broker_id","broker_key","calculation_note","calculation_status","cost_basis_eur","created_at","currency","current_price_eur","dividends_eur","first_buy_date","group_key","group_scope","id","invested_eur","is_active","is_deleted","last_buy_date","lot_count","market_price_eur","market_value_eur","open_pnl_eur","open_pnl_pct","position_key","position_scope","position_source","position_version","quantity","raw_json","realized_pnl_eur","replaced_at","source_open_lots_json","source_preview_run_key","source_run_key","unrealized_pl_eur","updated_at","valuation_note","valuation_price_date","valuation_price_key","valuation_price_source","valuation_raw_json","valuation_run_key","valuation_status","valuation_version","valued_at","weight_pct"],"portfolio_price_cache":["asset_id","asset_key","created_at","currency","fx_rate_to_eur","id","is_active","is_deleted","is_latest","notes","price","price_currency","price_date","price_eur","price_key","price_source","price_time","price_value","raw_json","source","source_reference","updated_at"],"portfolio_overview_snapshots":["asset_count","asset_summary_json","broker_count","broker_summary_json","cash_row_count","cash_summary_json","cash_total_eur","counts_json","created_at","error_count","id","missing_price_count","not_valued_count","overview_json","overview_status","overview_version","portfolio_total_value_eur","position_cost_basis_eur","position_count","position_market_value_eur","safety_ack","snapshot_date","snapshot_key","snapshot_note","snapshot_source","snapshot_status","snapshot_version","status_flags_json","summary_json","unrealized_pl_eur","unrealized_pl_pct","valued_position_count","warning_count","warnings_json"],"portfolio_import_batches":["archive_note","archive_reason","archived_at","archived_by","broker_key","candidate_transaction_count","created_at","error_count","errors_json","file_hash","file_name","id","import_key","import_note","import_source","import_status","import_type","is_archived","parsed_row_count","preview_json","raw_line_count","safety_ack","summary_json","updated_at","warning_count","warnings_json"],"portfolio_import_rows":["archive_note","archive_reason","archived_at","archived_by","created_at","detected_type","errors_json","id","import_batch_id","import_key","is_archived","normalized_json","raw_json","raw_text","row_index","row_status","warnings_json"],"portfolio_transaction_drafts":["amount_eur","archive_note","archive_reason","archived_at","archived_by","asset_key","broker_key","cash_effect_eur","committed_at","conversion_errors_json","conversion_warnings_json","converter_version","created_at","currency","discarded_at","draft_key","draft_status","gross_amount","id","import_payload_json","is_archived","net_amount","payload_json","preview_json","safety_ack","safety_gate_version","safety_note","source","source_import_broker_key","source_import_key","source_import_row_id","source_import_row_index","source_import_type","transaction_date","transaction_type","updated_at"],"portfolio_targets":["asset_id","created_at","id","is_active","max_pct","min_pct","notes","target_group","target_pct","updated_at"]},"duration_ms":73.52},"status_counts":{"portfolio_transactions":143,"portfolio_cash":0,"portfolio_positions":786,"portfolio_price_cache":731,"portfolio_overview_snapshots":46,"portfolio_import_batches":3,"portfolio_import_rows":7,"portfolio_transaction_drafts":12,"portfolio_targets":21},"quality_score":98,"quality_label":"SEHR_GUT","severity_counts":{"ERROR":0,"WARNING":0,"INFO":2,"OK":0},"category_counts":{"cash":1,"prices":1},"issue_count":2,"write_enabled":false,"writes_executed_by_summary":false,"does_not_write_to":["portfolio_transactions","portfolio_cash","portfolio_positions","portfolio_price_cache","portfolio_overview_snapshots","Trading-Hub-Tabellen"],"notes":["V6.4.2 ergänzt readonly Portfolio Data Quality Checks.","Die Quality-Seite meldet Fehler, Warnungen und Hinweise.","Es werden keine Daten verändert.","Nächster sinnvoller Ausbau: Dashboard-Warnbox direkt auf Mobile/Desktop einbetten."],"checked_at_utc":"2026-07-16T20:13:43+00:00"}