Merge branch 'dev' into feat/encounter-status-107

This commit is contained in:
Andrian Roshandy
2025-10-21 00:15:01 +07:00
324 changed files with 11741 additions and 3976 deletions

No files matched your search

+103 -5
View File
@@ -95,6 +95,7 @@ export const religionCodes: Record<string, string> = {
hindu: 'Hindu',
buda: 'Buda',
konghucu: 'Konghucu',
other: 'Kepercayaan Lain',
}
export const educationCodes: Record<string, string> = {
@@ -112,13 +113,91 @@ export const educationCodes: Record<string, string> = {
}
export const occupationCodes: Record<string, string> = {
'tidak-bekerja': 'Tidak Bekerja',
unknown: 'Tidak diketahui',
tidak_bekerja: 'Belum/Tidak Bekerja',
mengurus_rumah_tangga: 'Mengurus Rumah Tangga',
pelajar: 'Pelajar/Mahasiswa',
pensiunan: 'Pensiunan',
pns: 'Pegawai Negeri Sipil',
polisi: 'Polisi',
tni: 'TNI',
tni: 'Tentara Nasional Indonesia',
polri: 'Kepolisian RI',
perdagangan: 'Perdagangan',
petani: 'Petani/Pekebun',
peternak: 'Peternak',
nelayan: 'Nelayan/Perikanan',
industri: 'Industri',
konstruksi: 'Konstruksi',
transportasi: 'Transportasi',
karyawan_swasta: 'Karyawan Swasta',
karyawan_bumn: 'Karyawan BUMN',
karyawan_bumd: 'Karyawan BUMD',
karyawan_honorer: 'Karyawan Honorer',
buruh_harian: 'Buruh Harian Lepas',
buruh_tani: 'Buruh Tani/Perkebunan',
buruh_nelayan: 'Buruh Nelayan/Perikanan',
buruh_peternakan: 'Buruh Peternakan',
pembantu_rumah_tangga: 'Pembantu Rumah Tangga',
tukang_cukur: 'Tukang Cukur',
tukang_listrik: 'Tukang Listrik',
tukang_batu: 'Tukang Batu',
tukang_kayu: 'Tukang Kayu',
tukang_sol_sepatu: 'Tukang Sol Sepatu',
tukang_jahit: 'Tukang Jahit',
tukang_gigi: 'Tukang Gigi',
penata_rias: 'Penata Rias',
penata_busana: 'Penata Busana',
penata_rambut: 'Penata Rambut',
mekanik: 'Mekanik',
seniman: 'Seniman',
tabib: 'Tabib',
paraji: 'Paraji',
perancang_busana: 'Perancang Busana',
penterjemah: 'Penterjemah',
imam_mesjid: 'Imam Mesjid',
pendeta: 'Pendeta',
pastor: 'Pastor',
wartawan: 'Wartawan',
ustadz: 'Ustadz/Mubaligh',
juru_masak: 'Juru Masak',
promotor: 'Promotor Acara',
dpr_ri: 'Anggota DPR-RI',
dpd: 'Anggota DPD',
bpk: 'Anggota BPK',
presiden: 'Presiden',
wakil_presiden: 'Wakil Presiden',
mk: 'Anggota Mahkamah Konstitusi',
kabinet: 'Anggota Kabinet/Kementrian',
dubes: 'Duta Besar',
gubernur: 'Gubernur',
wakil_gubernur: 'Wakil Gubernur',
bupati: 'Bupati',
wakil_bupati: 'Wakil Bupati',
walikota: 'Walikota',
wakil_walikota: 'Wakil Walikota',
dprd_provinsi: 'Anggota DPRD Provinsi',
dprd_kabkota: 'Anggota DPRD Kabupaten/Kota',
dosen: 'Dosen',
guru: 'Guru',
pilot: 'Pilot',
pengacara: 'Pengacara',
arsitek: 'Arsitek',
akuntan: 'Akuntan',
konsultan: 'Konsultan',
dokter: 'Dokter',
bidan: 'Bidan',
apoteker: 'Apoteker',
psikolog: 'Psikiater/Psikolog',
penyiar_tv: 'Penyiar Televisi',
penyiar_radio: 'Penyiar Radio',
pelaut: 'Pelaut',
sopir: 'Sopir',
pialang: 'Pialang',
paranormal: 'Paranormal',
pedagang: 'Pedagang',
perangkat_desa: 'Perangkat Desa',
kepala_desa: 'Kepala Desa',
biarawati: 'Biarawati',
wiraswasta: 'Wiraswasta',
'kary-swasta': 'Karyawan Swasta',
lainnya: 'Lainnya',
}
@@ -258,7 +337,10 @@ export const uploadCode: Record<string, string> = {
kk: 'person-family-card',
paspor: 'person-passport',
'mcu-report': 'mcu-item-result',
}
} as const
export type UploadCodeKey = keyof typeof uploadCode
export type UploadCodeValue = (typeof uploadCode)[UploadCodeKey]
export const infraGroupCodes: Record<string, string> = {
building: 'Bangunan',
@@ -278,3 +360,19 @@ export const infraGroupCodesKeys: Record<string, string> = Object.keys(infraGrou
},
{} as Record<string, string>,
)
export const addressLocationTypeCode: Record<string, string> = {
identity: 'Alamat KTP',
domicile: 'Alamat Domisili',
}
export type AddressLocationTypeCode = keyof typeof addressLocationTypeCode
export const medicalActionTypeCode: Record<string, string> = {
chemo: 'Chemo',
hemo: 'Hemo',
thalasemia: 'Thalasemia',
echocardio: 'Echocardiography',
spirometry: 'Spirometry',
} as const
export type medicalActionTypeCodeKey = keyof typeof medicalActionTypeCode
+44
View File
@@ -0,0 +1,44 @@
export function getAge(dateString: string, comparedDate?: string): { idFormat: string; extFormat: string } {
const birthDate = new Date(dateString);
const today = new Date();
if (comparedDate) {
const comparedDateObj = new Date(comparedDate);
today.setFullYear(comparedDateObj.getFullYear());
today.setMonth(comparedDateObj.getMonth());
today.setDate(comparedDateObj.getDate());
}
// Format the date part
const options: Intl.DateTimeFormatOptions = { day: 'numeric', month: 'long', year: 'numeric' };
const idFormat = birthDate.toLocaleDateString('id-ID', options);
// Calculate age
let years = today.getFullYear() - birthDate.getFullYear();
let months = today.getMonth() - birthDate.getMonth();
let days = today.getDate() - birthDate.getDate();
if (months < 0 || (months === 0 && days < 0)) {
years--;
months += 12;
}
if (days < 0) {
const prevMonth = new Date(today.getFullYear(), today.getMonth() - 1, 0);
days += prevMonth.getDate();
months--;
}
// Format the age part
let extFormat = '';
if ([years, months, days].filter(Boolean).join(' ')) {
extFormat = `${years} Tahun ${months} Bulan ${days} Hari`;
} else {
extFormat = '0';
}
return {
idFormat,
extFormat
};
}
+10
View File
@@ -27,6 +27,16 @@ export function mapToComboboxOptList(items: Record<string, string>): SelectOptio
return result
}
/**
* Mengkonversi string menjadi title case (huruf pertama setiap kata kapital)
* @param str - String yang akan dikonversi
* @returns String dalam format title case
*/
export function toTitleCase(str: string): string {
return str.toLowerCase().replace(/\b\w/g, (char) => char.toUpperCase())
}
/**
* Menghitung umur berdasarkan tanggal lahir
* @param birthDate - Tanggal lahir dalam format Date atau string