#!/usr/bin/env python3
from pathlib import Path
import json,re,sys
p=Path(__file__).resolve().parents[1]; t=(p/'script/script_orthostatic_hypotension.txt').read_text().casefold()
any_groups={
 'gravity_pooling':['gravitational pooling','máu ứ','máu dồn xuống','trọng lực đã kéo một phần máu'],
 'venous_return':['venous return','máu tĩnh mạch trở về tim'],
 'stroke_volume_output':['stroke volume','thể tích nhát bóp','cardiac output','cung lượng tim'],
 'cerebral_perfusion':['tưới máu não'],
 'autonomic_compensation':['hệ giao cảm','sympathetic response'],
 'practical_staging':['từ tư thế nằm, hãy ngồi dậy trước','đứng lên có kiểm soát'],
 'muscle_pump':['siết bắp chân','co duỗi cổ chân'],
 'hydration_caution':['không nên tự ý ăn thật mặn','không nên tự tăng muối','đừng tự tăng muối'],
 'medication_review':['đừng tự ngừng thuốc','danh sách thuốc']
}
all_groups={
 'baroreceptor_sites':['xoang cảnh','quai động mạch chủ'],
 'orthostatic_types':['initial orthostatic hypotension','classic orthostatic hypotension'],
 'differentials':['vasovagal syncope','pots'],
 'evidence':['freeman','david robertson','arthur guyton','juraschek'],
 'red_flags':['ngất','đau ngực','khó thở','yếu hoặc tê liệt một bên','chấn thương']
}
missing=[k for k,v in any_groups.items() if not any(x in t for x in v)]
missing += [k for k,v in all_groups.items() if not all(x in t for x in v)]
forbidden=[x for x in ['chúng ta','chúng tôi'] if re.search(r'(?<!\w)'+re.escape(x)+r'(?!\w)',t)]
out={'ok':not missing and not forbidden,'passed':sorted((set(any_groups)|set(all_groups))-set(missing)),'missing':missing,'forbidden_narrator_pronouns':forbidden}
(p/'logs/semantic_gate.json').write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n');print(json.dumps(out,ensure_ascii=False));sys.exit(0 if out['ok'] else 1)
