598 lines
27 KiB
Python
Executable file
598 lines
27 KiB
Python
Executable file
# coding=utf-8
|
||
|
||
from django_measurement.models import MeasurementField
|
||
from measurement.measures import Volume
|
||
from django.db import models
|
||
|
||
# Create your models here.
|
||
|
||
class ICD9Diag(models.Model):
|
||
code = models.CharField(max_length=5, primary_key=True)
|
||
desc = models.CharField(max_length=50)
|
||
|
||
def __str__(self):
|
||
# return "%s.%s %s" % (self.code[0:3], self.code[3:], self.desc)
|
||
return self.code
|
||
|
||
class ICD10CMfinal(models.Model):
|
||
ICD9CM_code = models.CharField(max_length=255, db_column=u"ICD-9-CM代碼", verbose_name=u"ICD-9-CM代碼")
|
||
ICD9CM_English = models.CharField(max_length=255, db_column=u"ICD-9-CM英文名稱", verbose_name=u"ICD-9-CM英文名稱")
|
||
ICD9CM_Chinese = models.CharField(max_length=255, db_column=u"ICD-9-CM中文名稱", verbose_name=u"ICD-9-CM中文名稱")
|
||
ICD10CM = models.CharField(max_length=8, db_column=u"ICD10CM", verbose_name=u"ICD-10-CM", primary_key=True)
|
||
# ICD10CM = models.CharField(max_length=255, db_column=u"ICD10CM", verbose_name=u"ICD-10-CM", primary_key=True)
|
||
# ICD10CM = models.CharField(max_length=255, primary_key=True)
|
||
ICD10CM_English = models.CharField(max_length=255, db_column=u"ICD-10-CM英文名稱", verbose_name=u"ICD-10-CM英文名稱")
|
||
ICD10CM_Chinese = models.CharField(max_length=255, db_column=u"ICD-10-CM中文名稱", verbose_name=u"ICD-10-CM中文名稱")
|
||
Corresponding = models.CharField(max_length=255, db_column=u"對應情形", verbose_name=u"對應情形")
|
||
class Meta:
|
||
managed = False
|
||
db_table = u'ICD10CMfinal2'
|
||
|
||
def __str__(self):
|
||
# return "%s|%s| %s\n%s" % (self.ICD10CM, self.ICD9CM_code, self.ICD10CM_English, self.ICD9CM_English)
|
||
# return "%s|%s|%s" % (self.ICD10CM, self.ICD9CM_code, self.ICD10CM_English)
|
||
return "%s %s" % (self.ICD10CM, self.ICD10CM_English)
|
||
|
||
def __jsonencode__(self):
|
||
return {'ICD10CM': self.ICD10CM}
|
||
|
||
class ICD10Count(models.Model):
|
||
# icd10cm = models.ForeignKey(ICD10CMfinal, blank=True, null=True, verbose_name='ICD-10-CM', to_field='ICD10CM', on_delete=models.SET_NULL, primary_key=True)
|
||
icd10cm = models.OneToOneField(ICD10CMfinal, on_delete=models.DO_NOTHING, primary_key=True)
|
||
count = models.IntegerField(null=True)
|
||
|
||
|
||
class Activity(models.Model):
|
||
title = models.CharField(max_length=200)
|
||
|
||
def __str__(self):
|
||
return self.title
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
class Patient(models.Model):
|
||
GENDER_CHOICES = (
|
||
(1, 'Male'),
|
||
(2, 'Female'),
|
||
)
|
||
# STATUS_CHOICES = (
|
||
# ( 0, 'Male'),
|
||
# (10, 'Female'),
|
||
# )
|
||
name = models.CharField(max_length=200, verbose_name='姓名')
|
||
medical_records = models.CharField(max_length=200, unique=True)
|
||
gender = models.IntegerField(choices=GENDER_CHOICES)
|
||
birthday = models.DateField()
|
||
address = models.CharField(max_length=200)
|
||
phone = models.CharField(max_length=200)
|
||
id_cards = models.CharField(max_length=200, unique=True)
|
||
memo = models.CharField(max_length=200, blank=True, null=True)
|
||
dead = models.DateField(blank=True, null=True)
|
||
|
||
height = models.DecimalField(max_digits=4, decimal_places=1, null=True)
|
||
weight = models.DecimalField(max_digits=6, decimal_places=3, null=True)
|
||
native = models.CharField(max_length=200, blank=True, null=True)
|
||
past_and_family_history = models.TextField(blank=True, null=True)
|
||
|
||
# last_followup = models.DateField(blank=True, null=True)
|
||
# next_followup = models.DateField(blank=True, null=True)
|
||
|
||
timestamp = models.DateTimeField(auto_now=True)
|
||
|
||
def __str__(self):
|
||
return self.name
|
||
# return self.name+' '+str(self.medical_records)
|
||
|
||
class Admin:
|
||
pass
|
||
def get_absolute_url(self):
|
||
return "/patient/detail/%i/" % self.id
|
||
|
||
# class Meta:
|
||
# ordering = ['name']
|
||
|
||
|
||
class Oncologist(models.Model):
|
||
name = models.CharField(max_length=200)
|
||
staff_code = models.CharField(max_length=9,null=True)
|
||
def __str__(self):
|
||
return self.name
|
||
|
||
class Surgeon(models.Model):
|
||
name = models.CharField(max_length=200)
|
||
staff_code = models.CharField(max_length=9,null=True)
|
||
def __str__(self):
|
||
return self.name
|
||
|
||
class DiseaseStage(models.Model):
|
||
stage = models.CharField(max_length=200)
|
||
def __str__(self):
|
||
return self.stage
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
|
||
class PrimaryTumorSite(models.Model):
|
||
# id = models.IntegerField('ID', primary_key=True)
|
||
site = models.CharField(max_length=200)
|
||
|
||
def __str__(self):
|
||
return self.site
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
ACCOUNTING = (
|
||
(10, '健保'),
|
||
(20, '自費'),
|
||
(30, '內含'),
|
||
)
|
||
|
||
class Treatment(models.Model):
|
||
KARNOFSKY_SCORING = (
|
||
(100, '100% - normal, no complaints, no signs of disease'),
|
||
( 90, ' 90% - capable of normal activity, few symptoms or signs of disease'),
|
||
( 80, ' 80% - normal activity with some difficulty, some symptoms or signs'),
|
||
( 70, ' 70% - caring for self, not capable of normal activity or work'),
|
||
( 60, ' 60% - requiring some help, can take care of most personal requirements'),
|
||
( 50, ' 50% - requires help often, requires frequent medical care'),
|
||
( 40, ' 40% - disabled, requires special care and help'),
|
||
( 30, ' 30% - severely disabled, hospital admission indicated but no risk of death'),
|
||
( 20, ' 20% - very ill, urgently requiring admission, requires supportive measures or treatment'),
|
||
( 10, ' 10% - moribund, rapidly progressive fatal disease processes'),
|
||
( 0, ' 0% - death'),
|
||
)
|
||
|
||
IMAGE_GUIDANCE = (
|
||
(100, '6D Skull'),
|
||
(200, 'Xsight-Spine'),
|
||
(210, 'Xsight-Lung'),
|
||
(300, 'Fiducial'),
|
||
(400, 'Synchrony'),
|
||
)
|
||
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
bed = models.CharField(max_length=200, blank=True, null=True, verbose_name='病床號')
|
||
icd9 = models.ForeignKey(ICD9Diag, blank=True, null=True, verbose_name='ICD9診斷', on_delete=models.SET_NULL)
|
||
icd10cm = models.ForeignKey(ICD10CMfinal, blank=True, null=True, verbose_name='ICD-10-CM', to_field='ICD10CM', on_delete=models.SET_NULL)
|
||
other_diagnosis = models.CharField(max_length=200, blank=True, null=True, verbose_name='其他診斷')
|
||
tracking_mode = models.IntegerField(choices=IMAGE_GUIDANCE, blank=True, null=True)
|
||
referral = models.CharField(max_length=200, blank=True, null=True, verbose_name='轉介醫師')
|
||
oncologist = models.ForeignKey(Oncologist, blank=True, null=True, on_delete=models.SET_NULL, verbose_name='放射腫瘤')
|
||
surgeon = models.ForeignKey(Surgeon, blank=True, null=True, on_delete=models.SET_NULL, verbose_name='神經外科')
|
||
date_started = models.DateField(blank=True, null=True)
|
||
date_completed = models.DateField(blank=True, null=True)
|
||
accounting = models.IntegerField(choices=ACCOUNTING, blank=True, null=True, verbose_name='記帳別')
|
||
karnofsky_score = models.IntegerField(choices=KARNOFSKY_SCORING, blank=True, null=True)
|
||
disease_stage = models.ForeignKey(DiseaseStage, blank=True, null=True, on_delete=models.SET_NULL)
|
||
primary_tumor_site = models.ForeignKey(PrimaryTumorSite, blank=True, null=True, on_delete=models.SET_NULL)
|
||
input = models.ForeignKey(Activity, related_name='input', blank=True, null=True, verbose_name='已', on_delete=models.SET_NULL)
|
||
output = models.ForeignKey(Activity, related_name='output', blank=True, null=True, verbose_name='待', on_delete=models.SET_NULL)
|
||
complications = models.CharField(max_length=200, blank=True, null=True, verbose_name='併發症')
|
||
chief_complaint = models.TextField(blank=True, null=True)
|
||
|
||
memo = models.CharField(max_length=200, blank=True, null=True)
|
||
timestamp = models.DateTimeField(auto_now=True)
|
||
creation = models.DateTimeField(auto_now_add=True)
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
def get_absolute_url(self):
|
||
return "/treatment/detail/%i/" % self.id
|
||
|
||
def save(self, *args, **kwargs):
|
||
if self.icd10cm:
|
||
self.icd9_id = self.icd10cm.ICD9CM_code.replace('.', '')
|
||
|
||
super(Treatment, self).save(*args, **kwargs)
|
||
|
||
# 000B3121 Cyberknife Radiosurgery,Intracranial Lesion
|
||
# 000B3122 Cyberknife Radiosurgery,Extracranial Lesion
|
||
# 000B3123 Cyberknife Radiosurgery,Multifraction Therapy
|
||
class Price(models.Model):
|
||
code = models.CharField(max_length=200, blank=True, null=True)
|
||
identity = models.IntegerField(choices=ACCOUNTING)
|
||
name = models.CharField(max_length=200)
|
||
unit = models.CharField(max_length=200, blank=True, null=True)
|
||
address = models.IntegerField(blank=True, null=True)
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
class Meta:
|
||
ordering = ["code", "identity", "name"]
|
||
|
||
def __str__(self):
|
||
return self.code + '-' + self.get_identity_display() + '-' + self.name
|
||
|
||
class VEVENT(models.Model):
|
||
# iCalendar
|
||
DTSTAMP = models.DateTimeField(auto_now=True)
|
||
DTSTART = models.DateTimeField()
|
||
DTEND = models.TimeField(blank=True)
|
||
DURATION = models.TimeField()
|
||
SUMMARY = models.CharField(max_length=200, blank=True, null=True)
|
||
CLASS = models.CharField(max_length=200, blank=True, null=True)
|
||
CATEGORIES = models.CharField(max_length=200, blank=True, null=True)
|
||
TRANSP = models.CharField(max_length=200, blank=True, null=True)
|
||
RRULE = models.CharField(max_length=200, blank=True, null=True)
|
||
|
||
DESCRIPTION = models.CharField(max_length=200, blank=True, null=True) # map to PatientAppointmentSchedule
|
||
|
||
MODE_CHOICES = (
|
||
(100, '衛教(日)'),
|
||
(110, 'Fiducial'),
|
||
(200, '固定器'),
|
||
(210, 'CT'),
|
||
(215, 'RT-CT'),
|
||
(220, 'MRI'),
|
||
(230, 'Angio'),
|
||
(300, '預排'),
|
||
(310, '治療'),
|
||
)
|
||
treatment = models.ForeignKey(Treatment, on_delete=models.CASCADE)
|
||
mode = models.IntegerField(choices=MODE_CHOICES)
|
||
mode_remark = models.CharField(max_length=200, blank=True, null=True)
|
||
price = models.ForeignKey(Price, blank=True, null=True, on_delete=models.SET_NULL)
|
||
|
||
break_frequency = models.IntegerField(blank=True)
|
||
system_err = models.IntegerField(blank=True)
|
||
shift = models.IntegerField(blank=True)
|
||
cone = models.IntegerField(blank=True)
|
||
path = models.IntegerField(blank=True)
|
||
|
||
def get_absolute_url(self):
|
||
return "/treatment/detail/%i/" % self.treatment.id
|
||
|
||
class TargetLocation(models.Model):
|
||
location = models.CharField(max_length=200)
|
||
|
||
def __str__(self):
|
||
return self.location
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
|
||
class Pathology(models.Model):
|
||
pathology = models.CharField(max_length=200, unique=True)
|
||
stage = models.ForeignKey(DiseaseStage, on_delete=models.CASCADE)
|
||
|
||
def __str__(self):
|
||
return self.pathology
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
|
||
class SubLocation(models.Model):
|
||
target_location = models.ForeignKey(TargetLocation, on_delete=models.CASCADE)
|
||
group = models.IntegerField()
|
||
sub_location = models.CharField(max_length=200)
|
||
pathology = models.ManyToManyField(Pathology)
|
||
|
||
def __str__(self):
|
||
# return TargetLocation.objects.get(id=self.target_location)+' - '+self.sub_location
|
||
return self.sub_location
|
||
|
||
class Admin:
|
||
pass
|
||
|
||
|
||
class Lesion(models.Model):
|
||
treatment = models.ForeignKey(Treatment, on_delete=models.CASCADE)
|
||
sub_location = models.ForeignKey(SubLocation, on_delete=models.CASCADE)
|
||
pathology = models.ForeignKey(Pathology, on_delete=models.CASCADE)
|
||
|
||
CT_CHOICES = (
|
||
('GE' , 'GE' ),
|
||
('PHIA', 'Philips'),
|
||
('SIE' , 'Siemens'),
|
||
)
|
||
|
||
calibration_table = models.CharField (max_length=9, choices=CT_CHOICES, null=True, verbose_name='CT Calibration table')
|
||
density_correction = models.BooleanField( null=True, verbose_name='影像密度修正' )
|
||
|
||
dimensions = models.CharField(max_length=200)
|
||
volume = models.DecimalField(max_digits=9, decimal_places=2 , verbose_name='Target Volume(mm3)', null=True)
|
||
volume_measure = MeasurementField (measurement=Volume,unit_choices=(('cubic_centimeter','cm3'),), verbose_name='Target Volume' , null=True)
|
||
|
||
# cubic_millimeter
|
||
# cubic_centimeter
|
||
|
||
plan_name = models.CharField(max_length=200, blank=True, null=True)
|
||
|
||
COLLIMATOR_CHOICES = (
|
||
(10, 'fixed'),
|
||
(20, 'Iris'),
|
||
(30, 'MLC'),
|
||
)
|
||
|
||
collimator_type = models.IntegerField(choices=COLLIMATOR_CHOICES, default=10, verbose_name='Collimator Type' )
|
||
collimator = models.CharField(max_length=200)
|
||
path_no = models.IntegerField()
|
||
beam_no = models.IntegerField()
|
||
|
||
# mu_max = models.DecimalField(max_digits=9, decimal_places=2, null=True)
|
||
# mu_min = models.DecimalField(max_digits=9, decimal_places=2, null=True)
|
||
mu_max = models.DecimalField(max_digits=9, decimal_places=2, blank=True, null=True)
|
||
mu_min = models.DecimalField(max_digits=9, decimal_places=2, blank=True, null=True)
|
||
|
||
dose = models.IntegerField()
|
||
fractions = models.IntegerField()
|
||
iso_dose_curve = models.DecimalField(max_digits=9, decimal_places=1)
|
||
|
||
dmin = models.DecimalField(max_digits=9, decimal_places=2)
|
||
dmax = models.DecimalField(max_digits=9, decimal_places=2)
|
||
dmean = models.DecimalField(max_digits=9, decimal_places=2, verbose_name='Mean dose(cGy)', null=True)
|
||
|
||
coverage = models.DecimalField(max_digits=9, decimal_places=2)
|
||
ci = models.DecimalField(max_digits=9, decimal_places=2)
|
||
nci = models.DecimalField(max_digits=9, decimal_places=2)
|
||
|
||
start_date = models.DateField(blank=True, null=True)
|
||
end_date = models.DateField(blank=True, null=True)
|
||
|
||
memo = models.CharField(max_length=200, blank=True, null=True)
|
||
|
||
def get_absolute_url(self):
|
||
return "/treatment/detail/%i/" % self.treatment.id
|
||
|
||
def sub_location_target_location(self):
|
||
return self.sub_location.target_location
|
||
|
||
def treatment_id(self):
|
||
return treatment.id
|
||
|
||
def save(self, *args, **kwargs):
|
||
if self.volume_measure is not None:
|
||
self.volume = self.volume_measure.cubic_millimeter
|
||
super().save(*args, **kwargs)
|
||
|
||
|
||
class PriorTreatment(models.Model):
|
||
TREATMENT_CHOICES = (
|
||
(1, 'Surgery'),
|
||
(2, 'Biopsy'),
|
||
(3, 'RT'),
|
||
(4, 'Radiosurgery'),
|
||
(5, 'Chemotherapy'),
|
||
)
|
||
PERIOD_CHOICES = (
|
||
(1, 'Before'),
|
||
(2, 'Concurrent'),
|
||
(3, 'None'),
|
||
)
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
date = models.DateField()
|
||
treatment = models.IntegerField(choices=TREATMENT_CHOICES)
|
||
period = models.IntegerField(choices=PERIOD_CHOICES, blank=True, null=True)
|
||
dose = models.IntegerField(blank=True, null=True)
|
||
memo = models.CharField(max_length=200, blank=True, null=True)
|
||
|
||
def get_absolute_url(self):
|
||
return "/patient/detail/%i/" % self.patient.id
|
||
|
||
|
||
class PathExam(models.Model):
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
path_code = models.CharField(max_length=200, unique=True, verbose_name='病理號')
|
||
specimen_code = models.CharField(max_length=200, verbose_name='檢體')
|
||
specimen_get_date = models.DateField(verbose_name='收件日')
|
||
report_date = models.DateField(verbose_name='報告日')
|
||
division = models.CharField(max_length=200, verbose_name='科別')
|
||
bed = models.CharField(max_length=200, blank=True, null=True, verbose_name='病床')
|
||
report = models.TextField(blank=True, null=True, verbose_name='檢查報告')
|
||
|
||
|
||
class Followup(models.Model):
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
# date = models.DateField(auto_now_add=True)
|
||
date = models.DateField()
|
||
memo = models.CharField(max_length=200, blank=True, null=True)
|
||
|
||
def get_absolute_url(self):
|
||
return "/patient/detail/%i/" % self.patient.id
|
||
|
||
class PACSImage(models.Model):
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
|
||
PatChartNo = models.CharField(max_length=200, verbose_name='病歷號')
|
||
RequestSheetNo = models.CharField(max_length=200, verbose_name='單號')
|
||
ExamDate = models.DateField( verbose_name='檢查日')
|
||
LinkOrderName = models.CharField(max_length=200, verbose_name='檢查名稱')
|
||
Modality = models.CharField(max_length=200, verbose_name='儀器')
|
||
VerifiedStateString = models.CharField(max_length=200, verbose_name='狀態')
|
||
Exam = models.TextField(null=True, verbose_name='報告內容')
|
||
Impression = models.TextField(null=True)
|
||
Report = models.TextField(null=True, verbose_name='報告')
|
||
|
||
SAVED_CHOICES = (
|
||
(0 , '待處理'),
|
||
(10, '有輸入'),
|
||
(15, '已確認'),
|
||
(20, '不適用'),
|
||
)
|
||
# Saved = models.BooleanField()
|
||
Saved = models.IntegerField(choices=SAVED_CHOICES, verbose_name='保存')
|
||
|
||
|
||
class ElectronicMedicalReport(models.Model):
|
||
report_key = models.CharField(max_length=200, primary_key=True)
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
|
||
report_class = models.CharField(max_length=200)
|
||
check_date = models.DateField(null=True)
|
||
report_date = models.DateField(null=True)
|
||
report_code = models.CharField(max_length=200)
|
||
report = models.TextField(null=True)
|
||
saved = models.DateField(auto_now=True)
|
||
|
||
|
||
class XrayTextReport(models.Model):
|
||
# report_key = models.ForeignKey(ElectronicMedicalReport, primary_key=True)
|
||
report_key = models.OneToOneField(ElectronicMedicalReport, primary_key=True, on_delete=models.CASCADE)
|
||
|
||
old_access_no = models.CharField(max_length=200, null=True)
|
||
ioe = models.CharField(max_length=200, null=True)
|
||
refer_dept = models.CharField(max_length=200, null=True)
|
||
status = models.CharField(max_length=200, null=True)
|
||
formal_version = models.CharField(max_length=200, null=True)
|
||
exam_date = models.DateField(null=True)
|
||
order_desc = models.CharField(max_length=200, null=True)
|
||
|
||
clean_html = models.TextField(null=True)
|
||
|
||
response = models.CharField(max_length=200, null=True)
|
||
|
||
|
||
class TreatmentResponse(models.Model):
|
||
# treatment = models.ForeignKey(Treatment, primary_key=True)
|
||
treatment = models.OneToOneField(Treatment, primary_key=True, on_delete=models.CASCADE)
|
||
|
||
time = models.DateField(null=True)
|
||
event = models.BooleanField(null=True)
|
||
|
||
time1y = models.DateField(null=True)
|
||
event1y = models.BooleanField(null=True)
|
||
|
||
class LesionFollow(models.Model):
|
||
Lesion = models.ForeignKey(Lesion, on_delete=models.CASCADE)
|
||
Date = models.DateField(null=False, verbose_name='追蹤日期')
|
||
Volume = models.FloatField(null=True, verbose_name='體積(mm3)')
|
||
A = models.FloatField(null=True, verbose_name='長(mm)')
|
||
B = models.FloatField(null=True, verbose_name='寬(mm)')
|
||
C = models.FloatField(null=True, verbose_name='高(mm)')
|
||
Memo = models.CharField(max_length=200, blank=True, null=True)
|
||
|
||
|
||
class MedicalRecord(models.Model):
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
|
||
Record = models.CharField(max_length=200, null=True) # 住急門
|
||
|
||
HospName = models.CharField(max_length=200, null=True)
|
||
DeptName = models.CharField(max_length=200, null=True, verbose_name='科')
|
||
InDate = models.DateField( null=False, verbose_name='入')
|
||
OutDate = models.DateField( null=True, verbose_name='出')
|
||
WardName = models.CharField(max_length=200, null=True, verbose_name='房')
|
||
RoomName = models.CharField(max_length=200, null=True, verbose_name='室')
|
||
BedName = models.CharField(max_length=200, null=True, verbose_name='床')
|
||
MainDrName = models.CharField(max_length=200, null=True, verbose_name='主治')
|
||
MainDiagnosisName = models.CharField(max_length=200, null=True, verbose_name='診斷')
|
||
StatusName = models.CharField(max_length=200, null=True, verbose_name='狀態')
|
||
|
||
SpecialCureName = models.CharField(max_length=200, null=True, verbose_name='行為')
|
||
|
||
|
||
#New records
|
||
class PatientMedicalRecord(models.Model):
|
||
key_code = models.CharField(max_length=200, primary_key=True) # 住急門
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
|
||
key_name = models.CharField(max_length=200)
|
||
|
||
hosp_name = models.CharField(max_length=200, null=True)
|
||
dept_name = models.CharField(max_length=200, null=True, verbose_name='科')
|
||
in_date = models.DateField( null=True, verbose_name='入')
|
||
out_date = models.DateField( null=True, verbose_name='出')
|
||
ward_name = models.CharField(max_length=200, null=True, verbose_name='房')
|
||
room_name = models.CharField(max_length=200, null=True, verbose_name='室')
|
||
bed_name = models.CharField(max_length=200, null=True, verbose_name='床')
|
||
|
||
come_clinic_date = models.DateField( null=True, verbose_name='掛號日')
|
||
discharge_date = models.DateField( null=True, verbose_name='離部日')
|
||
|
||
special_cure_name = models.CharField(max_length=200, null=True, verbose_name='行為')
|
||
|
||
main_dr_name = models.CharField(max_length=200, null=True, verbose_name='主治')
|
||
main_diagnosis_name = models.CharField(max_length=200, null=True, verbose_name='診斷')
|
||
status_name = models.CharField(max_length=200, null=True, verbose_name='狀態')
|
||
|
||
temp_bed_id = models.CharField(max_length=200, null=True, verbose_name='床')
|
||
|
||
account_status_name = models.CharField(max_length=200, null=True, verbose_name='狀態')
|
||
|
||
func = models.CharField(max_length=200, null=True)
|
||
doc = models.TextField( null=True, verbose_name='摘')
|
||
saved = models.DateField(auto_now=True)
|
||
|
||
class OPNote(models.Model):
|
||
key_code = models.CharField(max_length=200, primary_key=True)
|
||
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
|
||
|
||
key_name = models.CharField(max_length=200)
|
||
|
||
doc = models.TextField( null=True, verbose_name='摘')
|
||
saved = models.DateField(auto_now=True)
|
||
|
||
# {'ChartNo': '6791902', 'PatientName': '張秀玲', 'ApplyTypeDesc': '送核', 'StatusDesc': '新建案件', 'NhiDeptName': '放射腫瘤科', 'PackageTime': None, 'OrderCode': '37029B', 'OrderName': '加馬機立體定位放射手術', 'ResultDesc': '1', 'Quantity': None, 'ExamineQuantity': '0', 'ExamineDate': None}
|
||
# {'ChartNo': '3302509', 'PatientName': '賴慧如', 'Status': '影醫部處理中', 'ErrorMsg': None, 'SuccessMsg': None, 'ApplyType': '送核', 'ApplyDate': '2021/02/25', 'AnticancerMedicine': '否', 'ApplyPart': '無', 'EmrDateStr': None, 'NhiDept': '神經外科', 'ApplyDoctor': '蕭輔仁', 'Phone': '63424', 'Diagnosis': 'D32.9', 'Reason': 'A 46Y/O patient female, PHX: olfactory grove meningioma sp OP in 2018,因目前發現有recurrence,
|
||
|
||
class NHIOrder(models.Model):
|
||
id = models.CharField(max_length=20, primary_key=True)
|
||
|
||
ChartNo = models.CharField (verbose_name='病歷號' ,max_length=10)
|
||
PatientName = models.CharField (verbose_name='病患姓名',max_length=30)
|
||
ApplyTypeDesc = models.CharField (verbose_name='申請類別',max_length=10)
|
||
StatusDesc = models.CharField (verbose_name='案件狀態',max_length=10)
|
||
NhiDeptName = models.CharField (verbose_name='科別' ,max_length=10)
|
||
PackageTime = models.DateField (verbose_name='送案日期')
|
||
OrderCode = models.CharField (verbose_name='申請項目',max_length=10)
|
||
OrderName = models.CharField (verbose_name='項目名稱',max_length=20)
|
||
ResultDesc = models.IntegerField(verbose_name='申請數量',default=1)
|
||
Quantity = models.CharField (verbose_name='核定結果',max_length=10, null=True)
|
||
ExamineQuantity= models.IntegerField(verbose_name='核定數量', null=True)
|
||
ExamineDate = models.DateField (verbose_name='核定日期', null=True)
|
||
|
||
timestamp = models.DateTimeField(auto_now_add=True)
|
||
updated = models.DateTimeField(auto_now=True)
|
||
|
||
# optional
|
||
|
||
Status = models.CharField (verbose_name='目前狀態' ,max_length=10, null=True)
|
||
ErrorMsg = models.CharField ( max_length=10, null=True)
|
||
SuccessMsg = models.CharField ( max_length=10, null=True)
|
||
|
||
ApplyType = models.CharField (verbose_name='申請類別' ,max_length=10, null=True)
|
||
ApplyDate = models.DateField (verbose_name='申請日期' , null=True)
|
||
AnticancerMedicine = models.CharField (verbose_name='抗癌藥物' ,max_length=10, null=True)
|
||
ApplyPart = models.CharField (verbose_name='申請部位' ,max_length=10, null=True)
|
||
EmrDateStr = models.CharField (verbose_name='緊急通報日' ,max_length=10, null=True)
|
||
NhiDept = models.CharField (verbose_name='申請科別' ,max_length=10, null=True)
|
||
ApplyDoctor = models.CharField (verbose_name='申請醫師' ,max_length=10, null=True)
|
||
Phone = models.CharField (verbose_name='聯絡分機' ,max_length=10, null=True)
|
||
Diagnosis = models.CharField (verbose_name='疾病分類號' ,max_length=10, null=True)
|
||
Reason = models.TextField (verbose_name='申請原因' , null=True)
|
||
# OrderCode = models.CharField (verbose_name='醫令碼' ,max_length=10, null=True)
|
||
# OrderName = models.CharField (verbose_name='醫令名稱' ,max_length=10, null=True)
|
||
ApplyQty = models.IntegerField(verbose_name='申請量' , null=True)
|
||
# ResultDesc = models.CharField (verbose_name='核定結果' ,max_length=10, null=True)
|
||
# ExamineQuantity = models.CharField (verbose_name='核定量' ,max_length=10, null=True)
|
||
ExamineDateStr = models.CharField (verbose_name='核定日期' ,max_length=10, null=True)
|
||
ExamineReason1 = models.CharField (verbose_name='核定原因1' ,max_length=10, null=True)
|
||
ExamineReason2 = models.CharField (verbose_name='核定原因2' ,max_length=10, null=True)
|
||
ExamineReasonDesc = models.TextField (verbose_name='核定原因說明', null=True)
|
||
|
||
# extra
|
||
|
||
other_diagnosis = models.CharField(max_length=200, blank=True, null=True, verbose_name='Dx')
|
||
num_sessions = models.CharField (verbose_name='預計分次', max_length=10, null=True)
|
||
MainDrName = models.TextField (verbose_name='主治' , null=True)
|
||
Priority = models.IntegerField(verbose_name='優先' , null=True)
|
||
Memo = models.TextField (verbose_name='備註' , null=True)
|
||
|
||
|
||
|
||
# def save(self, *args, **kwargs):
|
||
# if self.id is None:
|
||
# self.id = self.ChartNo+'_'+self.PackageTime[:7]
|
||
|
||
# super(NHIOrder, self).save(*args, **kwargs)
|
||
|
||
'''
|
||
sed 's/ENGINE=MyISAM/ENGINE=InnoDB/; s/DEFAULT CHARSET=utf8mb4//; s/DEFAULT CHARSET=utf8//; s/COLLATE=utf8_unicode_ci//' /data/tmp/ck_dev.sql > /data/tmp/ck_dev2.sql
|
||
'''
|