"""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)."
)