Renders AI-generated analysis blocks produced by
ObjDecisionSwitch.simulate() and stored in
data_decision_sim_analysis. Designed for both standalone viewing
and embedding inside the simulation dashboard.
DecisionAnalysis — set as ReportType in def_report.
def Render(self, Param1="", Param2="", Param3="") -> str:
Param1 — DecisionName.Param2 — optional Version. Empty → newest analysis available.Standalone URL: /report/decision_analysis/<DecisionName>.
import ObjReportDecisionAnalysis
analysis = ObjReportDecisionAnalysis.Report(self.DB)
html = analysis.render_fragment(
decision_name="hc_col_bl_v1",
)
Analysis blocks are stored in data_decision_sim_analysis with
columns:
BlockType — summary, outcomes, anomalies (AI-generated),reconcile (deterministic bulk-vs-live diff written byObjDecisionSwitch._reconcile_bulk_vs_live).BlockTitle — display title.BlockContent — plain text (lines starting with - are renderedSimGuid — links the block to the originating sim run.The AI blocks for a given (DecisionName, Version) are deleted and
re-inserted on every simulation run. The reconcile block is
appended per sim and is keyed by SimGuid, so historical reconciles
remain available for audit.
The sim email (SIMULATION_OVERVIEW) renders blocks via
render_email_block(decision_name, block_type, accent, palette),
including the reconcile block which surfaces bulk-vs-live drift.