# Hospital FE translations — the whole HOSPITAL block + NAV keys, regenerated each phase.
import json, re, sys
ROOT = '/home/moonui3/public_html/moon-erp/src/'

AR = {
 "CANCEL": "إلغاء", "SAVE": "حفظ", "CLOSE": "إغلاق",
 "SETUP": {
  "TITLE": "إعداد المستشفى", "SUBTITLE": "الدرجات وأسعارها، والأماكن: المباني والأدوار والأقسام والغرف والأسرّة.", "MODE_LINK": "شكل المستشفى (إعدادات العيادة)",
  "T_LEVELS": "الدرجات", "T_LOCATIONS": "الأماكن والأسرّة",
  "LEVELS_HINT": "كل درجة ليها سعر ليلة/يوم واللي شاملها. السعر خدمة في العيادة، فأسعار الفروع والتعاقدات بتشتغل عليها.",
  "LOAD_LEVELS": "تحميل الدرجات الجاهزة", "NEW_LEVEL": "درجة جديدة", "EDIT_LEVEL": "تعديل الدرجة",
  "NO_LEVELS": "لسه مفيش درجات", "NO_LEVELS_HINT": "اضغط «تحميل الدرجات الجاهزة» — عنبر، تانية، أولى، أولى ممتاز، جناح، رعاية، حضّانات، عزل، يوم واحد — وعدّل أسعارها.",
  "ACTIVE": "شغّالة", "INACTIVE": "موقوفة", "PRICE_HINT": "أسعار الفروع والتعاقدات من شاشة التسعير في العيادة زي أي خدمة.",
  "LOC_HINT": "رتّب المستشفى: مبنى ← دور ← قسم ← غرف وأسرّة. «بناء سريع» بيعمل قسم كامل في فورم واحدة.",
  "NEW_WARD_NOFLOOR": "قسم من غير دور", "NEW_BUILDING": "مبنى جديد", "EMPTY_LOC": "لسه مفيش أماكن",
  "STEP1": "اعمل الدرجات (أو حمّل الجاهزة)", "STEP2": "اعمل مبنى ودور", "STEP3": "اعمل قسم واضغط «بناء سريع» للغرف والأسرّة",
  "NEW_FLOOR": "دور", "NEW_WARD": "قسم", "NO_WARDS": "مفيش أقسام في الدور ده", "WARDS_NOFLOOR": "أقسام من غير دور",
  "QUICK": "بناء سريع", "NEW_ROOM": "غرفة", "NO_ROOMS": "مفيش غرف — استخدم «بناء سريع»",
  "QUICK_TITLE": "بناء سريع للغرف والأسرّة", "QUICK_PREVIEW": "هيتعمل {{rooms}} غرفة ({{beds}} سرير) من {{from}} لـ {{to}}", "QUICK_GO": "اعمل الغرف",
  "LEVELS_LOADED": "اتضاف {{created}} درجة ({{skipped}} موجودين)", "ROOMS_MADE": "اتعمل {{n}} غرفة"},
 "UNIT": {"night": "ليلة", "day": "يوم", "block": "{{h}} ساعات"},
 "UNIT_NAME": {"night": "بالليلة", "day": "باليوم", "block": "بالساعات (يوم واحد)"},
 "INC": {"meals": "وجبات", "companion_bed": "سرير مرافق", "companion_meals": "وجبات مرافق", "nursing": "تمريض", "doctor_visit": "زيارة الدكتور"},
 "LEVEL_KIND": {"ward": "عنبر", "second": "تانية", "first": "أولى", "first_plus": "أولى ممتاز", "suite": "جناح", "intermediate": "رعاية متوسطة", "icu": "رعاية مركزة", "nicu": "حضّانات", "isolation": "عزل", "day_case": "يوم واحد"},
 "WARD_KIND": {"general": "عام", "surgical": "جراحة", "medical": "باطنة", "maternity": "نسا وولادة", "pediatric": "أطفال", "icu": "رعاية مركزة", "ccu": "رعاية قلب", "nicu": "حضّانات", "intermediate": "رعاية متوسطة", "isolation": "عزل", "day_case": "يوم واحد", "recovery": "إفاقة", "er_observation": "ملاحظة طوارئ"},
 "GENDER": {"any": "الكل", "male": "رجالي", "female": "حريمي"},
 "AMENITY": {"bathroom": "حمام خاص", "tv": "تلفزيون", "fridge": "تلاجة", "companion_bed": "سرير مرافق", "oxygen": "أكسجين", "suction": "شفط", "monitor": "مونيتور", "ventilator": "جهاز تنفس", "accessible": "مجهّزة لذوي الإعاقة", "sofa": "أنتريه", "view": "إطلالة"},
 "AMENITY_IC": {"bathroom": "🚿", "tv": "📺", "fridge": "🧊", "companion_bed": "🛋️", "oxygen": "🫁", "suction": "💨", "monitor": "📈", "ventilator": "🌬️", "accessible": "♿", "sofa": "🪑", "view": "🪟"},
 "F": {"NAME_AR": "الاسم بالعربي", "NAME_EN": "الاسم بالإنجليزي", "CODE": "الكود", "KIND": "النوع", "UNIT": "بيتحسب", "PRICE": "السعر", "BLOCK_HOURS": "عدد الساعات", "MIN_DEPOSIT": "أقل مقدم",
       "INCLUDES": "شامل", "UPLIFT": "زيادة أتعاب الجراح %", "COLOR": "اللون", "ROOM_NO": "رقم الغرفة", "LEVEL": "الدرجة", "AMENITIES": "المرافق", "LEVEL_NO": "رقم الدور",
       "GENDER": "رجالي / حريمي", "ROOMS": "عدد الغرف", "BEDS_PER_ROOM": "أسرّة في الغرفة", "START_NO": "تبدأ من رقم"},
 "LOC": {"buildings": "مبنى", "floors": "دور", "wards": "قسم", "rooms": "غرفة", "beds": "سرير"},
 "BED": {"free": "فاضي", "occupied": "مشغول", "reserved": "محجوز", "cleaning": "تنظيف", "maintenance": "صيانة", "blocked": "مقفول"},
 "BOARD": {"TITLE": "لوحة الأسرّة", "SUMMARY": "{{total}} سرير · إشغال {{pct}}% · فاضي {{free}}", "ADMIT": "دخول جديد", "ALL_WARDS": "كل الأقسام",
   "SEARCH": "دوّر بالمريض أو رقم السرير", "EMPTY": "لسه مفيش أسرّة", "EMPTY_HINT": "رتّب الأماكن من إعداد المستشفى — بناء سريع بيعمل قسم كامل في دقيقة.",
   "GO_SETUP": "إعداد المستشفى", "FREE_N": "{{n}} فاضي", "NIGHT_N": "ليلة {{n}}", "OUT_TODAY": "خروج النهارده", "NOTHING": "مفيش أسرّة بالفلتر ده",
   "ADMIT_HERE": "دخول على السرير ده", "TO_CLEANING": "محتاج تنظيف", "TO_MAINT": "صيانة", "READY": "جاهز (اتنضّف)", "BACK_SERVICE": "رجع للخدمة", "UNBLOCK": "فتح السرير", "OPEN_STAY": "ملف الإقامة"},
}
EN = {
 "CANCEL": "Cancel", "SAVE": "Save", "CLOSE": "Close",
 "SETUP": {
  "TITLE": "Hospital setup", "SUBTITLE": "Room levels and prices, and the places: buildings, floors, wards, rooms and beds.", "MODE_LINK": "Hospital mode (clinic settings)",
  "T_LEVELS": "Room levels", "T_LOCATIONS": "Places & beds",
  "LEVELS_HINT": "Each level has a night/day price and what it includes. The price is a clinic service, so branch and contract prices apply.",
  "LOAD_LEVELS": "Load the default levels", "NEW_LEVEL": "New level", "EDIT_LEVEL": "Edit level",
  "NO_LEVELS": "No levels yet", "NO_LEVELS_HINT": "Press «Load the default levels» — ward, second, first, first plus, suite, ICU, NICU, isolation, day case — then edit the prices.",
  "ACTIVE": "Active", "INACTIVE": "Off", "PRICE_HINT": "Branch and contract prices are set on the clinic pricing screen like any service.",
  "LOC_HINT": "Lay out the hospital: building → floor → ward → rooms and beds. «Quick build» makes a whole ward in one form.",
  "NEW_WARD_NOFLOOR": "Ward without a floor", "NEW_BUILDING": "New building", "EMPTY_LOC": "No places yet",
  "STEP1": "Create the levels (or load the defaults)", "STEP2": "Create a building and a floor", "STEP3": "Create a ward and press «Quick build» for rooms and beds",
  "NEW_FLOOR": "Floor", "NEW_WARD": "Ward", "NO_WARDS": "No wards on this floor", "WARDS_NOFLOOR": "Wards without a floor",
  "QUICK": "Quick build", "NEW_ROOM": "Room", "NO_ROOMS": "No rooms — use «Quick build»",
  "QUICK_TITLE": "Quick build rooms and beds", "QUICK_PREVIEW": "Creates {{rooms}} rooms ({{beds}} beds) from {{from}} to {{to}}", "QUICK_GO": "Create rooms",
  "LEVELS_LOADED": "Added {{created}} levels ({{skipped}} already there)", "ROOMS_MADE": "Created {{n}} rooms"},
 "UNIT": {"night": "night", "day": "day", "block": "{{h}} hours"},
 "UNIT_NAME": {"night": "Per night", "day": "Per day", "block": "Per block of hours (day case)"},
 "INC": {"meals": "Meals", "companion_bed": "Companion bed", "companion_meals": "Companion meals", "nursing": "Nursing", "doctor_visit": "Doctor visit"},
 "LEVEL_KIND": {"ward": "Ward", "second": "Second", "first": "First", "first_plus": "First plus", "suite": "Suite", "intermediate": "Intermediate care", "icu": "ICU", "nicu": "NICU", "isolation": "Isolation", "day_case": "Day case"},
 "WARD_KIND": {"general": "General", "surgical": "Surgical", "medical": "Medical", "maternity": "Maternity", "pediatric": "Paediatric", "icu": "ICU", "ccu": "CCU", "nicu": "NICU", "intermediate": "Intermediate care", "isolation": "Isolation", "day_case": "Day case", "recovery": "Recovery", "er_observation": "ER observation"},
 "GENDER": {"any": "Any", "male": "Male", "female": "Female"},
 "AMENITY": {"bathroom": "Private bathroom", "tv": "TV", "fridge": "Fridge", "companion_bed": "Companion bed", "oxygen": "Oxygen", "suction": "Suction", "monitor": "Monitor", "ventilator": "Ventilator", "accessible": "Accessible", "sofa": "Sofa", "view": "View"},
 "AMENITY_IC": AR["AMENITY_IC"],
 "F": {"NAME_AR": "Arabic name", "NAME_EN": "English name", "CODE": "Code", "KIND": "Kind", "UNIT": "Charged", "PRICE": "Price", "BLOCK_HOURS": "Hours", "MIN_DEPOSIT": "Minimum deposit",
       "INCLUDES": "Includes", "UPLIFT": "Surgeon fee uplift %", "COLOR": "Colour", "ROOM_NO": "Room number", "LEVEL": "Level", "AMENITIES": "Amenities", "LEVEL_NO": "Floor number",
       "GENDER": "Male / female", "ROOMS": "Rooms", "BEDS_PER_ROOM": "Beds per room", "START_NO": "Start number"},
 "LOC": {"buildings": "Building", "floors": "Floor", "wards": "Ward", "rooms": "Room", "beds": "Bed"},
 "BED": {"free": "Free", "occupied": "Occupied", "reserved": "Reserved", "cleaning": "Cleaning", "maintenance": "Maintenance", "blocked": "Blocked"},
 "BOARD": {"TITLE": "Bed board", "SUMMARY": "{{total}} beds · {{pct}}% occupied · {{free}} free", "ADMIT": "New admission", "ALL_WARDS": "All wards",
   "SEARCH": "Search patient or bed", "EMPTY": "No beds yet", "EMPTY_HINT": "Lay out the places in hospital setup — quick build makes a ward in a minute.",
   "GO_SETUP": "Hospital setup", "FREE_N": "{{n}} free", "NIGHT_N": "Night {{n}}", "OUT_TODAY": "Out today", "NOTHING": "No beds for this filter",
   "ADMIT_HERE": "Admit to this bed", "TO_CLEANING": "Needs cleaning", "TO_MAINT": "Maintenance", "READY": "Ready (cleaned)", "BACK_SERVICE": "Back in service", "UNBLOCK": "Unblock", "OPEN_STAY": "Open the stay"},
}
NAV = {'ar': {"HOSPITAL": "المستشفى", "HOSPITAL_BEDS": "لوحة الأسرّة", "HOSPITAL_SETUP": "إعداد المستشفى"},
       'en': {"HOSPITAL": "Hospital", "HOSPITAL_BEDS": "Bed board", "HOSPITAL_SETUP": "Hospital setup"}}
EXTRA = {}  # later phases append via import

# ── Phase B: admissions, money, room service ──
B_AR = {
 "ADM_STATUS": {"requested": "منتظر سرير", "admitted": "في السرير", "discharge_ordered": "أمر خروج", "discharged": "خرج", "cancelled": "ملغي"},
 "BILLING": {"itemized": "كاش (بالبند)", "package": "باكدج", "insurance": "تأمين / تعاقد"},
 "FOLIO": {"stay": "الإقامة", "daily": "خدمات يومية", "room_service": "الروم سيرفس", "surgery": "العمليات", "investigations": "التحاليل والأشعة", "services": "خدمات وإجراءات"},
 "DEP_KIND": {"deposit": "تأمين مستلم", "applied": "اتخصم من الحساب", "refund": "تأمين مردود"},
 "D_TYPE": {"home": "خروج للبيت", "transfer": "تحويل لمستشفى تاني", "against_advice": "على مسؤوليته", "death": "وفاة", "other": "أخرى"},
 "STAY_REASON": {"admit": "دخول", "transfer": "نقل", "upgrade": "ترقية درجة", "downgrade": "تخفيض درجة", "icu": "للرعاية", "isolation": "عزل", "request": "طلب المريض"},
 "RS_STATUS": {"new": "جديد", "preparing": "بيتحضّر", "on_the_way": "في الطريق", "delivered": "اتسلّم", "cancelled": "ملغي"},
 "TL": {"admit": "دخول", "transfer": "نقل", "deposit_deposit": "تأمين مستلم", "deposit_applied": "خصم من التأمين", "deposit_refund": "رد تأمين",
   "rs_new": "طلب روم سيرفس", "rs_preparing": "روم سيرفس بيتحضّر", "rs_on_the_way": "روم سيرفس في الطريق", "rs_delivered": "روم سيرفس اتسلّم", "rs_cancelled": "روم سيرفس ملغي",
   "discharge_ordered": "أمر خروج", "discharged": "خروج", "cancelled": "إلغاء"},
 "PICK": {"ALL_LEVELS": "كل الدرجات", "NONE": "مفيش أسرّة فاضية بالفلتر ده"},
 "ADMIT": {"TITLE": "دخول مريض", "SUB": "المريض ← السرير ← بيانات الإقامة ← التأمين. الحساب بيتفتح لوحده.",
   "S_PATIENT": "المريض", "S_BED": "السرير", "S_STAY": "بيانات الإقامة", "S_DEPOSIT": "التأمين (المقدم)", "OPTIONAL": "اختياري",
   "SEARCH_PATIENT": "اكتب اسم المريض أو رقم الملف أو الموبايل…", "NO_PATIENT": "مفيش مريض بالاسم ده.", "NEW_PATIENT": "سجّل مريض جديد", "CHANGE": "تغيير",
   "AGE": "{{n}} سنة", "RESERVE_ONLY": "حجز السرير بس (المريض لسه موصلش)", "RESERVE_HINT": "السرير هيتحجز باسم المريض، ولما يوصل اضغط «دخول على السرير» من ملفه.",
   "GENDER_WARN": "السرير ده في قسم {{g}} والمريض نوعه مختلف.", "IGNORE_GENDER": "تجاهل النوع (متأكد)",
   "DOCTOR": "الدكتور المعالج", "DEPARTMENT": "القسم", "DEPT_AUTO": "تلقائي (قسم الدكتور/العنبر)", "BILLING": "طريقة الحساب", "PAYER": "شركة التأمين / التعاقد",
   "REASON": "سبب الدخول", "REASON_PH": "مثلاً: استئصال مرارة بالمنظار", "DIAGNOSIS": "التشخيص", "NIGHTS": "عدد الليالي المتوقع", "DAYCASE_HINT": "سرير يوم واحد — بيتحسب بالساعات عند الخروج.",
   "COMPANION": "اسم المرافق", "COMPANION_PHONE": "موبايل المرافق", "NOTES": "ملاحظات",
   "NO_SESSION": "مفيش وردية كاشير مفتوحة ليك — افتح وردية علشان تستلم التأمين، أو سيبه دلوقتي.", "OPEN_CASHIER": "فتح الكاشير",
   "AMOUNT": "المبلغ", "METHOD": "طريقة الدفع", "REFERENCE": "رقم العملية / المرجع",
   "SUMMARY": "ملخص الدخول", "LEVEL": "الدرجة", "PRICE_NIGHT": "سعر الليلة", "PRICE_BLOCK": "سعر الفترة", "ESTIMATE": "التكلفة المتوقعة",
   "NEED_PATIENT": "اختار المريض", "NEED_BED": "اختار السرير (أو حجز بس)", "NEED_DOCTOR": "اختار الدكتور المعالج", "NEED_GENDER": "أكّد تجاهل النوع أو اختار سرير تاني", "NEED_PAYER": "اختار شركة التأمين",
   "DO_ADMIT": "دخول المريض", "DO_RESERVE": "حجز السرير", "ADMITTED_OK": "المريض دخل — إقامة {{no}}", "RESERVED_OK": "السرير اتحجز — {{no}}"},
 "ADM": {"TITLE": "الإقامات", "SUB": "مين في المستشفى دلوقتي، ومين خارج، ومين محتاج تأمين.", "T_IN_BED": "في السرير", "T_REQUESTED": "منتظر سرير", "T_LEAVING": "أمر خروج",
   "T_ALERTS": "تنبيه تأمين", "T_DISCHARGED": "خرجوا", "T_CANCELLED": "ملغي", "DUE_ALL": "مستحق على المقيمين", "DEPOSITS_ALL": "تأمينات معانا",
   "SEARCH": "دوّر بالاسم أو الملف أو السرير أو الدكتور", "NO_BED": "من غير سرير", "DUE": "الباقي", "DEPOSIT": "التأمين", "WITH_BALANCE": "خرج بمديونية", "DAY_CASE": "يوم واحد",
   "EMPTY": "مفيش إقامات هنا"},
 "FILE": {"BED": "السرير", "LAST_BED": "آخر سرير", "SINCE": "مدة الإقامة", "ADMIT_NOW": "دخول على السرير", "ROOM_SERVICE": "روم سيرفس", "ADD_SERVICE": "إضافة خدمة", "DEPOSIT": "تأمين / رد",
   "PAY_ON_ACCOUNT": "دفعة تحت الحساب", "TRANSFER": "نقل سرير", "DORDER": "أمر خروج", "EDIT_DORDER": "تعديل أمر الخروج", "UNDO_DORDER": "إلغاء أمر الخروج", "SETTLE": "تسوية الحساب",
   "DISCHARGE": "خروج المريض", "DISCHARGE_NOW": "خروج المريض دلوقتي", "COLLECT_DEBT": "تحصيل المديونية", "MEDICAL": "الملف الطبي", "CANCEL": "إلغاء الإقامة",
   "BILL_TOTAL": "إجمالي الحساب", "COVERAGE": "على التأمين", "PAID": "المدفوع", "USED_PCT": "الحساب = {{n}}% من التأمين", "REQUIRED": "المطلوب", "AFTER_DEPOSIT": "بعد التأمين",
   "T_BILL": "الحساب", "T_RS": "الروم سيرفس", "T_STAYS": "الإقامة والتنقلات", "T_MONEY": "التأمين والفلوس", "T_LOG": "السجل", "T_DISCHARGE": "الخروج",
   "INS": "تأمين", "L_PAID": "اتدفع", "L_OPEN": "مفتوح", "NO_LINES": "الحساب لسه فاضي", "NO_LINES_HINT": "الليالي بتتحسب كل نص ليل، والروم سيرفس عند التسليم، والخدمات أول ما تتضاف.",
   "NIGHTS_NOTE": "اتحسب {{n}} ليلة لحد دلوقتي (كل نص ليل تلقائي).", "CLOSE_BILL": "احسب الليالي لحد دلوقتي", "BILL_CLOSED": "الحساب اتحدّث",
   "NOW": "دلوقتي", "NO_STAYS": "لسه مدخلش سرير", "DEPOSIT_HINT": "التأمين بيتخصم من الحساب وقت التسوية، والباقي بيترد.", "NO_DEPOSITS": "مفيش تأمين أو مدفوعات",
   "FROM_DEPOSIT": "من التأمين", "D_TYPE": "نوع الخروج", "D_ORDERED": "أمر الخروج", "D_LEFT": "خرج فعلاً", "D_FOLLOW": "ميعاد المتابعة", "D_SUMMARY": "ملخص الخروج",
   "D_SUMMARY_PH": "الحالة وقت الدخول، اللي اتعمل، الحالة وقت الخروج…", "D_INSTR": "تعليمات للمريض", "D_INSTR_PH": "الأدوية، الأكل، الحركة، إمتى يرجع…",
   "NO_DORDER": "لسه مفيش أمر خروج", "CANCEL_REASON": "سبب الإلغاء", "DORDER_HINT": "أمر الخروج بيقفل الحساب بالليالي لحد دلوقتي، والكاشير يسوّي ويخرّج المريض.",
   "TO_BED": "على السرير", "BALANCE": "رصيد التأمين", "DO_REFUND": "رد التأمين", "DO_DEPOSIT": "استلام التأمين", "QTY": "الكمية", "LINE_TOTAL": "إجمالي البند",
   "SEARCH_SERVICE": "دوّر على الخدمة…", "NO_SERVICES": "مفيش خدمات بالاسم ده", "DO_CHARGE": "إضافة للحساب",
   "USE_DEPOSIT": "استخدم التأمين ({{n}})", "ADD_PAYMENT": "طريقة دفع تانية", "LEFT_AFTER": "الباقي بعد الدفع", "PARTIAL_HINT": "الباقي هيفضل مديونية على حساب الإقامة.",
   "REFUND_REST": "رجّع باقي التأمين ({{n}})", "DO_SETTLE": "تسوية", "SETTLED": "الحساب اتسوّى",
   "DISCHARGE_Q": "خروج {{name}} من سرير {{bed}}؟ السرير هيروح للتنظيف.", "STILL_DUE": "لسه على المريض {{n}}.", "WITH_BALANCE": "خروج بمديونية (تتحصّل بعدين)",
   "DEPOSIT_LEFT": "للمريض تأمين {{n}} — رجّعه أو اخصمه من الحساب الأول.", "DO_DISCHARGE": "تأكيد الخروج", "CANCEL_Q": "إلغاء الإقامة دي؟ السرير هيفضى. مينفعش لو عليها بنود أو تأمين.",
   "DO_CANCEL": "إلغاء الإقامة", "TRANSFERRED": "المريض اتنقل", "ADMITTED": "المريض دخل السرير", "REFUNDED": "التأمين اترد", "DEPOSITED": "التأمين اتستلم",
   "CHARGED": "الخدمة اتضافت للحساب", "DORDERED": "أمر الخروج اتسجّل والحساب اتقفل", "DORDER_UNDONE": "أمر الخروج اتلغى", "DISCHARGED": "المريض خرج", "CANCELLED": "الإقامة اتلغت"},
 "RS": {"ORDER_TITLE": "طلب روم سيرفس", "BUFFET": "البوفيه", "SERVICES": "الخدمات", "FREE": "مجاناً", "NO_ITEMS": "المنيو فاضي", "NO_ITEMS_HINT": "ضيف الأصناف من إعداد المستشفى ← الروم سيرفس.",
   "BASKET": "الطلب", "LINE_NOTE": "ملاحظة (مثلاً: من غير سكر)", "TAP_HINT": "اضغط على الصنف علشان يتضاف", "BY": "مين طلب",
   "BY_patient": "المريض", "BY_companion": "المرافق", "BY_nurse": "التمريض", "BY_phone": "بالتليفون", "NOTES": "ملاحظات للطلب", "TOTAL": "الإجمالي",
   "CHARGE_ON_DELIVERY": "بيتحسب على المريض لما يتسلّم.", "SEND": "إرسال للبوفيه", "PLACED": "الطلب {{no}} اتبعت", "NEW": "طلب جديد", "NONE": "مفيش طلبات روم سيرفس",
   "TO_preparing": "بدء التحضير", "TO_on_the_way": "خرج للغرفة", "TO_delivered": "اتسلّم", "CANCEL": "إلغاء",
   "BOARD": "الروم سيرفس", "BOARD_SUB": "طلبات البوفيه والخدمات للأسرّة · اتسلّم النهارده بـ {{n}}", "COL_EMPTY": "مفيش", "PICK_PATIENT": "الطلب لمين؟", "DELIVERED_OK": "{{no}} اتسلّم واتحسب"},
}
B_EN = {
 "ADM_STATUS": {"requested": "Waiting for bed", "admitted": "In bed", "discharge_ordered": "Discharge ordered", "discharged": "Discharged", "cancelled": "Cancelled"},
 "BILLING": {"itemized": "Cash (itemized)", "package": "Package", "insurance": "Insurance / contract"},
 "FOLIO": {"stay": "Stay", "daily": "Daily services", "room_service": "Room service", "surgery": "Surgery", "investigations": "Lab & imaging", "services": "Services & procedures"},
 "DEP_KIND": {"deposit": "Deposit received", "applied": "Applied to the bill", "refund": "Deposit refunded"},
 "D_TYPE": {"home": "Home", "transfer": "Transfer to another hospital", "against_advice": "Against medical advice", "death": "Death", "other": "Other"},
 "STAY_REASON": {"admit": "Admission", "transfer": "Transfer", "upgrade": "Upgrade", "downgrade": "Downgrade", "icu": "To intensive care", "isolation": "Isolation", "request": "Patient request"},
 "RS_STATUS": {"new": "New", "preparing": "Preparing", "on_the_way": "On the way", "delivered": "Delivered", "cancelled": "Cancelled"},
 "TL": {"admit": "Admitted", "transfer": "Transferred", "deposit_deposit": "Deposit received", "deposit_applied": "Deposit applied", "deposit_refund": "Deposit refunded",
   "rs_new": "Room service ordered", "rs_preparing": "Room service preparing", "rs_on_the_way": "Room service on the way", "rs_delivered": "Room service delivered", "rs_cancelled": "Room service cancelled",
   "discharge_ordered": "Discharge ordered", "discharged": "Discharged", "cancelled": "Cancelled"},
 "PICK": {"ALL_LEVELS": "All levels", "NONE": "No free beds for this filter"},
 "ADMIT": {"TITLE": "Admit a patient", "SUB": "Patient → bed → stay details → deposit. The bill opens by itself.",
   "S_PATIENT": "Patient", "S_BED": "Bed", "S_STAY": "Stay details", "S_DEPOSIT": "Deposit", "OPTIONAL": "optional",
   "SEARCH_PATIENT": "Type the patient's name, file number or mobile…", "NO_PATIENT": "No patient found.", "NEW_PATIENT": "Register a new patient", "CHANGE": "Change",
   "AGE": "{{n}} y", "RESERVE_ONLY": "Reserve the bed only (patient not here yet)", "RESERVE_HINT": "The bed is held for the patient; when they arrive press «Admit to bed» on the file.",
   "GENDER_WARN": "This bed is in a {{g}} ward and the patient's gender differs.", "IGNORE_GENDER": "Ignore gender (I am sure)",
   "DOCTOR": "Attending doctor", "DEPARTMENT": "Department", "DEPT_AUTO": "Automatic (doctor / ward)", "BILLING": "Billing", "PAYER": "Insurer / contract",
   "REASON": "Reason for admission", "REASON_PH": "e.g. laparoscopic cholecystectomy", "DIAGNOSIS": "Diagnosis", "NIGHTS": "Expected nights", "DAYCASE_HINT": "Day-case bed — charged by hours at discharge.",
   "COMPANION": "Companion name", "COMPANION_PHONE": "Companion mobile", "NOTES": "Notes",
   "NO_SESSION": "You have no open cashier shift — open one to take the deposit, or skip it for now.", "OPEN_CASHIER": "Open cashier",
   "AMOUNT": "Amount", "METHOD": "Payment method", "REFERENCE": "Reference",
   "SUMMARY": "Summary", "LEVEL": "Level", "PRICE_NIGHT": "Price per night", "PRICE_BLOCK": "Price per block", "ESTIMATE": "Expected cost",
   "NEED_PATIENT": "Choose the patient", "NEED_BED": "Choose the bed (or reserve only)", "NEED_DOCTOR": "Choose the attending doctor", "NEED_GENDER": "Confirm ignoring gender or choose another bed", "NEED_PAYER": "Choose the insurer",
   "DO_ADMIT": "Admit patient", "DO_RESERVE": "Reserve bed", "ADMITTED_OK": "Admitted — stay {{no}}", "RESERVED_OK": "Bed reserved — {{no}}"},
 "ADM": {"TITLE": "Admissions", "SUB": "Who is in the hospital now, who is leaving, who needs a deposit.", "T_IN_BED": "In bed", "T_REQUESTED": "Waiting for bed", "T_LEAVING": "Discharge ordered",
   "T_ALERTS": "Deposit alerts", "T_DISCHARGED": "Discharged", "T_CANCELLED": "Cancelled", "DUE_ALL": "Owed by inpatients", "DEPOSITS_ALL": "Deposits held",
   "SEARCH": "Search name, file, bed or doctor", "NO_BED": "No bed", "DUE": "Due", "DEPOSIT": "Deposit", "WITH_BALANCE": "Left with balance", "DAY_CASE": "Day case",
   "EMPTY": "No stays here"},
 "FILE": {"BED": "Bed", "LAST_BED": "Last bed", "SINCE": "Length of stay", "ADMIT_NOW": "Admit to bed", "ROOM_SERVICE": "Room service", "ADD_SERVICE": "Add a service", "DEPOSIT": "Deposit / refund",
   "PAY_ON_ACCOUNT": "Payment on account", "TRANSFER": "Transfer bed", "DORDER": "Discharge order", "EDIT_DORDER": "Edit discharge order", "UNDO_DORDER": "Undo discharge order", "SETTLE": "Settle the bill",
   "DISCHARGE": "Discharge patient", "DISCHARGE_NOW": "Discharge now", "COLLECT_DEBT": "Collect balance", "MEDICAL": "Medical file", "CANCEL": "Cancel the stay",
   "BILL_TOTAL": "Bill total", "COVERAGE": "Insurance", "PAID": "Paid", "USED_PCT": "Bill = {{n}}% of deposit", "REQUIRED": "Required", "AFTER_DEPOSIT": "After deposit",
   "T_BILL": "Bill", "T_RS": "Room service", "T_STAYS": "Stay & transfers", "T_MONEY": "Deposits & money", "T_LOG": "Log", "T_DISCHARGE": "Discharge",
   "INS": "ins.", "L_PAID": "Paid", "L_OPEN": "Open", "NO_LINES": "The bill is empty", "NO_LINES_HINT": "Nights post every midnight, room service on delivery, services when added.",
   "NIGHTS_NOTE": "{{n}} nights charged so far (automatically every midnight).", "CLOSE_BILL": "Charge nights up to now", "BILL_CLOSED": "Bill updated",
   "NOW": "now", "NO_STAYS": "Not in a bed yet", "DEPOSIT_HINT": "The deposit is applied to the bill at settlement; the rest is refunded.", "NO_DEPOSITS": "No deposits or payments",
   "FROM_DEPOSIT": "From deposit", "D_TYPE": "Discharge type", "D_ORDERED": "Ordered", "D_LEFT": "Left", "D_FOLLOW": "Follow-up", "D_SUMMARY": "Discharge summary",
   "D_SUMMARY_PH": "Condition on admission, what was done, condition at discharge…", "D_INSTR": "Instructions to the patient", "D_INSTR_PH": "Medication, diet, activity, when to come back…",
   "NO_DORDER": "No discharge order yet", "CANCEL_REASON": "Cancel reason", "DORDER_HINT": "The discharge order closes the bill with the nights up to now; the cashier settles and discharges.",
   "TO_BED": "To bed", "BALANCE": "Deposit balance", "DO_REFUND": "Refund deposit", "DO_DEPOSIT": "Receive deposit", "QTY": "Quantity", "LINE_TOTAL": "Line total",
   "SEARCH_SERVICE": "Search a service…", "NO_SERVICES": "No services found", "DO_CHARGE": "Add to the bill",
   "USE_DEPOSIT": "Use the deposit ({{n}})", "ADD_PAYMENT": "Another payment method", "LEFT_AFTER": "Left after paying", "PARTIAL_HINT": "The rest stays as a balance on the stay.",
   "REFUND_REST": "Refund the rest of the deposit ({{n}})", "DO_SETTLE": "Settle", "SETTLED": "Bill settled",
   "DISCHARGE_Q": "Discharge {{name}} from bed {{bed}}? The bed goes to cleaning.", "STILL_DUE": "The patient still owes {{n}}.", "WITH_BALANCE": "Discharge with balance (collect later)",
   "DEPOSIT_LEFT": "The patient has {{n}} deposit — refund it or apply it first.", "DO_DISCHARGE": "Confirm discharge", "CANCEL_Q": "Cancel this stay? The bed is freed. Not possible with charges or a deposit.",
   "DO_CANCEL": "Cancel stay", "TRANSFERRED": "Patient transferred", "ADMITTED": "Patient admitted to bed", "REFUNDED": "Deposit refunded", "DEPOSITED": "Deposit received",
   "CHARGED": "Service added to the bill", "DORDERED": "Discharge ordered, bill closed", "DORDER_UNDONE": "Discharge order undone", "DISCHARGED": "Patient discharged", "CANCELLED": "Stay cancelled"},
 "RS": {"ORDER_TITLE": "Room service order", "BUFFET": "Buffet", "SERVICES": "Services", "FREE": "Free", "NO_ITEMS": "The menu is empty", "NO_ITEMS_HINT": "Add items in hospital setup → room service.",
   "BASKET": "Order", "LINE_NOTE": "Note (e.g. no sugar)", "TAP_HINT": "Tap an item to add it", "BY": "Ordered by",
   "BY_patient": "Patient", "BY_companion": "Companion", "BY_nurse": "Nurse", "BY_phone": "Phone", "NOTES": "Order notes", "TOTAL": "Total",
   "CHARGE_ON_DELIVERY": "Charged to the patient on delivery.", "SEND": "Send to the pantry", "PLACED": "Order {{no}} sent", "NEW": "New order", "NONE": "No room-service orders",
   "TO_preparing": "Start preparing", "TO_on_the_way": "Sent to the room", "TO_delivered": "Delivered", "CANCEL": "Cancel",
   "BOARD": "Room service", "BOARD_SUB": "Buffet and service orders to the beds · delivered today {{n}}", "COL_EMPTY": "Nothing", "PICK_PATIENT": "Order for whom?", "DELIVERED_OK": "{{no}} delivered and charged"},
}
B_SETUP_AR = {"T_DAILY": "خدمات يومية للدرجة", "T_RS": "منيو الروم سيرفس", "SAVED": "اتحفظ", "RS_HINT": "كل صنف خدمة عيادة بسعرها، وممكن يبقى مجاني لدرجات معيّنة.",
   "RS_LOAD": "تحميل المنيو الجاهز", "RS_NEW": "صنف جديد", "RS_EDIT": "تعديل الصنف", "RS_EMPTY": "المنيو فاضي", "RS_EMPTY_HINT": "اضغط «تحميل المنيو الجاهز» — شاي، قهوة، عصير، وجبات مرافق، سرير مرافق، غسيل… وعدّل الأسعار.",
   "RS_LOADED": "اتضاف {{created}} صنف ({{skipped}} موجودين)", "RS_FREE_ON": "مجاني في:", "RS_STOCK": "بيتصرف من المخزن", "RS_CAT": "النوع", "RS_ICON": "الأيقونة",
   "RS_FREE_LEVELS": "مجاني للدرجات دي", "RS_FREE_HINT": "مثلاً القهوة مجانية في الجناح — بتتسجّل في الطلب بصفر.", "RS_PRODUCT": "رقم الصنف في المخزن (اختياري)",
   "RS_PRODUCT_PH": "لو عايز يتخصم من المخزن", "RS_WAREHOUSE": "رقم المخزن",
   "DAILY_HINT": "خدمات بتتضاف تلقائي مع كل ليلة في الدرجة (رسوم تمريض، زيارة الدكتور اليومية، وجبات…).", "DAILY_PER": "الليلة بالكامل:", "DAILY_ADD": "إضافة خدمة", "DAILY_NONE": "مفيش خدمات يومية"}
B_SETUP_EN = {"T_DAILY": "Daily services per level", "T_RS": "Room-service menu", "SAVED": "Saved", "RS_HINT": "Each item is a priced clinic service and can be free on some levels.",
   "RS_LOAD": "Load the default menu", "RS_NEW": "New item", "RS_EDIT": "Edit item", "RS_EMPTY": "The menu is empty", "RS_EMPTY_HINT": "Press «Load the default menu» — tea, coffee, juice, companion meals, companion bed, laundry… then edit the prices.",
   "RS_LOADED": "Added {{created}} items ({{skipped}} already there)", "RS_FREE_ON": "Free on:", "RS_STOCK": "Issued from stock", "RS_CAT": "Category", "RS_ICON": "Icon",
   "RS_FREE_LEVELS": "Free on these levels", "RS_FREE_HINT": "e.g. coffee is free in the suite — it is ordered at zero.", "RS_PRODUCT": "Stock item id (optional)",
   "RS_PRODUCT_PH": "To deduct it from stock", "RS_WAREHOUSE": "Warehouse id",
   "DAILY_HINT": "Services added automatically with every night on the level (nursing fee, daily doctor visit, meals…).", "DAILY_PER": "Full night:", "DAILY_ADD": "Add a service", "DAILY_NONE": "No daily services"}
B_BOARD_AR = {"HOURS_N": "{{n}} ساعة", "DAY_N": "اليوم {{n}}", "RESERVED_FOR": "محجوز", "DEPOSIT_ALERT": "التأمين قرب يخلص"}
B_BOARD_EN = {"HOURS_N": "{{n}} h", "DAY_N": "Day {{n}}", "RESERVED_FOR": "Reserved", "DEPOSIT_ALERT": "Deposit running out"}
B_AR["PGENDER"] = {"male": "ذكر", "female": "أنثى"}; B_EN["PGENDER"] = {"male": "Male", "female": "Female"}
AR.update(B_AR); EN.update(B_EN)
AR["SETUP"].update(B_SETUP_AR); EN["SETUP"].update(B_SETUP_EN)
AR["BOARD"].update(B_BOARD_AR); EN["BOARD"].update(B_BOARD_EN)
NAV['ar'].update({"HOSPITAL_ADMISSIONS": "الإقامات", "HOSPITAL_ADMIT": "دخول مريض", "HOSPITAL_RS": "الروم سيرفس"})
NAV['en'].update({"HOSPITAL_ADMISSIONS": "Admissions", "HOSPITAL_ADMIT": "Admit a patient", "HOSPITAL_RS": "Room service"})


# ── Phase C + D: surgery ──
C_AR = {
 "SURG_STATUS": {"booked": "محجوزة", "confirmed": "متأكدة", "ready": "جاهز", "in_or": "في العمليات", "recovery": "إفاقة", "done": "خلصت", "cancelled": "ملغية", "postponed": "متأجلة"},
 "PRIO": {"elective": "عادية", "urgent": "عاجلة", "emergency": "طوارئ"},
 "SIDE": {"na": "—", "right": "يمين", "left": "شمال", "bilateral": "الناحيتين"},
 "SBILL": {"itemized": "بالبند", "package": "باكدج المستشفى", "doctor_package": "باكدج الدكتور", "insurance": "تأمين"},
 "ANES": {"general": "كلي", "spinal": "نصفي", "epidural": "إبيديورال", "regional": "موضعي إقليمي", "local": "موضعي", "sedation": "مهدّئ", "none": "من غير"},
 "OP_CAT": {"minor": "صغرى", "intermediate": "متوسطة", "major": "كبرى", "special": "خاصة", "day": "يوم واحد"},
 "TH_KIND": {"major": "كبرى", "minor": "صغرى", "cath": "قسطرة", "endoscopy": "مناظير", "delivery": "ولادة", "eye": "عيون"},
 "ROLE": {"surgeon": "الجراح", "assistant": "مساعد", "anesthetist": "طبيب التخدير", "anesthesia_tech": "فني تخدير", "scrub_nurse": "تمريض معقم", "circulating_nurse": "تمريض دوار", "pediatrician": "طبيب أطفال", "technician": "فني", "other": "أخرى"},
 "FEE": {"remainder": "الباقي بعد التكاليف", "percent": "نسبة من العملية", "fixed": "مبلغ ثابت", "percent_of_role": "نسبة من دور تاني", "internal": "داخلي (مرتب)", "package_doctor": "باكدج الدكتور", "none": "من غير أتعاب"},
 "FEE_HINT": {"remainder": "سعر العملية/الباكدج − تكاليف المستشفى − أتعاب الباقيين.", "percent": "نسبة من أتعاب العملية (أو سعر الباكدج).", "fixed": "مبلغ محدد للحالة.",
   "percent_of_role": "مثلاً المساعد ٢٠٪ من الجراح — بتتخصم من الجراح لو هو «الباقي».", "internal": "دكتور بمرتب — مالوش أتعاب على الحالة.", "package_doctor": "اللي دفعه المريض − اللي المستشفى بتاخده.", "none": "—"},
 "PREOP": {"consent": "إقرار الموافقة موقّع", "fasting": "صايم", "site_marked": "مكان العملية متعلّم", "labs": "التحاليل جاهزة", "anesthesia_review": "مراجعة التخدير",
   "blood_ready": "الدم محجوز", "allergies_checked": "الحساسية متراجعة", "jewelry_removed": "شال الحلي والأسنان الصناعية", "iv_line": "كانيولا", "antibiotic": "مضاد حيوي قبل العملية"},
 "WHO": {"sign_in": "قبل التخدير (Sign in)", "time_out": "قبل الجرح (Time out)", "sign_out": "قبل خروج المريض (Sign out)",
   "sign_in_WHEN": "التمريض + التخدير قبل ما المريض ينام", "time_out_WHEN": "الفريق كله قبل أول جرح", "sign_out_WHEN": "قبل ما المريض يخرج من الأوضة", "SAVE": "حفظ المرحلة"},
 "WHO_Q": {"identity": "اتأكدنا من اسم المريض", "site": "مكان العملية واضح ومتعلّم", "consent": "الموافقة موجودة", "anesthesia_check": "جهاز وأدوية التخدير اتراجعت",
   "oximeter": "جهاز الأكسجين شغال على المريض", "allergy": "الحساسية معروفة", "airway": "صعوبة مجرى الهوا اتقيّمت", "blood_loss": "خطر نزيف أكتر من ٥٠٠ مل اتجهز له",
   "team_intro": "الفريق عرّف نفسه بالاسم والدور", "patient_site_procedure": "المريض والمكان والعملية اتأكدوا", "antibiotic": "المضاد الحيوي اتدّى في آخر ٦٠ دقيقة",
   "critical_events": "الأحداث الحرجة المتوقعة اتراجعت", "imaging": "الأشعة المهمة معروضة", "procedure_recorded": "اسم العملية اتسجل",
   "counts_correct": "عدّ الآلات والشاش والإبر مظبوط", "specimen_labelled": "العينات متعلّمة", "equipment_issues": "مشاكل الأجهزة اتسجلت", "recovery_plan": "خطة الإفاقة اتراجعت"},
 "TIME": {"in_room": "دخل الأوضة", "anesthesia_start": "بداية التخدير", "incision": "الجرح", "closure": "قفل الجرح", "anesthesia_end": "نهاية التخدير", "out_room": "خرج من الأوضة", "recovery_out": "خرج من الإفاقة"},
 "ITEM_KIND": {"consumable": "مستهلكات", "implant": "زرعات", "medication": "أدوية"},
 "REPORT": {"findings": "المشاهدات", "procedure": "العملية اللي اتعملت", "complications": "المضاعفات", "closure": "قفل الجرح", "post_op_orders": "أوامر ما بعد العملية",
   "blood_loss_ml": "النزيف (مل)", "drains": "الدرنقات", "specimens": "العينات", "specimens_ph": "مثلاً: مرارة ← باثولوجي", "condition": "الحالة بعد العملية"},
 "COND": {"stable": "مستقرة", "fair": "متوسطة", "critical": "حرجة"},
 "PK_INC": {"theatre": "غرفة العمليات", "anesthesia": "التخدير", "surgeon": "أتعاب الجراح", "assistant": "المساعد", "nights": "الإقامة", "meals": "الوجبات", "nursing": "التمريض",
   "routine_labs": "التحاليل الروتينية", "medications": "الأدوية", "consumables": "المستهلكات", "follow_up": "متابعة بعد العملية"},
 "PK_COST": {"theatre": "غرفة العمليات", "anesthesia": "التخدير", "nights": "الإقامة", "nursing": "التمريض", "consumables": "المستهلكات", "medications": "الأدوية", "labs": "التحاليل", "other": "أخرى"},
 "DP_COLLECT": {"hospital": "المستشفى بتحصّل", "doctor": "الدكتور بيحصّل"},
 "WEEKDAY": {"0": "الأحد", "1": "الاتنين", "2": "التلات", "3": "الأربع", "4": "الخميس", "5": "الجمعة", "6": "السبت"},
 "SURG": {"BOARD": "جدول العمليات", "DAY_SUM": "{{total}} عملية · {{waiting}} مستنية · {{in_or}} جوه · {{done}} خلصت", "M_BOARD": "اليوم", "M_LIST": "القايمة",
   "BOOK": "حجز عملية", "TODAY": "النهارده", "SEARCH": "دوّر بالعملية أو المريض أو الجراح", "NO_THEATRES": "مفيش غرف عمليات", "NO_THEATRES_HINT": "ضيف غرف العمليات من إعداد المستشفى ← غرف العمليات.",
   "UNASSIGNED": "من غير غرفة", "NONE": "مفيش عمليات في الفترة دي", "BOOKED": "اتحجزت — {{no}}", "OPERATION": "العملية", "SEARCH_OP": "دوّر على العملية…", "NO_OPS": "مفيش عمليات — حمّل الكتالوج من الإعداد",
   "DATE": "اليوم", "TIME": "الساعة", "MINUTES": "المدة (دقيقة)", "THEATRE": "غرفة العمليات", "NO_THEATRE": "لسه مش متحددة", "SURGEON": "الجراح", "ANESTHETIST": "طبيب التخدير",
   "ANESTHESIA": "التخدير", "PRIORITY": "الأولوية", "SIDE": "الناحية", "PACKAGE": "الباكدج", "DPACKAGE": "باكدج الدكتور", "NO_DPACKAGE": "مفيش باكدج للدكتور ده للعملية دي — ضيفه من الإعداد.",
   "NIGHTS_N": "{{n}} ليلة", "DIAG_PRE": "التشخيص قبل العملية", "DIAG_POST": "التشخيص بعد العملية", "WHEN": "الميعاد", "STAY": "الإقامة", "PRICE": "السعر",
   "FORCE": "طوارئ — احجز رغم التعارض", "DO_BOOK": "حجز", "NOT_ADMITTED": "لسه مدخلش", "CHARGES_POSTED": "اتحسبت على المريض",
   "ADMIT": "دخول المريض", "DO_CONFIRM": "تأكيد الحجز", "DO_READY": "المريض جاهز", "DO_IN_OR": "دخل العمليات", "DO_RECOVERY": "خرج للإفاقة", "DO_DONE": "العملية خلصت", "DO_REBOOK": "إعادة الحجز",
   "RESCHED": "تغيير الميعاد", "POSTPONE": "تأجيل", "CANCEL": "إلغاء", "MOVED": "اتحدّثت", "ADMITTED": "المريض دخل", "RESCHEDULED": "الميعاد اتغيّر", "SAVED": "اتحفظ", "SIGNED": "التقرير اتوقّع",
   "CHARGED": "الحساب اتسجّل على المريض", "T_TEAM": "الفريق والأتعاب", "T_PREOP": "التجهيز", "T_SAFETY": "السلامة (WHO)", "T_TIMES": "الأوقات", "T_ITEMS": "المستهلكات والزرعات",
   "T_REPORT": "تقرير العملية", "T_BILL": "الحساب", "TEAM_HINT": "مين عمل إيه وأتعابه بتتحسب إزاي. الأتعاب بتتحسب لما العملية تخلص.", "ADD_MEMBER": "إضافة للفريق",
   "OF": "من", "FEES_NOTE": "دي أتعاب محسوبة — التسوية والصرف من دفتر الدكاترة.", "FEES_TOTAL": "إجمالي الأتعاب", "FEES_LATER": "الأتعاب بتتحسب أوتوماتيك لما العملية تخلص.",
   "ASA": "تصنيف ASA", "WEIGHT": "الوزن (كجم)", "NOW": "دلوقتي", "D_ROOM": "جوه الأوضة", "D_SURGERY": "مدة العملية", "D_ANES": "مدة التخدير",
   "TIMES_HINT": "«دخل العمليات» و«خرج للإفاقة» بيسجلوا الوقت لوحدهم.", "ITEM": "الصنف", "ITEM_PH": "اكتب الاسم أو دوّر في المخزن…", "KIND": "النوع", "WAREHOUSE": "المخزن",
   "LOT": "رقم التشغيلة", "SERIAL": "الرقم المسلسل", "EXPIRY": "الصلاحية", "IN_PACKAGE": "جوه الباكدج", "ADD_ITEM": "إضافة", "ON_BILL": "على الحساب", "ISSUED": "اتصرف من المخزن",
   "NO_ITEMS": "مفيش مستهلكات أو زرعات", "SIGNED_BY": "وقّعه {{by}}", "SIGN": "حفظ وتوقيع", "NO_BILL": "مفيش بنود", "FEE_BASE": "أساس الأتعاب", "COSTS": "تكاليف المستشفى",
   "OVERRUN": "زيادة عن الباكدج", "ITEMS_VALUE": "قيمة المستهلكات", "BILL_POSTED": "البنود دي اتسجلت على حساب الإقامة.", "BILL_ON_DONE": "البنود دي هتتسجل على حساب الإقامة لما العملية تخلص.",
   "POST_NOW": "سجّل الحساب دلوقتي", "OPEN_STAY": "حساب الإقامة", "ADMIT_STAY": "العملية دي محتاجة إقامة — اختار السرير.", "ADMIT_DAY": "العملية دي يوم واحد — اختار سرير إفاقة / يوم واحد.",
   "DONE_Q": "العملية خلصت؟ الحساب هيتسجل والأتعاب هتتحسب.", "PREOP_MISSING": "لسه {{n}} بند في التجهيز متعلّموش.", "REPORT_MISSING": "تقرير العملية لسه مكتوبش.",
   "DONE_BILL": "هيتسجل على المريض {{n}}", "REASON": "السبب", "MEMBER": "عضو الفريق", "ROLE": "الدور", "DOCTOR": "الدكتور", "BY_NAME": "(بالاسم)", "NAME": "الاسم",
   "FEE_METHOD": "طريقة الأتعاب", "AMOUNT": "المبلغ", "PCT": "النسبة %", "OF_ROLE": "من أتعاب", "RESERVED_STAY": "المريض ليه سرير محجوز ({{no}}) — هيدخل عليه، أو اختار سرير تاني."},
}
C_EN = {
 "SURG_STATUS": {"booked": "Booked", "confirmed": "Confirmed", "ready": "Ready", "in_or": "In theatre", "recovery": "Recovery", "done": "Done", "cancelled": "Cancelled", "postponed": "Postponed"},
 "PRIO": {"elective": "Elective", "urgent": "Urgent", "emergency": "Emergency"},
 "SIDE": {"na": "—", "right": "Right", "left": "Left", "bilateral": "Bilateral"},
 "SBILL": {"itemized": "Itemized", "package": "Hospital package", "doctor_package": "Doctor's package", "insurance": "Insurance"},
 "ANES": {"general": "General", "spinal": "Spinal", "epidural": "Epidural", "regional": "Regional", "local": "Local", "sedation": "Sedation", "none": "None"},
 "OP_CAT": {"minor": "Minor", "intermediate": "Intermediate", "major": "Major", "special": "Special", "day": "Day case"},
 "TH_KIND": {"major": "Major", "minor": "Minor", "cath": "Cath lab", "endoscopy": "Endoscopy", "delivery": "Delivery", "eye": "Eye"},
 "ROLE": {"surgeon": "Surgeon", "assistant": "Assistant", "anesthetist": "Anaesthetist", "anesthesia_tech": "Anaesthesia tech", "scrub_nurse": "Scrub nurse", "circulating_nurse": "Circulating nurse", "pediatrician": "Paediatrician", "technician": "Technician", "other": "Other"},
 "FEE": {"remainder": "Remainder after costs", "percent": "% of the operation", "fixed": "Fixed amount", "percent_of_role": "% of another role", "internal": "Internal (salaried)", "package_doctor": "Doctor's package", "none": "No fee"},
 "FEE_HINT": {"remainder": "Operation / package price − hospital costs − the others' fees.", "percent": "A share of the operation fee (or the package price).", "fixed": "A set amount for the case.",
   "percent_of_role": "e.g. the assistant 20% of the surgeon — taken from the surgeon when he gets the remainder.", "internal": "Salaried doctor — no fee on the case.", "package_doctor": "What the patient paid − what the hospital takes.", "none": "—"},
 "PREOP": {"consent": "Consent signed", "fasting": "Fasting", "site_marked": "Site marked", "labs": "Labs ready", "anesthesia_review": "Anaesthesia review", "blood_ready": "Blood reserved",
   "allergies_checked": "Allergies checked", "jewelry_removed": "Jewellery / dentures removed", "iv_line": "IV line", "antibiotic": "Pre-op antibiotic"},
 "WHO": {"sign_in": "Before induction (Sign in)", "time_out": "Before incision (Time out)", "sign_out": "Before the patient leaves (Sign out)",
   "sign_in_WHEN": "Nurse + anaesthetist before induction", "time_out_WHEN": "Whole team before skin incision", "sign_out_WHEN": "Before the patient leaves the room", "SAVE": "Save phase"},
 "WHO_Q": {"identity": "Patient identity confirmed", "site": "Site marked", "consent": "Consent present", "anesthesia_check": "Anaesthesia machine & drugs checked", "oximeter": "Pulse oximeter on",
   "allergy": "Known allergy", "airway": "Difficult airway assessed", "blood_loss": "Risk of >500 ml blood loss prepared", "team_intro": "Team introduced by name and role",
   "patient_site_procedure": "Patient, site and procedure confirmed", "antibiotic": "Antibiotic within the last 60 min", "critical_events": "Anticipated critical events reviewed", "imaging": "Essential imaging displayed",
   "procedure_recorded": "Procedure name recorded", "counts_correct": "Instrument, sponge and needle counts correct", "specimen_labelled": "Specimens labelled", "equipment_issues": "Equipment problems noted", "recovery_plan": "Recovery plan reviewed"},
 "TIME": {"in_room": "In the room", "anesthesia_start": "Anaesthesia start", "incision": "Incision", "closure": "Closure", "anesthesia_end": "Anaesthesia end", "out_room": "Out of the room", "recovery_out": "Out of recovery"},
 "ITEM_KIND": {"consumable": "Consumable", "implant": "Implant", "medication": "Medication"},
 "REPORT": {"findings": "Findings", "procedure": "Procedure performed", "complications": "Complications", "closure": "Closure", "post_op_orders": "Post-op orders", "blood_loss_ml": "Blood loss (ml)",
   "drains": "Drains", "specimens": "Specimens", "specimens_ph": "e.g. gallbladder → pathology", "condition": "Condition after surgery"},
 "COND": {"stable": "Stable", "fair": "Fair", "critical": "Critical"},
 "PK_INC": {"theatre": "Theatre", "anesthesia": "Anaesthesia", "surgeon": "Surgeon fee", "assistant": "Assistant", "nights": "Stay", "meals": "Meals", "nursing": "Nursing", "routine_labs": "Routine labs",
   "medications": "Medication", "consumables": "Consumables", "follow_up": "Follow-up"},
 "PK_COST": {"theatre": "Theatre", "anesthesia": "Anaesthesia", "nights": "Stay", "nursing": "Nursing", "consumables": "Consumables", "medications": "Medication", "labs": "Labs", "other": "Other"},
 "DP_COLLECT": {"hospital": "Hospital collects", "doctor": "Doctor collects"},
 "WEEKDAY": {"0": "Sun", "1": "Mon", "2": "Tue", "3": "Wed", "4": "Thu", "5": "Fri", "6": "Sat"},
 "SURG": {"BOARD": "Operating schedule", "DAY_SUM": "{{total}} cases · {{waiting}} waiting · {{in_or}} in · {{done}} done", "M_BOARD": "Day", "M_LIST": "List", "BOOK": "Book an operation",
   "TODAY": "Today", "SEARCH": "Search operation, patient or surgeon", "NO_THEATRES": "No operating rooms", "NO_THEATRES_HINT": "Add the operating rooms in hospital setup → operating rooms.",
   "UNASSIGNED": "No room yet", "NONE": "No cases in this period", "BOOKED": "Booked — {{no}}", "OPERATION": "Operation", "SEARCH_OP": "Search an operation…", "NO_OPS": "No operations — load the catalog in setup",
   "DATE": "Date", "TIME": "Time", "MINUTES": "Duration (min)", "THEATRE": "Operating room", "NO_THEATRE": "Not set yet", "SURGEON": "Surgeon", "ANESTHETIST": "Anaesthetist", "ANESTHESIA": "Anaesthesia",
   "PRIORITY": "Priority", "SIDE": "Side", "PACKAGE": "Package", "DPACKAGE": "Doctor's package", "NO_DPACKAGE": "No package of this doctor for this operation — add it in setup.", "NIGHTS_N": "{{n}} nights",
   "DIAG_PRE": "Pre-op diagnosis", "DIAG_POST": "Post-op diagnosis", "WHEN": "When", "STAY": "Stay", "PRICE": "Price", "FORCE": "Emergency — book despite the clash", "DO_BOOK": "Book",
   "NOT_ADMITTED": "Not admitted", "CHARGES_POSTED": "Charged to the patient", "ADMIT": "Admit the patient", "DO_CONFIRM": "Confirm", "DO_READY": "Patient ready", "DO_IN_OR": "Into theatre",
   "DO_RECOVERY": "To recovery", "DO_DONE": "Operation done", "DO_REBOOK": "Book again", "RESCHED": "Reschedule", "POSTPONE": "Postpone", "CANCEL": "Cancel", "MOVED": "Updated", "ADMITTED": "Patient admitted",
   "RESCHEDULED": "Rescheduled", "SAVED": "Saved", "SIGNED": "Report signed", "CHARGED": "Charges posted to the patient", "T_TEAM": "Team & fees", "T_PREOP": "Pre-op", "T_SAFETY": "Safety (WHO)",
   "T_TIMES": "Times", "T_ITEMS": "Consumables & implants", "T_REPORT": "Operation report", "T_BILL": "Bill", "TEAM_HINT": "Who did what and how each is paid. Fees are computed when the case is done.",
   "ADD_MEMBER": "Add to team", "OF": "of", "FEES_NOTE": "Computed fees — settlement and payout from the doctors' ledger.", "FEES_TOTAL": "Total fees", "FEES_LATER": "Fees are computed automatically when the case is done.",
   "ASA": "ASA class", "WEIGHT": "Weight (kg)", "NOW": "Now", "D_ROOM": "In the room", "D_SURGERY": "Surgery", "D_ANES": "Anaesthesia", "TIMES_HINT": "«Into theatre» and «To recovery» stamp the time themselves.",
   "ITEM": "Item", "ITEM_PH": "Type a name or search stock…", "KIND": "Kind", "WAREHOUSE": "Warehouse", "LOT": "Lot", "SERIAL": "Serial", "EXPIRY": "Expiry", "IN_PACKAGE": "In the package", "ADD_ITEM": "Add",
   "ON_BILL": "On the bill", "ISSUED": "Issued from stock", "NO_ITEMS": "No consumables or implants", "SIGNED_BY": "Signed by {{by}}", "SIGN": "Save and sign", "NO_BILL": "No lines",
   "FEE_BASE": "Fee base", "COSTS": "Hospital costs", "OVERRUN": "Above the package", "ITEMS_VALUE": "Items value", "BILL_POSTED": "These lines are on the stay's bill.",
   "BILL_ON_DONE": "These lines go on the stay's bill when the case is done.", "POST_NOW": "Post the charges now", "OPEN_STAY": "Stay bill", "ADMIT_STAY": "This operation needs a stay — pick the bed.",
   "ADMIT_DAY": "This is a day case — pick a recovery / day-case bed.", "DONE_Q": "Is the operation done? The charges post and the fees are computed.", "PREOP_MISSING": "{{n}} pre-op items are not ticked.",
   "REPORT_MISSING": "The operation report is not written yet.", "DONE_BILL": "{{n}} will be charged to the patient", "REASON": "Reason", "MEMBER": "Team member", "ROLE": "Role", "DOCTOR": "Doctor",
   "BY_NAME": "(by name)", "NAME": "Name", "FEE_METHOD": "Fee method", "AMOUNT": "Amount", "PCT": "Percent %", "OF_ROLE": "Of the fee of", "RESERVED_STAY": "The patient has a reserved bed ({{no}}) — admitted to it, or pick another bed."},
}
C_SETUP_AR = {"T_OPS": "العمليات", "T_THEATRES": "غرف العمليات", "T_PACKAGES": "الباكدجات", "OPS_LOAD": "تحميل الكتالوج الجاهز", "OP_NEW": "عملية جديدة", "OP_EDIT": "تعديل العملية",
  "OPS_EMPTY": "لسه مفيش عمليات", "OPS_EMPTY_HINT": "حمّل الكتالوج الجاهز (٢٥ عملية شائعة بأسعار مبدئية) وعدّل.", "OPS_LOADED": "اتضاف {{created}} عملية ({{skipped}} موجودين)", "CATEGORY": "الفئة",
  "OP_PRICE": "أتعاب العملية", "ANES_PRICE": "أتعاب التخدير (اختياري)", "NEEDS_STAY": "محتاجة إقامة (مش يوم واحد)", "TH_HINT": "كل غرفة ليها سعر ساعة ووقت تجهيز بين الحالات وأيام محجوزة لأقسام أو جرّاحين.",
  "TH_LOAD": "تحميل الغرف الجاهزة", "TH_NEW": "غرفة جديدة", "TH_EDIT": "تعديل الغرفة", "TH_LOADED": "اتضاف {{created}} غرفة ({{skipped}} موجودين)", "TURNOVER_N": "تجهيز {{n}} د", "HOUR": "ساعة",
  "HOURLY": "سعر الساعة", "TURNOVER": "وقت التجهيز بين الحالات (د)", "BLOCK_ADD": "حجز ثابت", "WEEKDAY": "اليوم", "FROM": "من", "TO": "لـ", "BLOCK_LABEL": "لمين", "BLOCK_PH": "مثلاً: جراحة عامة / د. حسام",
  "PK_HOSPITAL": "باكدجات المستشفى", "PK_DOCTOR": "باكدجات الدكاترة", "PK_FROM_OPS": "باكدج لكل عملية", "PK_NEW": "باكدج جديد", "PK_EDIT": "تعديل الباكدج", "DP_NEW": "باكدج دكتور جديد",
  "PK_HINT": "سعر واحد للمريض شامل اللي تحدده. «تكاليف المستشفى» هي اللي المستشفى بتاخده الأول، والباقي للجراح لو أتعابه «الباقي».",
  "DP_HINT": "الدكتور جايب الحالة بسعره: المستشفى بتاخد سعرها الثابت، والفرق للدكتور.", "PK_LOADED": "اتعمل {{created}} باكدج", "PK_COSTS": "تكاليف المستشفى", "PK_REST": "الباقي للدكتور",
  "PK_EMPTY": "لسه مفيش باكدجات", "PK_PRICE": "سعر الباكدج", "PK_NIGHTS": "الليالي المشمولة", "PK_CONS_LIMIT": "حد المستهلكات", "PK_INCLUDES": "شامل", "PK_COSTS_HINT": "(اللي المستشفى بتصرفه / بتاخده)",
  "PK_EXCLUDES": "مش شامل", "DP_EMPTY": "لسه مفيش باكدجات دكاترة", "DP_HOSPITAL": "سعر المستشفى", "DP_PATIENT": "سعر المريض", "DP_COLLECTION": "مين بيحصّل", "DP_DOCTOR_GETS": "نصيب الدكتور"}
C_SETUP_EN = {"T_OPS": "Operations", "T_THEATRES": "Operating rooms", "T_PACKAGES": "Packages", "OPS_LOAD": "Load the default catalog", "OP_NEW": "New operation", "OP_EDIT": "Edit operation",
  "OPS_EMPTY": "No operations yet", "OPS_EMPTY_HINT": "Load the default catalog (25 common operations with starting prices) and edit.", "OPS_LOADED": "Added {{created}} operations ({{skipped}} already there)", "CATEGORY": "Category",
  "OP_PRICE": "Operation fee", "ANES_PRICE": "Anaesthesia fee (optional)", "NEEDS_STAY": "Needs a stay (not a day case)", "TH_HINT": "Each room has an hourly price, a turnover time between cases and days held for departments or surgeons.",
  "TH_LOAD": "Load the default rooms", "TH_NEW": "New room", "TH_EDIT": "Edit room", "TH_LOADED": "Added {{created}} rooms ({{skipped}} already there)", "TURNOVER_N": "turnover {{n}} min", "HOUR": "hour",
  "HOURLY": "Hourly price", "TURNOVER": "Turnover between cases (min)", "BLOCK_ADD": "Weekly block", "WEEKDAY": "Day", "FROM": "From", "TO": "To", "BLOCK_LABEL": "For whom", "BLOCK_PH": "e.g. General surgery / Dr. Hossam",
  "PK_HOSPITAL": "Hospital packages", "PK_DOCTOR": "Doctors' packages", "PK_FROM_OPS": "A package per operation", "PK_NEW": "New package", "PK_EDIT": "Edit package", "DP_NEW": "New doctor package",
  "PK_HINT": "One price for the patient covering what you tick. «Hospital costs» are what the hospital keeps first; the rest goes to the surgeon when his fee is «remainder».",
  "DP_HINT": "The doctor brings the case at his price: the hospital takes its fixed price, the difference is the doctor's.", "PK_LOADED": "Created {{created}} packages", "PK_COSTS": "Hospital costs", "PK_REST": "Rest to the doctor",
  "PK_EMPTY": "No packages yet", "PK_PRICE": "Package price", "PK_NIGHTS": "Nights included", "PK_CONS_LIMIT": "Consumables limit", "PK_INCLUDES": "Includes", "PK_COSTS_HINT": "(what the hospital spends / keeps)",
  "PK_EXCLUDES": "Not included", "DP_EMPTY": "No doctors' packages yet", "DP_HOSPITAL": "Hospital price", "DP_PATIENT": "Patient price", "DP_COLLECTION": "Who collects", "DP_DOCTOR_GETS": "Doctor's share"}
AR.update(C_AR); EN.update(C_EN)
AR["SETUP"].update(C_SETUP_AR); EN["SETUP"].update(C_SETUP_EN)
NAV['ar'].update({"HOSPITAL_SURGERY": "العمليات"}); NAV['en'].update({"HOSPITAL_SURGERY": "Surgery"})

# ── Phase E: doctors' account + pre-approvals ──
E_AR = {
 "DOC": {"TITLE": "حسابات الدكاترة", "SUB": "المستحق لكل دكتور من العمليات، المعلّق لحد ما شركة التأمين تدفع، السلف، والصرف.", "DUE": "مستحق للصرف", "PENDING": "معلّق (تأمين)",
   "ADVANCES": "سلف وخصومات", "PAID": "اتصرف", "SEARCH": "دوّر على دكتور", "SALARIED": "بمرتب", "EMPTY": "لسه مفيش حسابات", "EMPTY_HINT": "الأتعاب بتنزل هنا لوحدها لما العملية تخلص.",
   "RELEASE_ALL": "اعتماد المعلّق", "RELEASE": "اعتماد", "ADD_ENTRY": "سلفة / خصم / تسوية", "INCENTIVE": "حافز مع المرتب", "PAYOUT": "صرف المستحق", "DUE_GROSS": "المستحق", "NET": "الصافي للصرف",
   "DATE": "التاريخ", "DESC": "البيان", "CREDIT": "له", "DEBIT": "عليه", "BALANCE": "الرصيد", "NO_ENTRIES": "مفيش حركات", "PAYOUTS": "مرات الصرف", "GROSS_LESS": "{{g}} − سلف {{a}}", "PICK": "اختار دكتور",
   "PENDING_NOTE": "فيه {{n}} معلّق لحد ما الشركة تدفع — مش داخل في الصرف.", "DO_PAY": "صرف", "KIND_HINT_advance": "فلوس اتسلّمت للدكتور مقدّم — بتتخصم من أول صرف.",
   "KIND_HINT_deduction": "مبلغ بيتخصم من مستحقاته (هالك، غرامة…).", "KIND_HINT_adjustment": "تصحيح: موجب = له، سالب = عليه.", "INCENTIVE_HINT": "بيتضاف للدكتور الموظف في مسير مرتبات الشهر المفتوح.",
   "MONTH": "الشهر", "YEAR": "السنة", "RELEASED": "اتعمد", "PAID_OK": "اتصرف {{n}} — {{no}}", "SAVED": "اتسجّل", "INCENTIVE_OK": "الحافز اتضاف للمرتب"},
 "DOC_KIND": {"fee": "أتعاب", "payout": "صرف", "advance": "سلفة", "deduction": "خصم", "adjustment": "تسوية", "incentive": "حافز"},
 "DOC_STATUS": {"pending": "معلّق", "due": "مستحق", "paid": "اتصرف", "cancelled": "ملغي"},
 "PA": {"TITLE": "موافقات التأمين", "SUB": "{{requested}} مستنية رد · {{alerts}} عليها تنبيه", "NEW": "طلب موافقة", "NIGHTS": "ليالي (مستخدمة / موافق)", "AMOUNT": "الحساب / الموافقة",
   "UNTIL": "سارية لحد", "STAY": "الإقامة", "DECIDE": "تسجيل الرد", "EDIT": "تعديل الرد", "EMPTY": "مفيش موافقات", "FOR_STAY": "للإقامة", "REQ_NIGHTS": "ليالي مطلوبة", "REQ_AMOUNT": "مبلغ مطلوب",
   "INSURER_REF": "رقم موافقة الشركة", "SEND": "إرسال الطلب", "REQUESTED": "الطلب اتسجّل", "DECIDED": "الرد اتسجّل", "REQUESTED_X": "مطلوب {{n}} ليلة / {{a}}",
   "APP_NIGHTS": "ليالي موافق عليها", "APP_AMOUNT": "مبلغ موافق عليه", "REJECT_REASON": "سبب الرفض"},
 "PA_F": {"open": "شغّالة", "requested": "مستنية", "approved": "موافق", "partial": "جزئي", "rejected": "مرفوض", "all": "الكل"},
 "PA_STATUS": {"requested": "مستنية الرد", "approved": "موافق", "partial": "موافقة جزئية", "rejected": "مرفوض", "cancelled": "ملغي"},
 "PA_ALERT": {"waiting": "مستنية", "nights_over": "عدّى الليالي", "amount_over": "عدّى المبلغ", "expired": "انتهت"},
}
E_EN = {
 "DOC": {"TITLE": "Doctors' accounts", "SUB": "What each doctor is owed from the cases, what waits for the insurer, advances and payouts.", "DUE": "Due to pay", "PENDING": "Pending (insurer)",
   "ADVANCES": "Advances & deductions", "PAID": "Paid", "SEARCH": "Search a doctor", "SALARIED": "Salaried", "EMPTY": "No accounts yet", "EMPTY_HINT": "Fees arrive here by themselves when a case is done.",
   "RELEASE_ALL": "Release pending", "RELEASE": "Release", "ADD_ENTRY": "Advance / deduction / adjustment", "INCENTIVE": "Incentive with salary", "PAYOUT": "Pay out", "DUE_GROSS": "Due",
   "NET": "Net to pay", "DATE": "Date", "DESC": "Description", "CREDIT": "Credit", "DEBIT": "Debit", "BALANCE": "Balance", "NO_ENTRIES": "No movements", "PAYOUTS": "Payouts", "GROSS_LESS": "{{g}} − advances {{a}}",
   "PICK": "Pick a doctor", "PENDING_NOTE": "{{n}} is pending for the insurer — not in this payout.", "DO_PAY": "Pay", "KIND_HINT_advance": "Money handed to the doctor ahead — taken off the next payout.",
   "KIND_HINT_deduction": "An amount taken off his dues (damage, a fine…).", "KIND_HINT_adjustment": "A correction: positive = owed to him, negative = against him.",
   "INCENTIVE_HINT": "Added for the salaried doctor to the open payroll of the month.", "MONTH": "Month", "YEAR": "Year", "RELEASED": "Released", "PAID_OK": "Paid {{n}} — {{no}}", "SAVED": "Recorded",
   "INCENTIVE_OK": "Incentive added to the payroll"},
 "DOC_KIND": {"fee": "Fee", "payout": "Payout", "advance": "Advance", "deduction": "Deduction", "adjustment": "Adjustment", "incentive": "Incentive"},
 "DOC_STATUS": {"pending": "Pending", "due": "Due", "paid": "Paid", "cancelled": "Cancelled"},
 "PA": {"TITLE": "Insurance pre-approvals", "SUB": "{{requested}} waiting · {{alerts}} with alerts", "NEW": "Request approval", "NIGHTS": "Nights (used / approved)", "AMOUNT": "Bill / approval",
   "UNTIL": "Valid until", "STAY": "Stay", "DECIDE": "Record the answer", "EDIT": "Edit the answer", "EMPTY": "No pre-approvals", "FOR_STAY": "For the stay", "REQ_NIGHTS": "Nights requested", "REQ_AMOUNT": "Amount requested",
   "INSURER_REF": "Insurer approval no.", "SEND": "Send request", "REQUESTED": "Request recorded", "DECIDED": "Answer recorded", "REQUESTED_X": "Requested {{n}} nights / {{a}}",
   "APP_NIGHTS": "Approved nights", "APP_AMOUNT": "Approved amount", "REJECT_REASON": "Reason"},
 "PA_F": {"open": "Open", "requested": "Waiting", "approved": "Approved", "partial": "Partial", "rejected": "Rejected", "all": "All"},
 "PA_STATUS": {"requested": "Waiting", "approved": "Approved", "partial": "Partial", "rejected": "Rejected", "cancelled": "Cancelled"},
 "PA_ALERT": {"waiting": "Waiting", "nights_over": "Nights exceeded", "amount_over": "Amount exceeded", "expired": "Expired"},
}
AR.update(E_AR); EN.update(E_EN)
NAV['ar'].update({"HOSPITAL_DOCTORS": "حسابات الدكاترة", "HOSPITAL_PREAUTHS": "موافقات التأمين"}); NAV['en'].update({"HOSPITAL_DOCTORS": "Doctors' accounts", "HOSPITAL_PREAUTHS": "Pre-approvals"})

# ── Phase F: nursing, equipment, reports ──
F_AR = {
 "NURSE": {"TAB": "التمريض", "MAR": "جدول الأدوية", "DUE_N": "{{n}} جرعة دلوقتي", "MISSED_N": "{{n}} فاتت", "ON_TIME": "الأدوية مظبوطة", "NEW_ORDER": "أمر دواء", "DRUG": "الدواء", "DOSE": "الجرعة",
   "ROUTE": "الطريقة", "FREQ": "التكرار", "DAYS": "أيام", "CHARGE": "يتحسب كل جرعة", "PRN_GIVE": "إعطاء عند اللزوم", "PRN_NOW": "دلوقتي", "STOP": "إيقاف الأمر", "STOPPED_T": "متوقف",
   "NO_ORDERS": "مفيش أدوية", "NOTE_PH": "ملاحظة (اختياري)", "VITALS": "العلامات الحيوية", "TIME": "الوقت", "NO_VITALS": "مفيش قراءات", "TREND": "النبض (أحمر) والأكسجين (أزرق) آخر القراءات",
   "NOTES": "ملاحظات التمريض", "NOTE_BODY": "اكتب الملاحظة…", "NO_NOTES": "مفيش ملاحظات", "EQUIPMENT": "الأجهزة على المريض", "EQ_STOP": "شيل الجهاز", "DAYS_N": "{{n}} يوم", "DAY": "يوم",
   "NO_EQ_CATALOG": "ضيف الأجهزة من إعداد المستشفى ← الأجهزة.", "RECORDED": "اتسجّل", "ORDERED": "الأمر اتسجّل", "STOPPED": "الأمر اتوقف", "VITALS_OK": "القراءة اتسجلت",
   "NOTE_OK": "الملاحظة اتسجلت", "EQ_ON": "الجهاز اشتغل على المريض", "EQ_OFF": "الجهاز اتشال", "STATION": "محطة التمريض", "STATION_SUB": "{{n}} مريض · {{high}} محتاجين متابعة · {{due}} جرعة دلوقتي"},
 "MAR": {"given": "اتدّت", "held": "متأجلة", "refused": "رفض"},
 "ROUTE": {"oral": "بالفم", "iv": "وريد", "im": "عضل", "sc": "تحت الجلد", "inhaled": "استنشاق", "topical": "موضعي", "rectal": "شرجي", "sublingual": "تحت اللسان", "ng": "أنبوبة أنف", "other": "أخرى"},
 "FREQ": {"od": "مرة يومياً", "bid": "مرتين يومياً", "tid": "٣ مرات", "qid": "٤ مرات", "q4h": "كل ٤ ساعات", "q6h": "كل ٦ ساعات", "q8h": "كل ٨ ساعات", "q12h": "كل ١٢ ساعة", "hs": "قبل النوم", "stat": "فوراً (مرة)", "prn": "عند اللزوم"},
 "VITAL": {"temp": "الحرارة", "pulse": "النبض", "bp_sys": "الضغط الانقباضي", "bp_dia": "الانبساطي", "rr": "التنفس", "spo2": "الأكسجين %", "pain": "الألم (0-10)", "glucose": "السكر",
   "consciousness": "الوعي", "on_oxygen": "على أكسجين"},
 "AVPU": {"A": "واعي", "C": "تشوش جديد", "V": "يستجيب للصوت", "P": "يستجيب للألم", "U": "لا يستجيب"},
 "NOTE_KIND": {"note": "ملاحظة", "handover": "تسليم وردية", "incident": "حادثة"},
 "SHIFT": {"morning": "صباحي", "evening": "مسائي", "night": "ليلي"},
 "REP": {"TITLE": "تقارير المستشفى", "SUB": "الإشغال، مدة الإقامة، غرف العمليات، الروم سيرفس، الإيرادات، ومستحقات الدكاترة.", "P_today": "النهارده", "P_week": "آخر ٧ أيام", "P_month": "الشهر ده", "P_last": "الشهر اللي فات",
   "OCC": "الإشغال", "BED_NIGHTS": "{{n}} ليلة سرير من {{b}} سرير", "ALOS": "متوسط الإقامة", "DAYS": "يوم", "ADMITTED": "دخلوا", "DISCHARGED_N": "خرج {{n}}", "CASES": "عمليات", "CANCELLED_N": "{{n}} اتلغت / اتأجلت",
   "REVENUE": "الإيرادات", "BILLED": "اتحسب على الإقامات", "OCC_DAYS": "الإشغال يوم بيوم", "STAYS": "الإقامات", "IN_BED_NOW": "في السرير دلوقتي", "OR": "استخدام غرف العمليات",
   "TOP_OPS": "أكتر العمليات", "REV_GROUPS": "الإيرادات حسب النوع", "RS": "الروم سيرفس", "RS_ORDERS": "{{n}} طلب · {{d}} اتسلّم", "RS_AVG": "متوسط وقت التسليم", "DOCTORS": "مستحقات الدكاترة"},
}
F_EN = {
 "NURSE": {"TAB": "Nursing", "MAR": "Medication chart", "DUE_N": "{{n}} doses due", "MISSED_N": "{{n}} missed", "ON_TIME": "Meds on time", "NEW_ORDER": "Medication order", "DRUG": "Drug", "DOSE": "Dose",
   "ROUTE": "Route", "FREQ": "Frequency", "DAYS": "Days", "CHARGE": "Charge each dose", "PRN_GIVE": "Give as needed", "PRN_NOW": "now", "STOP": "Stop order", "STOPPED_T": "Stopped",
   "NO_ORDERS": "No medication", "NOTE_PH": "Note (optional)", "VITALS": "Vital signs", "TIME": "Time", "NO_VITALS": "No readings", "TREND": "Pulse (red) and SpO₂ (blue), latest readings",
   "NOTES": "Nursing notes", "NOTE_BODY": "Write the note…", "NO_NOTES": "No notes", "EQUIPMENT": "Equipment on the patient", "EQ_STOP": "Take off", "DAYS_N": "{{n}} days", "DAY": "day",
   "NO_EQ_CATALOG": "Add the equipment in hospital setup → equipment.", "RECORDED": "Recorded", "ORDERED": "Order recorded", "STOPPED": "Order stopped", "VITALS_OK": "Reading recorded",
   "NOTE_OK": "Note recorded", "EQ_ON": "Device on the patient", "EQ_OFF": "Device taken off", "STATION": "Nursing station", "STATION_SUB": "{{n}} patients · {{high}} need watching · {{due}} doses due"},
 "MAR": {"given": "Given", "held": "Held", "refused": "Refused"},
 "ROUTE": {"oral": "Oral", "iv": "IV", "im": "IM", "sc": "SC", "inhaled": "Inhaled", "topical": "Topical", "rectal": "Rectal", "sublingual": "Sublingual", "ng": "NG tube", "other": "Other"},
 "FREQ": {"od": "Once daily", "bid": "Twice daily", "tid": "3 times", "qid": "4 times", "q4h": "Every 4 h", "q6h": "Every 6 h", "q8h": "Every 8 h", "q12h": "Every 12 h", "hs": "At bedtime", "stat": "Now (once)", "prn": "As needed"},
 "VITAL": {"temp": "Temp", "pulse": "Pulse", "bp_sys": "BP systolic", "bp_dia": "Diastolic", "rr": "Resp. rate", "spo2": "SpO₂ %", "pain": "Pain (0-10)", "glucose": "Glucose", "consciousness": "Consciousness", "on_oxygen": "On oxygen"},
 "AVPU": {"A": "Alert", "C": "New confusion", "V": "Voice", "P": "Pain", "U": "Unresponsive"},
 "NOTE_KIND": {"note": "Note", "handover": "Handover", "incident": "Incident"},
 "SHIFT": {"morning": "Morning", "evening": "Evening", "night": "Night"},
 "REP": {"TITLE": "Hospital reports", "SUB": "Occupancy, length of stay, operating rooms, room service, revenue and doctors' dues.", "P_today": "Today", "P_week": "Last 7 days", "P_month": "This month", "P_last": "Last month",
   "OCC": "Occupancy", "BED_NIGHTS": "{{n}} bed-nights of {{b}} beds", "ALOS": "Average stay", "DAYS": "days", "ADMITTED": "Admitted", "DISCHARGED_N": "{{n}} discharged", "CASES": "Operations", "CANCELLED_N": "{{n}} cancelled / postponed",
   "REVENUE": "Revenue", "BILLED": "billed on the stays", "OCC_DAYS": "Occupancy by day", "STAYS": "Stays", "IN_BED_NOW": "In bed now", "OR": "Operating room use", "TOP_OPS": "Top operations",
   "REV_GROUPS": "Revenue by kind", "RS": "Room service", "RS_ORDERS": "{{n}} orders · {{d}} delivered", "RS_AVG": "Average delivery time", "DOCTORS": "Doctors' dues"},
}
F_SETUP_AR = {"T_EQ": "الأجهزة", "EQ_HINT": "أجهزة بتتحسب باليوم وهي على المريض (تنفس صناعي، مونيتور، مضخات…). العدد بيمنع إن الجهاز يتحط على مريضين أكتر من المتاح.",
  "EQ_LOAD": "تحميل الأجهزة الجاهزة", "EQ_NEW": "جهاز جديد", "EQ_UNITS": "{{n}} جهاز · {{u}} شغالين", "EQ_EMPTY": "لسه مفيش أجهزة", "EQ_PRICE": "سعر اليوم", "EQ_COUNT": "العدد المتاح",
  "EQ_LOADED": "اتضاف {{created}} جهاز ({{skipped}} موجودين)"}
F_SETUP_EN = {"T_EQ": "Equipment", "EQ_HINT": "Devices charged per day while on a patient (ventilator, monitor, pumps…). The count stops a device going on more patients than you have.",
  "EQ_LOAD": "Load the default equipment", "EQ_NEW": "New device", "EQ_UNITS": "{{n}} units · {{u}} in use", "EQ_EMPTY": "No equipment yet", "EQ_PRICE": "Price per day", "EQ_COUNT": "Units available",
  "EQ_LOADED": "Added {{created}} devices ({{skipped}} already there)"}
AR.update(F_AR); EN.update(F_EN)
AR["SETUP"].update(F_SETUP_AR); EN["SETUP"].update(F_SETUP_EN)
AR["FOLIO"].update({"equipment": "الأجهزة", "medications": "الأدوية"}); EN["FOLIO"].update({"equipment": "Equipment", "medications": "Medication"})
NAV['ar'].update({"HOSPITAL_NURSING": "محطة التمريض", "HOSPITAL_REPORTS": "تقارير المستشفى"}); NAV['en'].update({"HOSPITAL_NURSING": "Nursing station", "HOSPITAL_REPORTS": "Hospital reports"})

def apply(version):
    for lang, block in (('ar', AR), ('en', EN)):
        f = ROOT + f'assets/i18n/{lang}.json'
        d = json.load(open(f, encoding='utf-8'))
        d['HOSPITAL'] = block
        d.setdefault('NAV', {}).update(NAV[lang])
        # the clinic shift report's line for a hospital deposit
        d.setdefault('CLINIC_SHIFT_REPORT', {}).setdefault('TYPE', {})['hospital_deposit'] = 'تأمين إقامة' if lang == 'ar' else 'Hospital deposit'
        open(f, 'w', encoding='utf-8').write(json.dumps(d, ensure_ascii=False, indent=2) + '\n')
    c = ROOT + 'app/app.config.ts'
    s = open(c).read()
    s = re.sub(r"I18N_VERSION = '[^']+'", f"I18N_VERSION = '{version}'", s)
    open(c, 'w').write(s)
    print('i18n applied', version)

if __name__ == '__main__':
    apply(sys.argv[1])
