Files
hms/crates/erp-health/src/entity/patient.rs
iven e0b299ccd4
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
feat(health): patient entity PII 伴生字段 + content_management 编译修复
- 迁移 m000064: patient 添加 emergency_contact_phone_hash + key_version
- patient Entity 补充对应字段
- 修复 content_management 迁移: exec_stmt → execute_unprepared
- 修复 article_service: 补全新字段 (status/slug/content_type 等)
- 修复 article_article_tag: 复合主键注解
2026-04-26 10:27:58 +08:00

81 lines
3.0 KiB
Rust

use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)]
#[sea_orm(table_name = "patient")]
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub id: Uuid,
pub tenant_id: Uuid,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub user_id: Option<Uuid>,
pub name: String,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub gender: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub birth_date: Option<chrono::NaiveDate>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub blood_type: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub id_number: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub id_number_hash: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub allergy_history: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub medical_history_summary: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub emergency_contact_name: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub emergency_contact_phone: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub emergency_contact_phone_hash: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub key_version: Option<i32>,
pub status: String,
pub verification_status: String,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
pub created_at: DateTimeUtc,
pub updated_at: DateTimeUtc,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub created_by: Option<Uuid>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub updated_by: Option<Uuid>,
#[sea_orm(skip_serializing_if = "Option::is_none")]
pub deleted_at: Option<DateTimeUtc>,
pub version: i32,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
#[sea_orm(has_many = "super::patient_family_member::Entity")]
FamilyMember,
#[sea_orm(has_many = "super::patient_tag_relation::Entity")]
TagRelation,
#[sea_orm(has_many = "super::patient_doctor_relation::Entity")]
DoctorRelation,
#[sea_orm(has_many = "super::health_record::Entity")]
HealthRecord,
#[sea_orm(has_many = "super::vital_signs::Entity")]
VitalSigns,
#[sea_orm(has_many = "super::lab_report::Entity")]
LabReport,
#[sea_orm(has_many = "super::appointment::Entity")]
Appointment,
#[sea_orm(has_many = "super::follow_up_task::Entity")]
FollowUpTask,
#[sea_orm(has_many = "super::consultation_session::Entity")]
ConsultationSession,
}
impl Related<super::patient_family_member::Entity> for Entity {
fn to() -> RelationDef {
Relation::FamilyMember.def()
}
}
impl ActiveModelBehavior for ActiveModel {}