//// tablas independientes 'Tipo', { Name: DataTypes.TEXT }, 'Tipodos', { Name: DataTypes.TEXT }, 'Duracion', { Name: DataTypes.TEXT, }, 'Diagnostico', { CodigoCIE: {DataTypes.TEXT, unique: 'diagnostico_codigocie_unique'} Title: DataTypes.TEXT, Detail: DataTypes.TEXT } 'Empresa', { Name: DataTypes.STRING(100), BusinessName: DataTypes.TEXT, Address: DataTypes.TEXT, Email: DataTypes.TEXT, Phone: DataTypes.TEXT, Phone2: DataTypes.TEXT, Logo: DataTypes.TEXT, History: DataTypes.TEXT, Mision: DataTypes.TEXT, Vision: DataTypes.TEXT } 'Especialidad', { Name: DataTypes.STRING(100), Resume: DataTypes.TEXT, Price: DataTypes.DECIMAL, Icon: DataTypes.TEXT, Image: DataTypes.TEXT } 'Antecedenteheredofamiliar', { Name: DataTypes.TEXT } 'Antecedentenopatologico', { Name: DataTypes.TEXT } 'Antecedentepatologico', { Name: DataTypes.TEXT } 'Admin', { Name: DataTypes.STRING(100), LastName: DataTypes.STRING(100), Phone: DataTypes.STRING(15), Email: { type: DataTypes.STRING(200), unique: 'admin_email_unique' }, Password: DataTypes.TEXT, Condition: DataTypes.TEXT, ConditionMin: DataTypes.TEXT, Photo: DataTypes.TEXT, Code: DataTypes.TEXT }, 'Doctor', { Name: DataTypes.STRING(100), LastName: DataTypes.STRING(100), MedicalSchoolNumber: DataTypes.STRING(50), Email: { type: DataTypes.STRING(200), unique: 'doctor' }, Password: DataTypes.TEXT, Photo: DataTypes.TEXT, Code: DataTypes.TEXT, Condition: DataTypes.TEXT }, 'Cliente', { Name: DataTypes.STRING(100), LastName: DataTypes.STRING(100), BirthDate: DataTypes.DATE, Job: DataTypes.STRING(100), Direction: DataTypes.STRING(100), Phone: DataTypes.STRING(15), Gender: DataTypes.STRING(10), CivilStatus: DataTypes.STRING(25), DocumentNumber: { type: DataTypes.STRING(15), unique: 'cliente_docnumber_unique' }, Email: DataTypes.STRING(200), Password: DataTypes.TEXT, Photo: DataTypes.TEXT, Google: DataTypes.TEXT, Code: DataTypes.TEXT, Condition: DataTypes.TEXT, G: DataTypes.TEXT, P: DataTypes.TEXT, A: DataTypes.TEXT, C: DataTypes.TEXT, Fum: DataTypes.DATE, Papsmear: DataTypes.TEXT, Bloodtype: DataTypes.TEXT, Others: DataTypes.TEXT, Othershereditary: DataTypes.TEXT, Otherspathological: DataTypes.TEXT, Medicine: DataTypes.TEXT, PreviousSurgeries: DataTypes.TEXT (defaultValue: 'Ninguna') }, //// tablas dependientes 'Especialista', { Turn: DataTypes.TEXT, models.Doctor, { foreignKey: 'DoctorId', as: 'doctor' } models.Especialidad, { foreignKey: 'EspecialidadId', as: 'especialidad' } }, 'Cita', { Appointment: DataTypes.DATE, Reason: DataTypes.TEXT, Amount: DataTypes.TEXT, Pay: DataTypes.TEXT, Paymentstatus: DataTypes.TEXT, Condition: DataTypes.TEXT, Type: DataTypes.TEXT, Referred: DataTypes.TEXT, Companion: DataTypes.TEXT, Relationship: DataTypes.STRING(20), BloodPressure: DataTypes.TEXT, HeartRate: DataTypes.TEXT, BreathingFrequency: DataTypes.TEXT, Temperature: DataTypes.TEXT, Saturation: DataTypes.TEXT, SickTime: DataTypes.TEXT, CurrentEpisode: DataTypes.TEXT, StartWay: DataTypes.TEXT, SignsandSymptoms: DataTypes.TEXT, DescriptionProblem: DataTypes.TEXT, SurgicalHistory: DataTypes.TEXT, MedicalHistory: DataTypes.TEXT, AllergicHistory: DataTypes.TEXT, PhysicalExam: DataTypes.TEXT, Diagnosis: DataTypes.TEXT, LaboratoryExam: DataTypes.TEXT, Creatininevalue: DataTypes.TEXT, Urea: DataTypes.TEXT, ETS: DataTypes.BOOLEAN, Specifyothers: DataTypes.TEXT, Labamount: DataTypes.TEXT, Labpay: DataTypes.TEXT, Labpaymentstatus: DataTypes.TEXT, Labstatus: DataTypes.TEXT, Labreceptiondate: DataTypes.DATE, Labresultdate: DataTypes.DATE, AgendaId: DataTypes.INTEGER (foranea de agenda) models.Admin, { foreignKey: 'AdminId', as: 'admin' }, models.Cliente, { foreignKey: 'ClienteId', as: 'cliente' } }, 'Detallecita', { Othersduration: DataTypes.TEXT, Startdate: DataTypes.DATE, Frequency: DataTypes.TEXT, Datethatbecameimportant: DataTypes.DATE, Perday: DataTypes.TEXT, Perweek: DataTypes.TEXT, Permonth: DataTypes.TEXT, Byyear: DataTypes.TEXT, Scale: DataTypes.TEXT, Datescale: DataTypes.DATE, Treatment: DataTypes.TEXT, Observations: DataTypes.TEXT, Protocol: DataTypes.BOOLEAN, Protocoltype: DataTypes.TEXT, models.Cita, { foreignKey: 'CitaId', as: 'cita' } }, 'Dermatomafrontal', { DFC1: DataTypes.BOOLEAN, DFC21: DataTypes.BOOLEAN, DFC22: DataTypes.BOOLEAN, DFC3: DataTypes.BOOLEAN, DFC4: DataTypes.BOOLEAN, DFC51: DataTypes.BOOLEAN, DFC52: DataTypes.BOOLEAN, DFC61: DataTypes.BOOLEAN, DFC62: DataTypes.BOOLEAN, DFC71: DataTypes.BOOLEAN, DFC72: DataTypes.BOOLEAN, DFC81: DataTypes.BOOLEAN, DFC82: DataTypes.BOOLEAN, DFD101: DataTypes.BOOLEAN, DFD102: DataTypes.BOOLEAN, DFD103: DataTypes.BOOLEAN, DFD2: DataTypes.BOOLEAN, DFD3: DataTypes.BOOLEAN, DFD4: DataTypes.BOOLEAN, DFD5: DataTypes.BOOLEAN, DFD6: DataTypes.BOOLEAN, DFD7: DataTypes.BOOLEAN, DFD8: DataTypes.BOOLEAN, DFD9: DataTypes.BOOLEAN, DFD10: DataTypes.BOOLEAN, DFD11: DataTypes.BOOLEAN, DFD12: DataTypes.BOOLEAN, DFL1: DataTypes.BOOLEAN, DFL21: DataTypes.BOOLEAN, DFL22: DataTypes.BOOLEAN, DFL31: DataTypes.BOOLEAN, DFL32: DataTypes.BOOLEAN, DFL41: DataTypes.BOOLEAN, DFL42: DataTypes.BOOLEAN, DFL51: DataTypes.BOOLEAN, DFL52: DataTypes.BOOLEAN, DFS11: DataTypes.BOOLEAN, DFS12: DataTypes.BOOLEAN, DFS2: DataTypes.BOOLEAN, DFS3: DataTypes.BOOLEAN, models.Cita, { foreignKey: 'CitaId', as: 'cita' } }, 'Dermatomaposterior', { DDC2: DataTypes.BOOLEAN, DDC3: DataTypes.BOOLEAN, DDC4: DataTypes.BOOLEAN, DDC51: DataTypes.BOOLEAN, DDC52: DataTypes.BOOLEAN, DDC53: DataTypes.BOOLEAN, DDC61: DataTypes.BOOLEAN, DDC62: DataTypes.BOOLEAN, DDC63: DataTypes.BOOLEAN, DDC71: DataTypes.BOOLEAN, DDC72: DataTypes.BOOLEAN, DDC73: DataTypes.BOOLEAN, DDC81: DataTypes.BOOLEAN, DDC82: DataTypes.BOOLEAN, DDC83: DataTypes.BOOLEAN, DDD101: DataTypes.BOOLEAN, DDD102: DataTypes.BOOLEAN, DDD103: DataTypes.BOOLEAN, DDD2: DataTypes.BOOLEAN, DDD3: DataTypes.BOOLEAN, DDD4: DataTypes.BOOLEAN, DDD5: DataTypes.BOOLEAN, DDD6: DataTypes.BOOLEAN, DDD7: DataTypes.BOOLEAN, DDD8: DataTypes.BOOLEAN, DDD9: DataTypes.BOOLEAN, DDD10: DataTypes.BOOLEAN, DDD11: DataTypes.BOOLEAN, DDD12: DataTypes.BOOLEAN, DDL1: DataTypes.BOOLEAN, DDL2: DataTypes.BOOLEAN, DDL31: DataTypes.BOOLEAN, DDL32: DataTypes.BOOLEAN, DDL41: DataTypes.BOOLEAN, DDL42: DataTypes.BOOLEAN, DDL51: DataTypes.BOOLEAN, DDL52: DataTypes.BOOLEAN, DDL53: DataTypes.BOOLEAN, DDL54: DataTypes.BOOLEAN, DDS11: DataTypes.BOOLEAN, DDS12: DataTypes.BOOLEAN, DDS13: DataTypes.BOOLEAN, DDS14: DataTypes.BOOLEAN, DDS21: DataTypes.BOOLEAN, DDS22: DataTypes.BOOLEAN, DDS3: DataTypes.BOOLEAN, DDS4: DataTypes.BOOLEAN, DDS5: DataTypes.BOOLEAN, models.Cita, { foreignKey: 'CitaId', as: 'cita' } }, 'Laboratorio', { Name: DataTypes.TEXT, Detail: DataTypes.TEXT, Price: DataTypes.DECIMAL, models.Tipo, { foreignKey: 'TipoId', as: 'tipo' } }, 'Laboratoriodos', { Name: DataTypes.TEXT, Detail: DataTypes.TEXT, Price: DataTypes.DECIMAL, Plurality: DataTypes.STRING(6), Code: DataTypes.STRING(5), models.Tipodos, { foreignKey: 'TipodosId', as: 'tipodos' } }, 'ItemLaboratorio', { Name: DataTypes.TEXT, Method: DataTypes.TEXT, Measurement: DataTypes.STRING(20), ReferentialRange: DataTypes.TEXT, models.Laboratorio, { foreignKey: 'LaboratorioId', as: 'laboratorio' } }, 'Laboratoriodoscita', { Value: DataTypes.BOOLEAN, Location: DataTypes.STRING(15), Amount: DataTypes.STRING(3), Condition: DataTypes.STRING(100), models.Cita, { foreignKey: 'CitaId', as: 'cita' }, models.Laboratoriodos, { foreignKey: 'LaboratoriodosId', as: 'laboratoriodos' } }, 'Analisis', { Value: DataTypes.BOOLEAN, Condition: DataTypes.STRING(25), models.Cita, { foreignKey: 'CitaId', as: 'cita' }, models.Laboratorio, { foreignKey: 'LaboratorioId', as: 'laboratorio' } }, 'Resultado', { Value: DataTypes.STRING(20), Condition: DataTypes.STRING(25), Detail: DataTypes.TEXT, models.ItemLaboratorio, { foreignKey: 'ItemLaboratorioId', as: 'itemlaboratorio' }, models.Cita, { foreignKey: 'CitaId', as: 'cita' } }, 'Examepaciente', { Burning: DataTypes.BOOLEAN, Painfulcoldsensation: DataTypes.BOOLEAN, Electricshocks: DataTypes.BOOLEAN, Tingle: DataTypes.BOOLEAN, Sensationofpinsandneedles: DataTypes.BOOLEAN, Numbness: DataTypes.BOOLEAN, Itch: DataTypes.BOOLEAN, Hypoaesthesiatotouch: DataTypes.BOOLEAN, Hypoaesthesiatopunctures: DataTypes.BOOLEAN, Brushed: DataTypes.BOOLEAN, Fecha: DataTypes.DATE, Punctuacion: DataTypes.STRING(2), models.Detallecita, { foreignKey: 'DetallecitaId', as: 'detallecita' } }, 'Duracioncita', { Condition: DataTypes.STRING(10), models.Detallecita, { foreignKey: 'DetallecitaId', as: 'detallecita' }, models.Duracion, { foreignKey: 'DuracionId', as: 'duracion' } }, 'Cartilla' { Therapy: DataTypes.STRING(200), Session: DataTypes.INTEGER, Patient: DataTypes.TEXT, Diagnosis: DataTypes.TEXT, Status: DataTypes.STRING(50) } 'ItemCartilla' { SessionNumber: DataTypes.INTEGER, Fecha: DataTypes.DATE, Hora: DataTypes.STRING(20), AdverseReaction: DataTypes.TEXT, CartillaId: DataTypes.INTEGER (foranea de Cartilla), AgendaId: DataTypes.INTEGER (foranea de agenda) } 'Auditoria', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, UsuarioId: { type: DataTypes.INTEGER, allowNull: true, }, Registroid: { type: DataTypes.INTEGER, allowNull: true, }, Accion: { type: DataTypes.STRING, allowNull: true, }, Tabla: { type: DataTypes.STRING, allowNull: true, }, Resumen: { type: DataTypes.STRING, allowNull: true, }, Detalle: { type: DataTypes.TEXT, allowNull: true, }, Interaccion: { type: DataTypes.DATE, allowNull: true, }, } 'Agendamiento', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, FechayHoraInicio: { type: DataTypes.STRING, allowNull: false }, FechayHoraFin: { type: DataTypes.STRING, allowNull: false }, Type:{ DataTypes.TEXT, allowNull: false}, Referidopor: { type: DataTypes.STRING, allowNull: false }, PacienteAgendado: { type: DataTypes.STRING, allowNull: false }, DoctorAsignado: { type: DataTypes.STRING, allowNull: false }, Servicio: { type: DataTypes.STRING, allowNull: false }, UsuarioIdentificador: { type: DataTypes.INTEGER, allowNull: false }, Estado: { type: DataTypes.STRING, allowNull: false }, PacienteId: { type: DataTypes.INTEGER, allowNull: false }, DoctorId: { type: DataTypes.INTEGER, allowNull: false } } 'Antecedenteheredofamiliarhistoria', { Condition: DataTypes.STRING(15), models.Cliente, { foreignKey: 'ClienteId', as: 'cliente' }, models.Antecedenteheredofamiliar, { foreignKey: 'AntecedenteheredofamiliarId', as: 'antecedenteheredofamiliar' } }, 'Antecedentenopatologicohistoria', { Condition: DataTypes.STRING(15), models.Cliente, { foreignKey: 'ClienteId', as: 'cliente' }, models.Antecedentenopatologico, { foreignKey: 'AntecedentenopatologicoId', as: 'antecedentenopatologico' } }, 'Antecedentepatologicohistoria', { Condition: DataTypes.STRING(10), models.Cliente, { foreignKey: 'ClienteId', as: 'cliente' }, models.Antecedentepatologico, { foreignKey: 'AntecedentepatologicoId', as: 'antecedentepatologico' } }, con node js, sequelize, teniendo como base de datos posgresql creame un crud simple de cada tablas filtros y busquedas para las tablas dependientes si hace falta mas busquedas y filtros mas rebuscados, te los estare pidiendo ✅ Todos los modelos (33 tablas) listo ✅ Controladores CRUD para cada tabla ✅ Rutas con filtros y búsquedas ✅ Middlewares (auth, validación, error handling) ✅ Configuración de Swagger ✅ Server principal con todas las configuraciones login para los admin y doctor