#!/usr/bin/env python3
from pathlib import Path
import json,sys
P=Path(__file__).resolve().parents[1];t=(P/'script/script_joint_cracking.txt').read_text().casefold()
g={
'synovial_joint':['khớp hoạt dịch'],'cartilage':['sụn khớp'],'capsule':['bao khớp'],'synovial_fluid':['dịch hoạt khớp'],'lubrication':['dầu bôi trơn'],'dissolved_gases':['khí hòa tan'],'nitrogen_co2_oxygen':['nitơ, carbon dioxide và oxy'],'volume_increase':['thể tích không gian bên trong bao khớp tăng'],'pressure_drop':['áp suất trong khớp giảm'],'rapid_pull':['kéo đủ nhanh'],'tribonucleation':['tribonucleation'],'cavitation':['cavitation'],'gas_cavity':['một khoang khí'],'not_simple_pop':['không nhất thiết có nghĩa một bong bóng cũ vừa “nổ”'],'realtime_imaging':['nghiên cứu hình ảnh theo thời gian thực'],'cavity_remains':['vẫn còn tồn tại một lúc sau đó'],'refractory':['refractory period'],'gas_rebalance':['khí cần hòa tan trở lại hoặc phân bố lại'],'tendon':['gân là dải mô nối cơ với xương'],'ligament':['dây chằng chủ yếu nối xương với xương'],'snapping':['bật sang vị trí khác'],'repeat_motion':['có thể lặp lại khi động tác được lặp lại'],'crepitus':['crepitus'],'noise_not_disease':['có tiếng chưa chắc đồng nghĩa với có bệnh'],'not_volume_severity':['tiếng càng to cũng chưa chắc tổn thương càng nặng'],'oa_evidence':['chưa chứng minh được rằng thói quen bẻ khớp ngón tay là nguyên nhân gây osteoarthritis'],'force_harm':['dùng lực quá mạnh'],'pain_swelling_injury':['đau, sưng, bong gân'],'not_realign':['không chứng minh xương trước đó bị lệch'],'not_success':['một tiếng rắc lớn không phải bằng chứng rằng thao tác đã thành công'],'no_force_neck':['không nên tự ép hoặc bẻ cổ'],'no_untrained':['không nên nhờ một người không được đào tạo'],'stop_if_no_sound':['nên dừng lại chứ không phải cố mạnh hơn'],'gentle_motion':['vận động nhẹ nhàng'],'ergonomics':['ergonomics'],'change_posture':['thường xuyên đổi tư thế'],'pain':['đau kéo dài'],'swelling':['sưng rõ'],'hot_red':['nóng đỏ'],'locking':['khóa khớp'],'instability':['khớp không vững'],'reduced_rom':['giảm tầm vận động'],'numb_weak':['tê, châm chích, yếu cơ'],'after_trauma':['sau cú ngã, va đập'],'deformity':['biến dạng'],'timely_care':['chăm sóc y tế kịp thời'],'no_absolute':['không thể chẩn đoán tuyệt đối'],'payoff':['và đây là payoff']}
missing=[k for k,v in g.items() if not any(x in t for x in v)];o={'status':'PASS' if not missing else 'FAIL','groups':len(g),'missing':missing};print(json.dumps(o,ensure_ascii=False));sys.exit(bool(missing))
