This commit is contained in:
2026-04-29 16:28:01 +07:00
parent d93e846213
commit 4a85c9e0a6
9 changed files with 464 additions and 6 deletions

View File

@ -0,0 +1,45 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn } from "typeorm";
import { EmrEmergencyTransfer } from "./emr_emergency_transfers";
@Entity("emr_emergency_transfer_attached_devices", { schema: "emr" })
export class EmrEmergencyTransferAttachedDevice {
@PrimaryGeneratedColumn("uuid")
id: string;
@ManyToOne(() => EmrEmergencyTransfer, (transfer) => transfer.diagnostics, { onDelete: "NO ACTION" })
@JoinColumn()
emergency_transfer: EmrEmergencyTransfer;
@Column({ nullable: true, type: "text" })
device_type: string;
@Column({ nullable: true, type: "text" })
location: string;
@Column({ nullable: true, type: "text" })
size: string;
@Column({ nullable: true, type: "text" })
note: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true, length: 256 })
created_by: string;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true, length: 256 })
updated_by: string;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ nullable: true, length: 256 })
deleted_by: string;
}

View File

@ -0,0 +1,41 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn } from "typeorm";
import { EmrEmergencyTransfer } from "./emr_emergency_transfers";
@Entity("emr_emergency_transfer_clinical_interventions", { schema: "emr" })
export class EmrEmergencyTransferClinicalIntervention {
@PrimaryGeneratedColumn("uuid")
id: string;
@ManyToOne(() => EmrEmergencyTransfer, (transfer) => transfer.clinical_interventions, {
onDelete: "NO ACTION",
})
@JoinColumn({})
emergency_transfer: EmrEmergencyTransfer;
@Column({ nullable: true, type: "varchar", length: 128 })
intervention_category: string;
@Column({ nullable: true, type: "text" })
notes: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true, length: 256 })
created_by: string;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true, length: 256 })
updated_by: string;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ nullable: true, length: 256 })
deleted_by: string;
}

View File

@ -0,0 +1,39 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn } from "typeorm";
import { EmrEmergencyTransfer } from "./emr_emergency_transfers";
@Entity("emr_emergency_transfer_diagnostics", { schema: "emr" })
export class EmrEmergencyTransferDiagnostic {
@PrimaryGeneratedColumn("uuid")
id: string;
@ManyToOne(() => EmrEmergencyTransfer, (transfer) => transfer.diagnostics, { onDelete: "NO ACTION" })
@JoinColumn()
emergency_transfer: EmrEmergencyTransfer;
@Column({ nullable: true, type: "text" })
test_name: string;
@Column({ nullable: true, type: "text" })
result: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true, length: 256 })
created_by: string;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true, length: 256 })
updated_by: string;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ nullable: true, length: 256 })
deleted_by: string;
}

View File

@ -0,0 +1,51 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn } from "typeorm";
import { EmrEmergencyTransfer } from "./emr_emergency_transfers";
@Entity("emr_emergency_transfer_medications", { schema: "emr" })
export class EmrEmergencyTransferMedication {
@PrimaryGeneratedColumn("uuid")
id: string;
@ManyToOne(() => EmrEmergencyTransfer, (transfer) => transfer.medications, { onDelete: "NO ACTION" })
@JoinColumn()
emergency_transfer: EmrEmergencyTransfer;
@Column({ nullable: true, type: "text" })
medicine_type: string;
@Column({ nullable: true, type: "text" })
medicine_name: string;
@Column({ nullable: true, type: "text" })
dosage: string;
@Column({ nullable: true, type: "text" })
medicine_frequency: string;
@Column({ nullable: true, type: "text" })
medicine_route: string;
@Column({ nullable: true, type: "text" })
remaining_medicine: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true, length: 256 })
created_by: string;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true, length: 256 })
updated_by: string;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ nullable: true, length: 256 })
deleted_by: string;
}

View File

@ -0,0 +1,85 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn } from "typeorm";
import { EmrEmergencyTransfer } from "./emr_emergency_transfers";
@Entity("emr_emergency_transfer_patient_conditions", { schema: "emr" })
export class EmrEmergencyTransferPatientCondition {
// Primary key data kondisi pasien saat pindah
@PrimaryGeneratedColumn("uuid")
id: string;
// Relasi ke data transfer antar unit
@ManyToOne(() => EmrEmergencyTransfer, { onDelete: "NO ACTION" })
@JoinColumn()
emergency_transfer: EmrEmergencyTransfer;
// KU pasien saat pindah
@Column({ nullable: true, type: "text" })
general_condition: string;
// Kesadaran pasien saat pindah
@Column({ nullable: true, type: "text" })
consciousness: string;
// Nilai GCS E
@Column({ nullable: true, type: "int" })
gcs_eye: number;
// Nilai GCS M
@Column({ nullable: true, type: "int" })
gcs_motor: number;
// Nilai GCS V
@Column({ nullable: true, type: "int" })
gcs_verbal: number;
// Total nilai GCS
@Column({ nullable: true, type: "int" })
gcs_total: number;
// Saturasi oksigen / SaO2
@Column({ nullable: true, type: "text" })
oxygen_saturation: string;
// Tekanan darah
@Column({ nullable: true, type: "text" })
blood_pressure: string;
// Suhu tubuh
@Column({ nullable: true, type: "text" })
temperature: string;
// Nadi
@Column({ nullable: true, type: "text" })
pulse: string;
// Respiratory rate / RR
@Column({ nullable: true, type: "text" })
respiratory_rate: string;
// Waktu data dibuat
@Column()
@CreateDateColumn()
created_at: Date;
// User pembuat data
@Column({ nullable: true, length: 256 })
created_by: string;
// Waktu data terakhir diubah
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
// User pengubah terakhir
@Column({ nullable: true, length: 256 })
updated_by: string;
// Waktu soft delete
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
// User yang melakukan soft delete
@Column({ nullable: true, length: 256 })
deleted_by: string;
}

View File

@ -0,0 +1,173 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn, OneToMany } from "typeorm";
import { Room } from "../room";
import { EmrBoardingRoom } from "./emr_boarding_rooms";
import { EmrEmergencyTransferMedication } from "./emr_emergency_transfer_medications";
import { EmrEmergencyTransferDiagnostic } from "./emr_emergency_transfer_diagnostics";
import { EmrEmergencyTransferClinicalIntervention } from "./emr_emergency_transfer_clinical_interventions";
import { EmrEmergencyTransferPatientCondition } from "./emr_emergency_transfer_patient_conditions";
import { User } from "../users";
import { EmrDiagnosis } from "./emr_diagnosis";
import { TransferMethodType, TransferRiskType } from "../../types/emr";
import { EmrEmergencyTransferAttachedDevice } from "./emr_emergency_transfer_attached_devices";
@Entity("emr_emergency_transfers", { schema: "emr" })
export class EmrEmergencyTransfer {
// Primary key data transfer antar unit
@PrimaryGeneratedColumn("uuid")
id: string;
// Asal ruang rawat
@ManyToOne(() => Room, { onDelete: "NO ACTION" })
@JoinColumn()
origin_room: Room;
// Ruang rawat selanjutnya (tujuan pindah)
@ManyToOne(() => EmrBoardingRoom, { onDelete: "NO ACTION" })
@JoinColumn()
destination_room: EmrBoardingRoom;
// Tanggal masuk / jam
@Column({ type: "timestamp", nullable: true })
admission_datetime: Date;
// Tanggal pindah / jam
@Column({ type: "timestamp", nullable: true })
transfer_datetime: Date;
// Indikasi masuk
@Column({ nullable: true, type: "text" })
admission_indication: string;
// DPJP utama
@ManyToOne(() => User, { onDelete: "NO ACTION" })
@JoinColumn()
primary_attending_physician: User;
// DPJP tambahan (rawat bersama)
@Column({ nullable: true, type: "text", array: true })
additional_attending_physicians: string[];
// Diagnosis utama
@ManyToOne(() => EmrDiagnosis, { onDelete: "NO ACTION" })
@JoinColumn()
primary_diagnosis: EmrDiagnosis;
// Diagnosis sekunder
@Column({ nullable: true, type: "text", array: true })
secondary_diagnoses: string[];
// Alasan pemindahan: kondisi memburuk / tidak stabil
@Column({ nullable: true, type: "boolean", default: false })
transfer_reason_condition_worsening: boolean;
// Alasan pemindahan: butuh tenaga ahli / tenaga kurang
@Column({ nullable: true, type: "boolean", default: false })
transfer_reason_staff_needed: boolean;
// Alasan pemindahan: fasilitas / peralatan lebih baik
@Column({ nullable: true, type: "boolean", default: false })
transfer_reason_facility_needed: boolean;
// Alasan pemindahan: pemeriksaan penunjang
@Column({ nullable: true, type: "boolean", default: false })
transfer_reason_supporting_exam: boolean;
// Alasan pemindahan: lain-lain (checkbox)
@Column({ nullable: true, type: "boolean", default: false })
transfer_reason_other: boolean;
// Alasan pemindahan: keterangan lain-lain
@Column({ nullable: true, type: "text" })
transfer_reason_other_text: string;
// Riwayat kesehatan
@Column({ nullable: true, type: "text" })
medical_history: string;
// Metode pemindahan pasien
@Column({ nullable: true, default: "stretcher" })
transfer_method: TransferMethodType;
// Risiko selama transfer
@Column({ nullable: true })
transfer_risk: TransferRiskType;
// Risiko selama transfer: keterangan lain-lain
@Column({ nullable: true, type: "text" })
transfer_risk_other_text: string;
// Risiko jatuh
@Column({ nullable: true, type: "text" })
fall_risk: string;
// Nyeri
@Column({ nullable: true, type: "text" })
pain: string;
// Persetujuan pasien/keluarga (ya/tidak)
@Column({ nullable: true, type: "boolean", default: false })
transfer_consent: boolean;
// Nama pemberi persetujuan (jika keluarga)
@Column({ nullable: true, type: "text" })
consenter_name: string;
// Hubungan pemberi persetujuan dengan pasien
@Column({ nullable: true, type: "text" })
consenter_relationship: string;
// Kategori transfer pasien (0/1/2/3)
@Column({ nullable: true, type: "text" })
category_patient: string;
// TTD pasien / keluarga (path/base64 sesuai implementasi)
@Column({ nullable: true, type: "text" })
patient_or_family_signature: string;
// TTD petugas pendamping
@Column({ nullable: true, type: "text" })
staff_signature: string;
// Turunan data prosedur yang dilakukan
@Column({ nullable: true, type: "text" })
procedure: string;
// Turunan data pemeriksaan diagnostik
@OneToMany(() => EmrEmergencyTransferDiagnostic, (row) => row.emergency_transfer, { onDelete: "NO ACTION" })
diagnostics: EmrEmergencyTransferDiagnostic[];
// Turunan data obat yang diberikan saat transfer
@OneToMany(() => EmrEmergencyTransferMedication, (row) => row.emergency_transfer, { onDelete: "NO ACTION" })
medications: EmrEmergencyTransferMedication[];
// Turunan data alat yang terpasang di pasien
@OneToMany(() => EmrEmergencyTransferAttachedDevice, (row) => row.emergency_transfer, { onDelete: "NO ACTION" })
attached_devices: EmrEmergencyTransferAttachedDevice;
// Turunan data tindakan klinis (infus, oksigen, dll)
@OneToMany(() => EmrEmergencyTransferClinicalIntervention, (row) => row.emergency_transfer, {
onDelete: "NO ACTION",
})
clinical_interventions: EmrEmergencyTransferClinicalIntervention[];
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true, length: 256 })
created_by: string;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true, length: 256 })
updated_by: string;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ nullable: true, length: 256 })
deleted_by: string;
}

View File

@ -1,5 +1,6 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn } from "typeorm";
import { InpatientRoomBed } from "./inpatient_room_beds";
import { Room } from "./room";
@Entity("inpatient_room_bed_details")
export class InpatientRoomBedDetail {
@ -13,15 +14,17 @@ export class InpatientRoomBedDetail {
@Column({ type: "timestamp", nullable: true })
admission_datetime: Date;
@ManyToOne(() => Room, { onDelete: "NO ACTION" })
@JoinColumn()
origin_room: Room;
@ManyToOne(() => Room, { onDelete: "NO ACTION" })
@JoinColumn()
destination_room: Room;
@Column({ type: "timestamp", nullable: true })
transfer_datetime: Date;
@Column({ nullable: true, type: "text" })
origin_care_unit: string;
@Column({ nullable: true, type: "text" })
destination_care_unit: string;
@Column({ nullable: true, type: "text" })
admission_indication: string;

View File

@ -27,6 +27,13 @@ export * from "../entity/emr/emr_pharmacy_order";
export * from "../entity/emr/emr_pharmacy_order_activity";
export * from "../entity/emr/emr_registration_emergency_responsible";
export * from "../entity/emr/emr_discharge_status_emergency";
export * from "../entity/emr/emr_emergency_transfers";
export * from "../entity/emr/emr_emergency_transfer_medications";
export * from "../entity/emr/emr_emergency_transfer_attached_devices";
export * from "../entity/emr/emr_emergency_transfer_diagnostics";
export * from "../entity/emr/emr_emergency_transfer_clinical_interventions";
export * from "../entity/emr/emr_emergency_transfer_patient_conditions";
export * from "../entity/emr/emr_emergency_transfer_procedures";
export * from "../entity/emr/emr_physical_examination_emergency";
export * from "../entity/emr/emr_doctor_order_emergency";
export * from "../entity/emr/emr_atenatal_care";

14
src/types/emr.ts Normal file
View File

@ -0,0 +1,14 @@
export enum TransferMethodType {
"Wheelchair" = "wheelchair",
"Stretcher" = "stretcher",
"Bed" = "bed",
}
export enum TransferRiskType {
"RespiratoryArrest" = "respiratory_arrest",
"CardiacArrest" = "cardiac_arrest",
"Vomiting" = "vomiting",
"Bleeding" = "bleeding",
"Seizure" = "seizure",
"Other" = "other",
}