Compare commits

...

10 Commits

18 changed files with 623 additions and 1 deletions

View File

@ -7,6 +7,13 @@ export class Department {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({
nullable: true,
length: 64,
unique: true,
})
code: string;
@Column({
nullable: false,
length: 128,

View File

@ -0,0 +1,80 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
ManyToOne,
JoinColumn,
} from "typeorm";
import { EmrPatient } from "./emr_patient";
import { EmrRegistrationOutpatient } from "./emr_registration_outpatient";
export enum HemodialysisPlanStatus {
DRAFT = "draft",
ACTIVE = "active",
}
@Entity("emr_hemodialysis_plans", { schema: "emr" })
export class HemodialysisPlan {
@PrimaryGeneratedColumn("uuid")
id: string;
@ManyToOne(() => EmrPatient, { onDelete: "NO ACTION", nullable: false })
@JoinColumn({ name: "patient_id" })
patient: EmrPatient;
@ManyToOne(() => EmrRegistrationOutpatient, { onDelete: "SET NULL", nullable: true })
@JoinColumn({ name: "opd_visit_id" })
opd_visit: EmrRegistrationOutpatient | null;
@Column({ type: "smallint", nullable: false })
sessions_per_week: number;
@Column({ type: "decimal", precision: 5, scale: 2, nullable: false })
duration_hours: number;
@Column({ type: "decimal", precision: 6, scale: 2, nullable: true })
dry_weight: number | null;
@Column({ type: "int", nullable: true })
blood_flow_rate_qb: number | null;
@Column({ type: "int", nullable: true })
dialysate_flow_rate_qd: number | null;
@Column({ type: "varchar", length: 256, nullable: true })
dialyzer_type: string | null;
@Column({ type: "varchar", length: 256, nullable: true })
anticoagulant_dose: string | null;
@Column({
type: "enum",
enum: HemodialysisPlanStatus,
default: HemodialysisPlanStatus.DRAFT,
})
status: HemodialysisPlanStatus;
@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,62 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
ManyToOne,
JoinColumn,
} from "typeorm";
import { EmrPatient } from "./emr_patient";
import { HemodialysisPlan } from "./emr_hemodialysis_plan";
export enum HemodialysisScheduleStatus {
SCHEDULED = "SCHEDULED",
CHECKED_IN = "CHECKED_IN",
COMPLETED = "COMPLETED",
CANCELLED = "CANCELLED",
}
@Entity("emr_hemodialysis_schedules", { schema: "emr" })
export class HemodialysisSchedule {
@PrimaryGeneratedColumn("uuid")
id: string;
@ManyToOne(() => HemodialysisPlan, { onDelete: "NO ACTION", nullable: false })
@JoinColumn({ name: "plan_id" })
plan: HemodialysisPlan;
@ManyToOne(() => EmrPatient, { onDelete: "NO ACTION", nullable: false })
@JoinColumn({ name: "patient_id" })
patient: EmrPatient;
@Column({ type: "date", nullable: false })
scheduled_date: string;
/** ISO weekday: 1 = Monday … 7 = Sunday (recurring weekly slot) */
@Column({ type: "smallint", nullable: true })
day_of_week: number | null;
@Column({
type: "enum",
enum: HemodialysisScheduleStatus,
default: HemodialysisScheduleStatus.SCHEDULED,
})
status: HemodialysisScheduleStatus;
@Column({ nullable: true, length: 256 })
assigned_by: string | null;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -0,0 +1,37 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from "typeorm";
@Entity("emr_hemodialysis_settings", { schema: "emr" })
export class HemodialysisSettings {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({ type: "int", nullable: false })
daily_quota_limit: number;
@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,77 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
ManyToOne,
JoinColumn,
} from "typeorm";
import { EmrPatient } from "./emr_patient";
import { EmrRegistration } from "./emr_registration";
import { HemodialysisSchedule } from "./emr_hemodialysis_schedule";
export enum HemodialysisVisitStatus {
WAITING_NURSING = "WAITING_NURSING",
IN_PROGRESS = "IN_PROGRESS",
COMPLETED = "COMPLETED",
}
export enum HemodialysisCheckinMethod {
SCAN = "SCAN",
MANUAL = "MANUAL",
}
@Entity("emr_hemodialysis_visits", { schema: "emr" })
export class HemodialysisVisit {
@PrimaryGeneratedColumn("uuid")
id: string;
@ManyToOne(() => HemodialysisSchedule, { onDelete: "NO ACTION", nullable: false })
@JoinColumn({ name: "schedule_id" })
schedule: HemodialysisSchedule;
@ManyToOne(() => EmrPatient, { onDelete: "NO ACTION", nullable: false })
@JoinColumn({ name: "patient_id" })
patient: EmrPatient;
@ManyToOne(() => EmrRegistration, { onDelete: "NO ACTION", nullable: true })
@JoinColumn({ name: "registration_id" })
registration: EmrRegistration | null;
@Column({ type: "date", nullable: false })
visit_date: string;
@Column({ type: "timestamptz", nullable: true })
checkin_time: Date | null;
@Column({ type: "timestamptz", nullable: true })
checkout_time: Date | null;
@Column({
type: "enum",
enum: HemodialysisVisitStatus,
default: HemodialysisVisitStatus.WAITING_NURSING,
})
status: HemodialysisVisitStatus;
@Column({
type: "enum",
enum: HemodialysisCheckinMethod,
nullable: true,
})
checkin_method: HemodialysisCheckinMethod | null;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -0,0 +1,57 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
OneToOne,
JoinColumn,
} from "typeorm";
import { HemodialysisVisit } from "./emr_hemodialysis_visit";
export enum HemodialysisVisitDetailStatus {
DRAFT = "DRAFT",
IN_PROGRESS = "IN_PROGRESS",
COMPLETED = "COMPLETED",
}
@Entity("emr_hemodialysis_visit_details", { schema: "emr" })
export class HemodialysisVisitDetail {
@PrimaryGeneratedColumn("uuid")
id: string;
@OneToOne(() => HemodialysisVisit, { onDelete: "CASCADE", nullable: false })
@JoinColumn({ name: "visit_id" })
visit: HemodialysisVisit;
@Column({ type: "jsonb", nullable: true })
nursing_form: Record<string, unknown> | null;
@Column({ type: "jsonb", nullable: true })
assessment_form: Record<string, unknown> | null;
@Column({ type: "jsonb", nullable: true })
monitoring_form: Record<string, unknown> | null;
@Column({
type: "enum",
enum: HemodialysisVisitDetailStatus,
default: HemodialysisVisitDetailStatus.DRAFT,
})
status: HemodialysisVisitDetailStatus;
@Column({ nullable: true, length: 256 })
completed_by: string | null;
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -77,6 +77,9 @@ export class EmrRegistration {
@JoinColumn({ name: "referral_hospital_id" })
referral_hospital: RefferalHospital;
@Column({ nullable: false, type: "boolean", default: false })
is_referral_emergency: boolean;
@Column({ nullable: true, type: "text" })
patient_category: string;

View File

@ -86,6 +86,9 @@ export class EmrRegistrationOutpatient {
@Column({ nullable: true })
queued_at?: Date;
@Column({ nullable: false, type: 'boolean', default: false })
is_mrn_label_printed?: boolean;
@Column()
@CreateDateColumn()
created_at: Date;

View File

@ -0,0 +1,60 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
Index,
} from "typeorm";
import { OpdReportGrain } from "../../types/opd_report_grain";
export enum EmergencyCaseCategory {
SUICIDE = "suicide",
HOMICIDE = "homicide",
}
@Entity({ schema: "reporting", name: "emergency_case_category_fact" })
@Index(["grain", "period_start", "period_end", "case_category"], {
unique: true,
})
export class EmergencyCaseCategoryFact {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({
type: "enum",
enum: OpdReportGrain,
nullable: false,
})
grain: OpdReportGrain;
@Column({ type: "date", nullable: false })
period_start: string;
@Column({ type: "date", nullable: false })
period_end: string;
@Column({
type: "enum",
enum: EmergencyCaseCategory,
nullable: false,
})
case_category: EmergencyCaseCategory;
@Column({ type: "int", nullable: false, default: 0 })
male_cases: number;
@Column({ type: "int", nullable: false, default: 0 })
female_cases: number;
@Column({ type: "int", nullable: false, default: 0 })
total_cases: number;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -0,0 +1,63 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
Index,
} from "typeorm";
import { OpdReportGrain } from "../../types/opd_report_grain";
@Entity({ schema: "reporting", name: "emergency_consultation_type_fact" })
@Index(["grain", "period_start", "period_end", "consultation_type"], {
unique: true,
})
export class EmergencyConsultationTypeFact {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({
type: "enum",
enum: OpdReportGrain,
nullable: false,
})
grain: OpdReportGrain;
@Column({ type: "date", nullable: false })
period_start: string;
@Column({ type: "date", nullable: false })
period_end: string;
@Column({ nullable: false, length: 256 })
consultation_type: string;
@Column({ type: "int", nullable: false, default: 0 })
observation: number;
@Column({ type: "int", nullable: false, default: 0 })
admitted: number;
@Column({ type: "int", nullable: false, default: 0 })
discharged: number;
@Column({ type: "int", nullable: false, default: 0 })
dead: number;
@Column({ type: "int", nullable: false, default: 0 })
dba: number;
@Column({ type: "int", nullable: false, default: 0 })
total_patients: number;
@Column({ type: "int", nullable: false, default: 0 })
rank: number;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -0,0 +1,48 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
Index,
} from "typeorm";
import { OpdReportGrain } from "../../types/opd_report_grain";
@Entity({ schema: "reporting", name: "emergency_domestic_violence_fact" })
@Index(["grain", "period_start", "period_end", "violence_type"], {
unique: true,
})
export class EmergencyDomesticViolenceFact {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({
type: "enum",
enum: OpdReportGrain,
nullable: false,
})
grain: OpdReportGrain;
@Column({ type: "date", nullable: false })
period_start: string;
@Column({ type: "date", nullable: false })
period_end: string;
@Column({ nullable: false, length: 256 })
violence_type: string;
@Column({ type: "int", nullable: false, default: 0 })
total_cases: number;
@Column({ type: "int", nullable: false, default: 0 })
rank: number;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -0,0 +1,54 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
Index,
} from "typeorm";
import { OpdReportGrain } from "../../types/opd_report_grain";
@Entity({ schema: "reporting", name: "emergency_drowning_intoxication_fact" })
@Index(["grain", "period_start", "period_end", "case_type"], {
unique: true,
})
export class EmergencyDrowningIntoxicationFact {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({
type: "enum",
enum: OpdReportGrain,
nullable: false,
})
grain: OpdReportGrain;
@Column({ type: "date", nullable: false })
period_start: string;
@Column({ type: "date", nullable: false })
period_end: string;
@Column({ nullable: false, length: 256 })
case_type: string;
@Column({ type: "int", nullable: false, default: 0 })
male_cases: number;
@Column({ type: "int", nullable: false, default: 0 })
female_cases: number;
@Column({ type: "int", nullable: false, default: 0 })
total_cases: number;
@Column({ type: "int", nullable: false, default: 0 })
rank: number;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -0,0 +1,54 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
Index,
} from "typeorm";
import { OpdReportGrain } from "../../types/opd_report_grain";
@Entity({ schema: "reporting", name: "emergency_traffic_accident_fact" })
@Index(["grain", "period_start", "period_end", "accident_type"], {
unique: true,
})
export class EmergencyTrafficAccidentFact {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({
type: "enum",
enum: OpdReportGrain,
nullable: false,
})
grain: OpdReportGrain;
@Column({ type: "date", nullable: false })
period_start: string;
@Column({ type: "date", nullable: false })
period_end: string;
@Column({ nullable: false, length: 256 })
accident_type: string;
@Column({ type: "int", nullable: false, default: 0 })
total_cases: number;
@Column({ type: "int", nullable: true })
male_cases: number | null;
@Column({ type: "int", nullable: true })
female_cases: number | null;
@Column({ type: "int", nullable: false, default: 0 })
rank: number;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -43,6 +43,9 @@ export class OpdDiagnosisFact {
@Column({ nullable: true, length: 32 })
icd_code: string | null;
@Column({ type: "uuid", nullable: true })
diagnosis_id: string | null;
@Column({ nullable: false, length: 512 })
diagnosis_name: string;

View File

@ -44,7 +44,10 @@ export class OpdReferralFact {
centro_saude_referral: number;
@Column({ type: "int", nullable: false, default: 0 })
internal_referral: number;
private_clinic_referral: number;
@Column({ type: "int", nullable: false, default: 0 })
private_doctor_referral: number;
@Column({ type: "int", nullable: false, default: 0 })
no_referral: number;

View File

@ -4,6 +4,11 @@ export * from "../entity/emr/emr_registration_outpatient";
export * from "../entity/emr/emr_registration_inpatient";
export * from "../entity/emr/emr_registration_emergency";
export * from "../entity/emr/emr_registration_hemodialysis";
export * from "../entity/emr/emr_hemodialysis_settings";
export * from "../entity/emr/emr_hemodialysis_plan";
export * from "../entity/emr/emr_hemodialysis_schedule";
export * from "../entity/emr/emr_hemodialysis_visit";
export * from "../entity/emr/emr_hemodialysis_visit_detail";
export * from "../entity/emr/emr_anamnesis";
export * from "../entity/emr/emr_vital_signs";
export * from "../entity/emr/emr_physical_examination";

View File

@ -9,3 +9,8 @@ export * from "../entity/reporting/emergency_outcome_fact";
export * from "../entity/reporting/emergency_referral_source_fact";
export * from "../entity/reporting/emergency_referral_name_fact";
export * from "../entity/reporting/emergency_diagnosis_fact";
export * from "../entity/reporting/emergency_consultation_type_fact";
export * from "../entity/reporting/emergency_traffic_accident_fact";
export * from "../entity/reporting/emergency_domestic_violence_fact";
export * from "../entity/reporting/emergency_case_category_fact";
export * from "../entity/reporting/emergency_drowning_intoxication_fact";

View File

@ -1,4 +1,5 @@
export enum CardPrintQueueType {
PRINT_PROVISION = "print_provision",
PROVISION = "provision",
PRINT = "print",
}