Wire the guarded conversational RAG answer layer end-to-end

This commit is contained in:
2026-08-05 14:33:13 +07:00
parent 834d9e51b0
commit ef08b4929e
127 changed files with 37921 additions and 169 deletions
+24
View File
@@ -0,0 +1,24 @@
"""Deterministic clinical calculators.
Audit §7: a dose calculation or unit conversion must be a tested function, never
an LLM. Body surface area replaces Appendix 1's lookup table (Dược thư 2018,
printed page 1499) with the book's own DuBois formula, so a BSA-based dose is
*computed and traceable*, not read off a quarantined table crop.
"""
from __future__ import annotations
# Dược thư 2018, Phụ lục 1 (printed 1499), DuBois & DuBois (Arch Intern Med
# 1916;17:863-71): S(cm²) = W^0.425 × H^0.725 × 71.84, W in kg, H in cm.
_DUBOIS_COEFFICIENT = 71.84
def body_surface_area_m2(weight_kg: float, height_cm: float) -> float:
"""Body surface area in m² by the DuBois formula the formulary prints.
Raises ValueError on a non-positive input: a BSA from a zero or negative
weight/height is a data error, not a number to return silently.
"""
if weight_kg <= 0 or height_cm <= 0:
raise ValueError("weight_kg and height_cm must be positive")
area_cm2 = (weight_kg ** 0.425) * (height_cm ** 0.725) * _DUBOIS_COEFFICIENT
return area_cm2 / 10_000