"""Costs data-entry tab.""" from __future__ import annotations import streamlit as st from app.components.tables import df_to_values, value_editor from app.utils import icon from app.views._helpers import report_meta, safe from core.tei_client import TEIClient def render(client: TEIClient, tool: dict) -> None: st.markdown( f"

{icon('receipt')} Costs

", unsafe_allow_html=True, ) public_id = tool["id"] report = report_meta(client, tool) analysis_years = int(report.get("analysis_period_years") or 3) fields = safe(client.list_fields, report.get("id"), "costs") or [] values = [v for v in safe(client.get_values, public_id) or [] if v.get("table") == "costs"] if not fields: st.info("This report template has no cost fields defined.") return edited = value_editor( "costs", fields, values, analysis_years=analysis_years, key=f"costs_editor_{public_id}", ) col1, col2 = st.columns([1, 4]) with col1: if st.button("Save costs", width="stretch"): payload = df_to_values(edited, "costs", analysis_years) result = safe(client.update_values, public_id, payload) if result is not None: st.success(f"Saved {len(payload)} cost values.") st.cache_data.clear() with col2: st.caption( "The Initial column is undiscounted year-0 spend. Year columns " "are end-of-year cashflows. Costs are risk-adjusted upward " "(higher risk → higher cost)." )