fix: finish all patient related upgrades

This commit is contained in:
voltsrage
2026-06-23 18:17:13 +08:00
parent 7751d6df06
commit 5d46200941
20 changed files with 985 additions and 19 deletions
@@ -0,0 +1,90 @@
const BLOOD_TYPE_LABELS = {
APositive: 'A+',
ANegative: 'A-',
BPositive: 'B+',
BNegative: 'B-',
AbPositive: 'AB+',
AbNegative: 'AB-',
OPositive: 'O+',
ONegative: 'O-',
'A+': 'A+',
'A-': 'A-',
'B+': 'B+',
'B-': 'B-',
'AB+': 'AB+',
'AB-': 'AB-',
'O+': 'O+',
'O-': 'O-',
}
const DEPARTMENT_LABELS = {
Icu: 'ICU',
GeneralMedicine: 'General Medicine',
Emergency: 'Emergency',
Cardiology: 'Cardiology',
Surgery: 'Surgery',
Pediatrics: 'Pediatrics',
ICU: 'ICU',
GENERAL_MEDICINE: 'General Medicine',
EMERGENCY: 'Emergency',
CARDIOLOGY: 'Cardiology',
SURGERY: 'Surgery',
PEDIATRICS: 'Pediatrics',
}
const GENDER_LABELS = {
M: 'Male',
F: 'Female',
O: 'Other',
U: 'Unknown',
}
export function formatBloodType(value) {
if (value == null || value === '') return '—'
return BLOOD_TYPE_LABELS[value] ?? String(value)
}
export function formatDepartment(value) {
if (value == null || value === '') return '—'
return DEPARTMENT_LABELS[value] ?? String(value).replace(/_/g, ' ')
}
export function formatGender(value) {
if (value == null || value === '') return '—'
return GENDER_LABELS[value] ?? value
}
export function computeAge(dateOfBirth, asOf = new Date()) {
if (!dateOfBirth) return null
const dob = new Date(dateOfBirth)
if (Number.isNaN(dob.getTime())) return null
let age = asOf.getFullYear() - dob.getFullYear()
const monthDelta = asOf.getMonth() - dob.getMonth()
if (monthDelta < 0 || (monthDelta === 0 && asOf.getDate() < dob.getDate())) {
age -= 1
}
return age
}
export function formatDateOfBirth(dateOfBirth) {
if (!dateOfBirth) return '—'
const d = new Date(dateOfBirth)
if (Number.isNaN(d.getTime())) return dateOfBirth
return d.toLocaleDateString([], { year: 'numeric', month: 'short', day: 'numeric' })
}
export function formatDobWithAge(dateOfBirth) {
const formatted = formatDateOfBirth(dateOfBirth)
const age = computeAge(dateOfBirth)
if (age == null) return formatted
return `${formatted} (${age}y)`
}
export function hasKnownAllergies(allergies) {
return Boolean(allergies?.trim())
}
export function formatAllergiesDisplay(allergies) {
return hasKnownAllergies(allergies) ? allergies.trim() : 'NKDA'
}