Skip to content

Instantly share code, notes, and snippets.

@snahor
Created September 18, 2010 04:23
Show Gist options
  • Save snahor/585351 to your computer and use it in GitHub Desktop.
Save snahor/585351 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
SI_NO = ((0, u'No'), (1, u'Sí'))
DILUCIONES = (
('1', '1'),
('1:2', '1:2'),
('1:4', '1:4'),
('1:8', '1:8'),
('1:16', '1:16'),
('1:32', '1:32'),
('1:64', '1:64'),
('1:128', '1:128'),
('1:256', '1:256'),
('1:512', '1:512'))
GRUPOS_SANGUINEOS = (
('A1', 'A1'),
('A2', 'A2'),
('A', 'A'),
('B', 'B'),
('O', 'O'),
('AB', 'AB'))
ESTADO_CIVIL = (
('CA', u'Casada'),
('CO', u'Conviviente'),
('SO', u'Soltera'),
('DI', u'Divorciada'),
('VI', u'Viuda'),
)
NIVELES_DE_EDUCACION = (
('SN', u'Sin nivel'),
('IN', u'Inicial'),
('PI', u'Primaria incompleta'),
('PC', u'Primaria completa'),
('SI', u'Secundaria incompleta'),
('SC', u'Secundaria completa'),
('TE', u'Técnica'),
('UN', u'Universitario'),
)
OCUPACION = (
(1, u'Profesional'),
(2, u'Profesor'),
(3, u'Empleado'),
(4, u'Comerciante'),
(5, u'Obrero'),
(6, u'Ama de casa'),
(7, u'Estudiante'),
(8, u'Sin ocupación'),
(9, u'Otros'),
)
TIPOS_DE_AFILIACION = (
('N', 'Nuevo'),
('Antiguo', (
('I', 'INSCR'),
('A', 'AFIL'),
)),
)
DIAGNOSTICOS = (
('N', u'Normal'),
('P', u'Patológico'),
('NR', u'No refiere'),
)
COMPONENTES = (
(1, 'Subsidiado'),
(0, 'Semi-subsidiado'), )
TIPOS_DE_EMBARAZO = (
(0, u'Simple',),
(1, u'Múltiple'),)
TIPOS_DE_PARTO = (
('V', u'Vaginal'),
('C', u'Cesárea'))
TIPOS_DE_ABORTO = (
('I', u'Incompleto'),
('C', u'Completo'),
('F', u'Frustrado'),
('S', u'Séptico'),
('O', u'Otro'),
)
RESULTADO_PAP = (
(1, 'Normal'),
(0, 'Anormal'),)
RESULTADO_DE_EXAMEN = (
(1, u'Normal'),
(0, u'Patológico'),
)
OPERADORES_CELULARES = (
(0, u'Claro'),
(1, u'Telefónica'),
(2, u'Nextel'))
RESULTADOS_DE_PERFIL_BIOFISICO = (
(4, '4'),
(6, '6'),
(8, '8'),
(10, '10'),
)
PAISES = (
(u'AF', u'Afganistán'),
(u'AX', u'Åland'),
(u'AL', u'Albania'),
(u'DE', u'Alemania'),
(u'AD', u'Andorra'),
(u'AO', u'Angola'),
(u'AI', u'Anguila'),
(u'AQ', u'Antártida'),
(u'AG', u'Antigua y Barbuda'),
(u'AN', u'Antillas Neerlandesas'),
(u'SA', u'Arabia Saudita'),
(u'DZ', u'Argelia'),
(u'AR', u'Argentina'),
(u'AM', u'Armenia'),
(u'AW', u'Aruba'),
(u'AU', u'Australia'),
(u'AT', u'Austria'),
(u'AZ', u'Azerbaiyán'),
(u'BS', u'Bahamas'),
(u'BH', u'Bahréin'),
(u'BD', u'Bangladesh'),
(u'BB', u'Barbados'),
(u'BE', u'Bélgica'),
(u'BZ', u'Belice'),
(u'BJ', u'Benín'),
(u'BM', u'Bermudas'),
(u'BY', u'Bielorrusia'),
(u'MM', u'Birmania'),
(u'BO', u'Bolivia'),
(u'BA', u'Bosnia y Herzegovina'),
(u'BW', u'Botsuana'),
(u'BV', u'Isla Bouvet'),
(u'BR', u'Brasil'),
(u'BN', u'Brunéi'),
(u'BG', u'Bulgaria'),
(u'BF', u'Burkina Faso'),
(u'BI', u'Burundi'),
(u'BT', u'Bután'),
(u'CV', u'Cabo Verde'),
(u'KY', u'Islas Caimán'),
(u'KH', u'Camboya'),
(u'CM', u'Camerún'),
(u'CA', u'Canadá'),
(u'CF', u'República Centroafricana'),
(u'TD', u'Chad'),
(u'CZ', u'República Checa'),
(u'CL', u'Chile'),
(u'CN', u'China'),
(u'CY', u'Chipre'),
(u'CC', u'Islas Cocos'),
(u'CO', u'Colombia'),
(u'KM', u'Comoras'),
(u'CG', u'República del Congo'),
(u'CD', u'República Democrática del Congo'),
(u'CK', u'Islas Cook'),
(u'KP', u'Corea del Norte'),
(u'KR', u'Corea del Sur'),
(u'CI', u'Costa de Marfil'),
(u'CR', u'Costa Rica'),
(u'HR', u'Croacia'),
(u'CU', u'Cuba'),
(u'DK', u'Dinamarca'),
(u'DM', u'Dominica'),
(u'DO', u'República Dominicana'),
(u'EC', u'Ecuador'),
(u'EG', u'Egipto'),
(u'SV', u'El Salvador'),
(u'AE', u'Emiratos Árabes Unidos'),
(u'ER', u'Eritrea'),
(u'SK', u'Eslovaquia'),
(u'SI', u'Eslovenia'),
(u'ES', u'España'),
(u'US', u'Estados Unidos'),
(u'UM', u'Islas ultramarinas de Estados Unidos'),
(u'EE', u'Estonia'),
(u'ET', u'Etiopía'),
(u'FO', u'Islas Feroe'),
(u'PH', u'Filipinas'),
(u'FI', u'Finlandia'),
(u'FJ', u'Fiyi'),
(u'FR', u'Francia'),
(u'GA', u'Gabón'),
(u'GM', u'Gambia'),
(u'GE', u'Georgia'),
(u'GS', u'Islas Georgias del Sur y Sandwich del Sur'),
(u'GH', u'Ghana'),
(u'GI', u'Gibraltar'),
(u'GD', u'Granada'),
(u'GR', u'Grecia'),
(u'GL', u'Groenlandia'),
(u'GP', u'Guadalupe'),
(u'GU', u'Guam'),
(u'GT', u'Guatemala'),
(u'GF', u'Guayana Francesa'),
(u'GG', u'Guernsey'),
(u'GN', u'Guinea'),
(u'GQ', u'Guinea Ecuatorial'),
(u'GW', u'Guinea-Bissau'),
(u'GY', u'Guyana'),
(u'HT', u'Haití'),
(u'HM', u'Islas Heard y McDonald'),
(u'HN', u'Honduras'),
(u'HK', u'Hong Kong'),
(u'HU', u'Hungría'),
(u'IN', u'India'),
(u'ID', u'Indonesia'),
(u'IR', u'Irán'),
(u'IQ', u'Iraq'),
(u'IE', u'Irlanda'),
(u'IS', u'Islandia'),
(u'IL', u'Israel'),
(u'IT', u'Italia'),
(u'JM', u'Jamaica'),
(u'JP', u'Japón'),
(u'JE', u'Jersey'),
(u'JO', u'Jordania'),
(u'KZ', u'Kazajistán'),
(u'KE', u'Kenia'),
(u'KG', u'Kirguistán'),
(u'KI', u'Kiribati'),
(u'KW', u'Kuwait'),
(u'LA', u'Laos'),
(u'LS', u'Lesoto'),
(u'LV', u'Letonia'),
(u'LB', u'Líbano'),
(u'LR', u'Liberia'),
(u'LY', u'Libia'),
(u'LI', u'Liechtenstein'),
(u'LT', u'Lituania'),
(u'LU', u'Luxemburgo'),
(u'MO', u'Macao'),
(u'MK', u'República de Macedonia'),
(u'MG', u'Madagascar'),
(u'MY', u'Malasia'),
(u'MW', u'Malaui'),
(u'MV', u'Maldivas'),
(u'ML', u'Malí'),
(u'MT', u'Malta'),
(u'FK', u'Islas Malvinas'),
(u'IM', u'Isla de Man'),
(u'MP', u'Islas Marianas del Norte'),
(u'MA', u'Marruecos'),
(u'MH', u'Islas Marshall'),
(u'MQ', u'Martinica'),
(u'MU', u'Mauricio'),
(u'MR', u'Mauritania'),
(u'YT', u'Mayotte'),
(u'MX', u'México'),
(u'FM', u'Micronesia'),
(u'MD', u'Moldavia'),
(u'MC', u'Mónaco'),
(u'MN', u'Mongolia'),
(u'ME', u'Montenegro'),
(u'MS', u'Montserrat'),
(u'MZ', u'Mozambique'),
(u'NA', u'Namibia'),
(u'NR', u'Nauru'),
(u'CX', u'Isla de Navidad'),
(u'NP', u'Nepal'),
(u'NI', u'Nicaragua'),
(u'NE', u'Níger'),
(u'NG', u'Nigeria'),
(u'NU', u'Niue'),
(u'NF', u'Norfolk'),
(u'NO', u'Noruega'),
(u'NC', u'Nueva Caledonia'),
(u'NZ', u'Nueva Zelanda'),
(u'OM', u'Omán'),
(u'NL', u'Países Bajos'),
(u'PK', u'Pakistán'),
(u'PW', u'Palaos'),
(u'PS', u'Territorios palestinos'),
(u'PA', u'Panamá'),
(u'PG', u'Papúa Nueva Guinea'),
(u'PY', u'Paraguay'),
(u'PE', u'Perú'),
(u'PN', u'Islas Pitcairn'),
(u'PF', u'Polinesia Francesa'),
(u'PL', u'Polonia'),
(u'PT', u'Portugal'),
(u'PR', u'Puerto Rico'),
(u'QA', u'Qatar'),
(u'GB', u'Reino Unido'),
(u'RE', u'Reunión'),
(u'RW', u'Ruanda'),
(u'RO', u'Rumania'),
(u'RU', u'Rusia'),
(u'EH', u'República Árabe Saharaui Democrática'),
(u'SB', u'Islas Salomón'),
(u'WS', u'Samoa'),
(u'AS', u'Samoa Americana'),
(u'BL', u'San Bartolomé'),
(u'KN', u'San Cristóbal y Nieves'),
(u'SM', u'San Marino'),
(u'MF', u'San Martín'),
(u'PM', u'San Pedro y Miquelón'),
(u'VC', u'San Vicente y las Granadinas'),
(u'SH', u'Santa Helena'),
(u'LC', u'Santa Lucía'),
(u'ST', u'Santo Tomé y Príncipe'),
(u'SN', u'Senegal'),
(u'RS', u'Serbia'),
(u'SC', u'Seychelles'),
(u'SL', u'Sierra Leona'),
(u'SG', u'Singapur'),
(u'SY', u'Siria'),
(u'SO', u'Somalia'),
(u'LK', u'Sri Lanka'),
(u'SZ', u'Suazilandia'),
(u'ZA', u'Sudáfrica'),
(u'SD', u'Sudán'),
(u'SE', u'Suecia'),
(u'CH', u'Suiza'),
(u'SR', u'Surinam'),
(u'SJ', u'Svalbard y Jan Mayen'),
(u'TH', u'Tailandia'),
(u'TW', u'Taiwán'),
(u'TZ', u'Tanzania'),
(u'TJ', u'Tayikistán'),
(u'IO', u'Territorio Británico del Océano Índico'),
(u'TF', u'Territorios Australes Franceses'),
(u'TL', u'Timor Oriental'),
(u'TG', u'Togo'),
(u'TK', u'Tokelau'),
(u'TO', u'Tonga'),
(u'TT', u'Trinidad y Tobago'),
(u'TN', u'Túnez'),
(u'TC', u'Islas Turcas y Caicos'),
(u'TM', u'Turkmenistán'),
(u'TR', u'Turquía'),
(u'TV', u'Tuvalu'),
(u'UA', u'Ucrania'),
(u'UG', u'Uganda'),
(u'UY', u'Uruguay'),
(u'UZ', u'Uzbekistán'),
(u'VU', u'Vanuatu'),
(u'VA', u'Ciudad del Vaticano'),
(u'VE', u'Venezuela'),
(u'VN', u'Vietnam'),
(u'VG', u'Islas Vírgenes Británicas'),
(u'VI', u'Islas Vírgenes de los Estados Unidos'),
(u'WF', u'Wallis y Futuna'),
(u'YE', u'Yemen'),
(u'DJ', u'Yibuti'),
(u'ZM', u'Zambia'),
(u'ZW', u'Zimbabue'),
)
# -*- coding: utf-8 -*-
import json
from datetime import date
from django.db import models
from django.contrib.auth.models import User
from ubigeo.models import Ubigeo
from cie.models import CIE_10
import choices
class Common(models.Model):
modified_by = models.ForeignKey(User, null=True, blank=True)
modified_at = models.DateField(auto_now_add=True, auto_now=True)
class Meta:
abstract = True
class Establecimiento(models.Model):
codigo = models.CharField(max_length=10)
nombre = models.CharField(max_length=100, unique=True)
descripcion = models.CharField(max_length=300, null=True, blank=True)
def __unicode__(self):
return self.nombre
class Meta:
db_table = 'establecimientos'
class UserProfile(models.Model):
user = models.OneToOneField(User, primary_key=True)
establecimiento = models.ForeignKey(Establecimiento)
tipo_de_usuario = models.CharField(max_length='4',
choices=(('OBS', 'Obstetriz'), ('DR', 'Doctor')), default='OBS')
class Meta:
db_table = 'user_profile'
class ExamenDeLaboratorio(models.Model):
examen = models.CharField(max_length=40, unique=True)
def __unicode__(self):
return self.examen
class Meta:
db_table = 'examenes_de_laboratorio'
class Relacion(models.Model):
descripcion = models.CharField(max_length=50)
def __unicode__(self):
return self.descripcion
class Meta:
db_table = 'relaciones'
class ControlManager(models.Manager):
def numero(self):
sql = """SELECT count(*)
FROM controles
INNER JOIN embarazos ON (controles.embarazo_id = embarazos.id)
WHERE embarazos.paciente_id = pacientes.id"""
return self.extra(select={'numero_de_controles': sql})
class Paciente(Common):
hc = models.CharField(u'Nº de H.C.', max_length=10, unique=True)
nombre = models.CharField(max_length=50)
apellido_paterno = models.CharField(max_length=50)
apellido_materno = models.CharField(max_length=50)
dni = models.CharField('DNI', max_length=8, null=True, blank=True)
nacimiento = models.DateField('Fecha de nacimiento')
# Datos de residencia
distrito = models.ForeignKey(Ubigeo, null=True, blank=True,
related_name='paciente_distrito_direccion_set')
direccion = models.CharField(u'Dirección', max_length=100, null=True, blank=True)
urbanizacion = models.CharField(max_length=100, null=True, blank=True)
telefono = models.CharField(u'Teléfono', max_length=10, null=True, blank=True)
celular = models.CharField(max_length=10, null=True, blank=True)
celular_wawanet = models.CharField(max_length=10, null=True, blank=True)
operador = models.SmallIntegerField(u'Compañía de celular',
choices=choices.OPERADORES_CELULARES, null=True, blank=True)
email = models.EmailField(u'Correo electrónico', max_length=41, null=True, blank=True)
# Datos de lugar de nacimiento
pais = models.CharField(u'País', max_length=2, choices=choices.PAISES)
provincia = models.ForeignKey(Ubigeo, null=True, blank=True,
related_name='paciente_provincia_nacimiento_set')
estudios = models.CharField(max_length=2,
choices=choices.NIVELES_DE_EDUCACION)
ocupacion = models.SmallIntegerField(u'Ocupación', choices=choices.OCUPACION)
estado_civil = models.CharField(max_length=2, choices=choices.ESTADO_CIVIL)
tiene_sis = models.BooleanField(default=False, choices=choices.SI_NO)
codigo_sis = models.CharField(max_length=10, null=True, blank=True)
subsidiado = models.NullBooleanField('Componente', choices=choices.COMPONENTES,
null=True, blank=True)
afiliacion = models.CharField(max_length=1,
choices=choices.TIPOS_DE_AFILIACION, null=True, blank=True)
agregado_por = models.ForeignKey(User, related_name='pacientes_por_usuario')
# -------------------------------------------------------------------------
# antecedentes
# -------------------------------------------------------------------------
antecedentes_medicos = models.ManyToManyField(CIE_10, null=True,
blank=True, through='PacienteAntecedenteMedico', related_name='pacientes_antecedentes_medicos')
antecedentes_familiares = models.ManyToManyField(CIE_10,
null=True, blank=True, through='PacienteAntecedenteFamiliar', related_name='pacientes_antecedentes_familiares')
# managers
controles = ControlManager()
objects = models.Manager()
@property
def nombre_completo(self):
return '%s %s, %s' % (self.apellido_paterno, self.apellido_materno, self.nombre)
def save(self, *args, **kwargs):
self.nombre = self.nombre.upper().strip()
self.apellido_paterno = self.apellido_paterno.upper().strip()
self.apellido_materno = self.apellido_materno.upper().strip()
self.direccion = self.direccion.upper().strip()
self.email = self.email.lower()
super(Paciente, self).save(*args, **kwargs)
# @jsonify
# def hc(self):
# """
# Retorna la historia clinica de las gestante como JSON.
# """
# return {
# nombre: ,
# }
class Meta:
db_table = 'pacientes'
class Embarazo(models.Model):
paciente = models.ForeignKey(Paciente)
talla = models.SmallIntegerField()
peso = models.SmallIntegerField('Peso habitual')
tipo = models.NullBooleanField('Tipo de embarazo', choices=choices.TIPOS_DE_EMBARAZO, null=True, blank=True)
ultima_menstruacion = models.DateField()
ultima_menstruacion_confiable = models.BooleanField(choices=choices.SI_NO)
# edad gestacional de antitetanica
eg_antitetanica_1 = models.SmallIntegerField(null=True, blank=True)
eg_antitetanica_2 = models.SmallIntegerField(null=True, blank=True)
antitetanica_dosis_previas = models.SmallIntegerField(default=0)
violencia_familiar = models.BooleanField(default=False, choices=choices.SI_NO)
numero_de_controles = models.SmallIntegerField(default=0)
class Meta:
db_table = 'embarazos'
class Control(Common):
embarazo = models.ForeignKey(Embarazo)
numero_de_control = models.SmallIntegerField(default=1)
peso_actual = models.SmallIntegerField()
temperatura = models.DecimalField(max_digits=3, decimal_places=1)
frecuencia_respiratoria = models.SmallIntegerField()
pulso = models.SmallIntegerField()
presion_sistolica = models.SmallIntegerField()
presion_diastolica = models.SmallIntegerField()
fecha_hora = models.DateTimeField(auto_now=True, auto_now_add=True)
# -------------------------------------------------------------------------
# vacunaciones y psicoprofilaxis
# -------------------------------------------------------------------------
psicoprofilaxis = models.BooleanField('Psicoprofilaxis', default=False)
citas_control_odontologico = models.SmallIntegerField(u'Citas', null=True, blank=True)
diagnostico_control_odontologico = models.CharField(u'Diagnóstico', max_length=2, choices=choices.DIAGNOSTICOS, null=True, blank=True)
citas_control_psicologico = models.SmallIntegerField(u'Citas', null=True, blank=True)
diagnostico_control_psicologico = models.CharField(u'Diagnóstico', max_length=2, choices=choices.DIAGNOSTICOS, null=True, blank=True)
consejeria_planificacion_fam = models.BooleanField(u'Consejería de planificación familiar')
administracion_sulfato_ferroso = models.BooleanField(u'Prescripción de sulfato ferroso')
# -------------------------------------------------------------------------
# examenes fisicos
# -------------------------------------------------------------------------
# Django ORM de porqueria no deja hacer esto. SqlAlchemy <3
#examenes_fisicos = models.ManyToManyField(CIE_10,
# through='ControlExamenFisico')
reflejos = models.BooleanField(choices=choices.RESULTADO_DE_EXAMEN)
grado_de_reflejos = models.SmallIntegerField(null=True, blank=True,
choices=((0, '0'), (1, '+'), (2, '++'), (3, '+++'), (4, '++++')))
altura_uterina = models.SmallIntegerField()
dinamica_uterina = models.SmallIntegerField(
choices=((0, '-'), (1, '+'), (2, '++'), (3, '+++')))
edemas = models.BooleanField(choices=choices.RESULTADO_DE_EXAMEN)
grado_de_edemas = models.SmallIntegerField(null=True, blank=True,
choices=tuple((i, '+' * i) for i in range(1, 5)))
latidos_fetales_por_minuto = models.SmallIntegerField(null=True, blank=True)
movimientos_fetales = models.BooleanField(choices=choices.SI_NO)
presentacion = models.CharField(max_length=1,
choices=(('C', u'Cefálica'), ('P', u'Podálica'), ('T', u'Transversal')),
null=True, blank=True)
sintomas = models.ManyToManyField(CIE_10, through='ControlSintoma',
null=True, blank=True, related_name='controles_sintomas_set')
examenes_de_laboratorio = models.ManyToManyField(ExamenDeLaboratorio,
through='ControlExamenDeLaboratorio', null=True, blank=True)
class Meta:
db_table = 'controles'
unique_together = ('embarazo', 'numero_de_control')
class PacienteAntecedenteMedico(Common):
paciente = models.ForeignKey(Paciente)
antecedente_medico = models.ForeignKey(CIE_10, db_column='cie_id')
tratamiento = models.NullBooleanField()
observacion = models.CharField(max_length=200, null=True, blank=True)
class Meta:
db_table = 'pacientes_antecedentes_medicos'
unique_together = ('paciente', 'antecedente_medico')
class PacienteAntecedenteFamiliar(Common):
paciente = models.ForeignKey(Paciente)
antecedente_familiar = models.ForeignKey(CIE_10, db_column='cie_id')
relacion = models.ManyToManyField(Relacion)
class Meta:
db_table = 'pacientes_antecedentes_familiares'
unique_together = ('paciente', 'antecedente_familiar')
class ControlExamenDeLaboratorio(models.Model):
examen_de_laboratorio = models.ForeignKey(ExamenDeLaboratorio)
control = models.ForeignKey(Control)
fecha_de_orden = models.DateField(default=date.today)
fecha_de_resultado = models.DateField(null=True, blank=True)
resultado = models.CharField(max_length=10, null=True, blank=True)
resultado_extra = models.CharField(null=True, blank=True, max_length=10)
observacion = models.CharField(max_length=200, null=True, blank=True)
def save(self, commit=True):
if self.observacion:
self.observacion = self.observacion.upper()
super(ControlSintoma, self).save(commit=True)
class Meta:
db_table = 'controles_examenes_de_laboratorio'
unique_together = ('control', 'examen_de_laboratorio')
class ControlExamenFisico(models.Model):
examen_fisico = models.ForeignKey(CIE_10, db_column='cie_id')
control = models.ForeignKey(Control)
resultado = models.CharField(max_length=1, null=True, blank=True,
choices=(('N', 'Normal'), ('P', u'Patológico')))
patologia = models.ForeignKey(CIE_10, null=True, blank=True,
related_name='controles_examenes_fisicos_patologias_set')
observacion = models.CharField(max_length=200, null=True, blank=True)
def save(commit=True):
if self.resultado:
if self.resultado == 'N' or (self.resultado == 'P' and self.patologia):
if self.observacion:
self.observacion = self.observacion.upper()
super(ControlExamenFisico, self).save(commit=True)
class Meta:
db_table = 'controles_examenes_fisicos'
unique_together = ('control', 'examen_fisico')
class ControlSintoma(models.Model):
sintoma = models.ForeignKey(CIE_10, db_column='cie_id', related_name='control_sintomas')
control = models.ForeignKey(Control)
observacion = models.CharField(max_length=200, null=True, blank=True)
class Meta:
db_table = 'controles_sintomas'
unique_together = ('control', 'sintoma')
def save(self, commit=True):
if self.observacion:
self.observacion = self.observacion.upper()
super(ControlSintoma, self).save(commit=True)
class Ecografia(Common):
embarazo = models.ForeignKey(Embarazo)
numero_de_ecografia = models.SmallIntegerField(u'Ecografía nº', default=1)
fecha_ecografia = models.DateField('Fecha')
lugar = models.CharField('Lugar', max_length=50)
edad_gestacional = models.SmallIntegerField(default=0) # Esta expresado en dias
longitud_cefalo_caudal = models.SmallIntegerField(u'Longitud céfalo caudal')
diametro_biparietal = models.SmallIntegerField(u'Diámetro biparietal')
patologia = models.ManyToManyField(CIE_10, null=True, blank=True)
@property
def str_edad_gestacional(self):
'''Retorna la edad gestacional (como string) expresada en semanas y dias'''
return u'%s semanas con %s días' % ((self.edad_gestacional / 7),
(self.edad_gestacional % 7))
class Meta:
db_table = 'ecografias'
unique_together = ('embarazo', 'numero_de_ecografia')
class PerfilBiofisico(Common):
embarazo = models.ForeignKey(Embarazo)
resultado_examen_biofisico = models.SmallIntegerField('Resultado',
choices=choices.RESULTADOS_DE_PERFIL_BIOFISICO)
fecha_examen_biofisico = models.DateField('Fecha')
class Meta:
db_table = 'perfiles_biofisicos'
class AntecedenteObstetrico(Common):
paciente = models.OneToOneField(Paciente, primary_key=True)
gestaciones = models.SmallIntegerField(default=1)
abortos = models.SmallIntegerField(default=0)
partos = models.SmallIntegerField(default=0)
cesareas = models.SmallIntegerField(u'Cesáreas', default=0)
motivos_de_cesarea = models.ManyToManyField(CIE_10, blank=True, null=True)
rn_mayor_peso = models.SmallIntegerField(u'RN de mayor peso', default=0) # gramos
nacidos_vivos = models.SmallIntegerField(default=0)
viven = models.SmallIntegerField(default=0)
muertos_menor_1sem = models.SmallIntegerField('Muertos < 1 semana', default=0)
muertos_mayor_igual_1sem = models.SmallIntegerField('Muertos >= 1 semana', default=0)
obitos = models.SmallIntegerField(default=0)
nacidos_menor_2500g = models.SmallIntegerField(default=0)
nacidos_menor_37sem = models.SmallIntegerField(default=0)
preeclampsias = models.SmallIntegerField(default=0)
hemorragias_postparto = models.SmallIntegerField(default=0)
embarazos_molares = models.SmallIntegerField(default=0)
embarazos_multiples = models.SmallIntegerField(u'Embarazos múltiples', default=0)
incompatibilidad_rh = models.BooleanField(u'Incompatibilidad RH', default=False)
embarazo_ectopico = models.BooleanField(u'Embarazo ectópico', default=False)
class Meta:
db_table = 'antecedentes_obstetricos'
class UltimaGestacion(models.Model):
paciente = models.ForeignKey(Paciente)
fecha_ultima_de_gestacion = models.DateField('Fecha')
tipo_de_parto = models.CharField(max_length=1, choices=choices.TIPOS_DE_PARTO)
menor_2500g = models.BooleanField('< 2500 gramos', default=False)
menor_37sem = models.BooleanField('< 37 semanas', default=False)
preeclampsia = models.BooleanField(default=False)
hemorragia_postparto = models.BooleanField(default=False)
molar = models.BooleanField(default=False)
gemelar = models.BooleanField()
ectopico = models.BooleanField(u'Ectópico', default=False)
aborto = models.BooleanField()
tipo_de_aborto = models.CharField(max_length=1,
choices=choices.TIPOS_DE_ABORTO, null=True, blank=True)
peso_de_rn = models.SmallIntegerField(u'Peso del RN')
class Meta:
db_table = 'ultimas_gestaciones'
class AntecedenteGinecologico(Common):
paciente = models.OneToOneField(Paciente, primary_key=True)
menarquia = models.SmallIntegerField(default=0)
andria = models.SmallIntegerField(u'Nº de parejas sexuales', default=1)
edad_primera_relacion_sexual = models.SmallIntegerField(u'Edad de 1º relación sexual')
duracion_de_menstruacion = models.SmallIntegerField(u'Duración de menstruación')
ciclo_de_menstruacion = models.SmallIntegerField(u'Ciclo de menstruación')
flujo_vaginal = models.BooleanField(default=False)
cirugia_pelvica_uterina = models.BooleanField(u'Cirugía pélvica uterina', default=False)
diagnostico_de_infertilidad = models.BooleanField(u'Diagnóstico de infertilidad', default=False)
sin_pap = models.BooleanField(default=False)
pap_ultimo = models.DateField(null=True, blank=True)
pap_resultado = models.NullBooleanField(null=True, blank=True,
choices=((1, 'Normal'), (0, 'Anormal')))
pap_lugar = models.SmallIntegerField(max_length=50, null=True, blank=True)
# ultimos mac usados
condon = models.BooleanField(u'Condón')
ovulos = models.BooleanField(u'Óvulos')
diu = models.BooleanField('DIU')
inyectable = models.BooleanField()
pastilla = models.BooleanField()
natural = models.BooleanField()
embarazo_usando_mac = models.BooleanField(default=False, choices=choices.SI_NO)
class Meta:
db_table = 'antecedentes_ginecologicos'
class PruebaRapida(models.Model):
RESULTADOS = ((1, 'Positivo'), (0, 'Negativo'))
embarazo = models.OneToOneField(Embarazo, primary_key=True)
vih = models.NullBooleanField(u'VIH', null=True, blank=True, choices=RESULTADOS)
sifilis = models.NullBooleanField(u'Sífilis', null=True, blank=True, choices=RESULTADOS)
dosis_1 = models.NullBooleanField(null=True, blank=True, choices=choices.SI_NO)
tratamiento_de_pareja = models.NullBooleanField(null=True, blank=True,
choices=choices.SI_NO)
class Meta:
db_table = 'pruebas_rapidas'
class DiagnosticoManager(models.Manager):
def all(self):
sql = """SELECT descripcion FROM cie WHERE cie.id = %s.diagnostico_id"""
return self.extra(select={'descripcion': sql})
class ControlDiagnostico(models.Model):
control = models.ForeignKey(Control)
diagnostico = models.ForeignKey(CIE_10, db_column='cie_id')
observacion = models.CharField(max_length=200, blank=True, null=True)
prioridad = models.SmallIntegerField()
tipo = models.CharField(max_length=1, default='P', choices=(('P', 'Presuntivo'), ('D', 'Definitivo'), ('R', 'Repetido')))
#objects = DiagnosticoManager()
class Meta:
db_table = 'controles_diagnosticos'
unique_together = ('control', 'diagnostico')
/* Relaciones */
INSERT INTO relaciones (descripcion) VALUES ('Padre');
INSERT INTO relaciones (descripcion) VALUES ('Madre');
INSERT INTO relaciones (descripcion) VALUES ('Hermano(a)');
INSERT INTO relaciones (descripcion) VALUES ('Hijo(a)');
INSERT INTO relaciones (descripcion) VALUES ('Abuelo(a)');
INSERT INTO relaciones (descripcion) VALUES ('Primo(a)');
INSERT INTO relaciones (descripcion) VALUES ('Sobrino(a)');
INSERT INTO relaciones (descripcion) VALUES ('Contacto cercano');
INSERT INTO relaciones (descripcion) VALUES ('Otros');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment