This is the Fivet project for the subject of the Development and Integration of Solutions course in 2022, with all the dependencies installed through a .gradle extension file, another .proto file to generate calls to the methods of some classes of said particular project.
1.- Create Veterinary Record: It begins when the veterinarian wants to create a record for a patient who does not have one. The veterinarian will have to record the patient's data and optionally the owner's data. For patient data, the veterinarian will have to enter the name, species, date of birth or age, breed, sex, color, and can take a photo at the time, or associate an image file from the device or through a link Regarding the owner, it is interesting to register the name, address, landline, mobile phone, email and RUT. You will also have to indicate whether the type of record is internal or external (in the case of a consultation for a patient who is not a client of the veterinary clinic).
2.- Search Veterinary Record: The veterinarian wants to see a patient's record. To do this, the search is carried out by RUT of the owner, name of the patient or record number. If more than one (patient name) is found, a summary of all those found must be shown, the veterinarian can select one from that list. If only one is found, the information on the file is displayed.
3.- Add Control to a Patient: The veterinarian wants to add a control to a patient who may or may not have a record. To do this, if it has one, the Search Veterinary Record use case is carried out. If not available, the Create Veterinary Record use case is carried out. The Veterinarian will enter the data of a control, that is: date, temperature, weight, height, diagnosis, name of the veterinarian who performed it, the date of the next control if applicable and if it is necessary to associate an exam with your name. and date it was carried out.
4.- Create a Patient Card: The veterinarian wants to create a card for an internal patient or a new patient. To do this, in the event that it is an inpatient, the use case Search Veterinary Record is carried out. If it is new, the Create Veterinary File use case is carried out. The veterinarian extracts the data required to enter them into the card, with respect to the owner, these are: owner (owner's name), address, telephone number, and with respect to the patient: record number, patient name, species, sex, age and photo.
The project is divided by some of its attributes to regard:
- Patient monitoring (Control).
- Patient examination (Examen).
- Patient medical record (Ficha Medica).
- Patient photo (It is not taken into account when testing it but it is considered in the project(Foto)).
- Person (Persona).
-
For the Control class:
- Date (Fecha).
- Temperature (Temperatura).
- Weight (Peso).
- Height (Altura).
- Diagnosis (Diagnostico).
- Vet (Veterinario).
- Medical record (Ficha Medica).
-
For the exam (Examen) class:
- Name (Name of the medical exam (Nombre)).
- Date (Fecha (Date the exam was taken)).
-
For the person class (Persona):
- ID (RUT).
- Name (Nombre).
- Address (Direccion).
- Landline number (Telefono fijo).
- Mobile number (Telefono movil).
- E-mail (Correo).
- Password (Contraseña).
-
For photo class (Foto):
- URL.
-
For the medical record class (Ficha Medica):
- Patient record number (Numero de ficha del paciente).
- Patient name (Nombre del paciente).
- Patient species (Especie del paciente).
- Birthdate (Fecha de nacimiento).
- Patient breed (Raza del paciente).
- Patient gender (Sexo del paciente).
- Patient type (Tipo del paciente al que pertenece).
- Patient owner (Dueño del paciente).
- Patient number controls (Cantidad de controles del paciente).
-
The service of a veterinary record is made up of 2 modalities:
- Client (FivetClient).
- Server (FivetServer).
-
Also, in this project one of these methods is considered to be able to effectively perform unit testing:
- Database (Database connections).
- gRPC (GOOGLE Remote Procedure Call).
- Problem General Model.
-
The .proto file is distributed as follows in code:
message PersonaEntity {
string rut = 1;
string nombre = 2;
string email = 3;
string direccion = 4;
string telefonoFijo = 5;
string telefonoMovil = 6;
string password = 7;
}
message FichaMedicaEntity {
int32 numeroFicha = 1;
string nombrePaciente = 2;
string especie = 3;
string fechaNacimiento = 4;
string raza = 5;
SexoEntity sexo = 6;
string color = 7;
string tipo = 8;
PersonaEntity duenio = 9;
repeated ControlEntity controles = 10;
}
message ControlEntity {
string fecha = 1;
float temperatura = 2;
float peso = 3;
float altura = 4;
string diagnostico = 5;
PersonaEntity veterinario = 6;
FichaMedicaEntity fichaMedica = 7;
}
enum SexoEntity {
UNDEFINED = 0;
MACHO = 1;
HEMBRA = 2;
}
message FichaMedicaReply {
FichaMedicaEntity fichaMedica = 1;
}
message AddFichaReq {
FichaMedicaEntity fichaMedica = 1;
}
message RetrieveFichaMedicaReq {
int32 numeroFicha = 1;
}
message SearchFichaMedicaReq {
string query = 1;
}
message AddPersonaReq {
PersonaEntity persona = 1;
}
message AddControlReq {
ControlEntity control = 1;
}
message ControlRequest {
ControlEntity control = 1;
}
message AuthenticateReq {
string login = 1;
string password = 2;
}
message PersonaReply {
PersonaEntity persona = 1;
}
service FivetService {
rpc authenticate(AuthenticateReq) returns(PersonaReply) {}
rpc addControl(AddControlReq) returns(FichaMedicaReply) {}
rpc retrieveFicha(RetrieveFichaMedicaReq) returns(FichaMedicaReply) {}
rpc searchFicha(SearchFichaMedicaReq) returns (stream FichaMedicaEntity) {}
rpc addFicha(AddFichaReq) returns(FichaMedicaReply) {}
rpc addPersona(AddPersonaReq) returns (PersonaReply) {}
}
Traducido del español:
Este es el proyecto Fivet para la asignatura del curso Desarrollo e Integración de Soluciones año 2022, con todas las dependencias instaladas mediante un archivo de extensión .gradle, otro archivo .proto para generar llamados a los métodos de algunas clases de dicho proyecto en particular.
1.- Crear Ficha Veterinaria: Comienza cuando el veterinario desea crear una ficha para un paciente que no tiene una. El veterinario tendrá que registrar los datos del paciente y opcionalmente los del dueño. Para los datos del paciente, el veterinario tendrá que ingresar el nombre, especie, fecha de nacimiento o edad, raza, sexo, color, y podrá tomar una foto en el momento, o asociar un archivo de imagen desde el dispositivo o por medio de un link. Con respecto al dueño, interesa registrar el nombre, dirección, teléfono fijo, teléfono móvil, email y RUT. Además tendrá que indicar si el tipo de ficha es interno o externo (en caso de una consulta para un paciente que no es cliente de la veterinaria).
2.- Buscar Ficha Veterinaria: El veterinario desea ver la ficha de un paciente. Para ello la búsqueda se realiza por RUT del dueño, nombre del paciente o número de ficha. En caso de encontrar más de una (nombre de paciente) se debe mostrar un resumen de todas las encontradas, el veterinario podrá seleccionar una de esa lista. En caso de encontrar sólo una, se despliega la información de la ficha.
3.- Agregar Control a un Paciente: El veterinario desea agregar un control a un paciente que puede tener ficha o no. Para ello, en el caso de que tenga, se realiza el caso de uso Buscar Ficha Veterinaria. En caso de no tener se realiza el caso de uso Crear Ficha Veterinaria. El Veterinario ingresará los datos de un control, esto es: fecha, temperatura, peso, altura, diagnóstico, nombre del veterinario que la realizó, la fecha del próximo control si es que se aplica y si es necesario asociar a un examen con su nombre y fecha en que se realizó.
4.- Crear Carnet de un Paciente: El veterinario desea crear un carnet a un paciente interno o un paciente nuevo. Para ello, en el caso de que sea un paciente interno, se realiza el caso de uso Buscar Ficha Veterinaria. En caso de ser nuevo, se realiza el caso de uso Crear Ficha Veterinaria. El veterinario extrae los datos que se requieren para ingresarlos al carnet, con respecto al dueño, estos son: propietario (nombre del dueño), domicilio, teléfono y a los que respecta al paciente: número de ficha, nombre del paciente, especie, sexo, edad y foto.
El proyecto se divide por algunos de sus atributos a considerar:
- Control del paciente.
- Examen del paciente.
- Ficha médica del paciente.
- Foto del paciente (No lo toma en cuenta al testearlo pero se considera en el proyecto).
- Persona.
-
Para la clase Control:
- Fecha.
- Temperatura.
- Peso.
- Altura.
- Diagnóstico.
- Veterinario.
- Ficha Médica.
-
Para la clase Examen:
- Nombre (Nombre del examen médico).
- Fecha (Fecha en la que se realizó el examen).
-
Para la clase Persona:
- RUT.
- Nombre.
- Dirección.
- Teléfono Fijo.
- Teléfono Móvil.
- Correo.
- Contraseña.
-
Para la clase Foto:
- URL.
-
Para la clase Ficha Médica:
- Número de ficha del paciente.
- Nombre del paciente.
- Especie del paciente.
- Fecha de nacimiento.
- Raza del paciente.
- Sexo del paciente.
- Tipo del paciente.
- Dueño del paciente.
- Cantidad de controles del paciente.
-
El servicio de una ficha veterinaria se componen de 2 modalidades:
- Cliente (FivetClient).
- Servidor (FivetServer).
-
También, en este proyecto se considera uno de estos métodos para poder realizar efectivamente las pruebas unitarias:
- Database (Conexiones a la base de datos).
- gRPC (Protocolo de comunicación entre servicios).
- Modelo general del problema.
-
El archivo .proto se distribuye de la siguiente manera en código:
message PersonaEntity {
string rut = 1;
string nombre = 2;
string email = 3;
string direccion = 4;
string telefonoFijo = 5;
string telefonoMovil = 6;
string password = 7;
}
message FichaMedicaEntity {
int32 numeroFicha = 1;
string nombrePaciente = 2;
string especie = 3;
string fechaNacimiento = 4;
string raza = 5;
SexoEntity sexo = 6;
string color = 7;
string tipo = 8;
PersonaEntity duenio = 9;
repeated ControlEntity controles = 10;
}
message ControlEntity {
string fecha = 1;
float temperatura = 2;
float peso = 3;
float altura = 4;
string diagnostico = 5;
PersonaEntity veterinario = 6;
FichaMedicaEntity fichaMedica = 7;
}
enum SexoEntity {
UNDEFINED = 0;
MACHO = 1;
HEMBRA = 2;
}
message FichaMedicaReply {
FichaMedicaEntity fichaMedica = 1;
}
message AddFichaReq {
FichaMedicaEntity fichaMedica = 1;
}
message RetrieveFichaMedicaReq {
int32 numeroFicha = 1;
}
message SearchFichaMedicaReq {
string query = 1;
}
message AddPersonaReq {
PersonaEntity persona = 1;
}
message AddControlReq {
ControlEntity control = 1;
}
message ControlRequest {
ControlEntity control = 1;
}
message AuthenticateReq {
string login = 1;
string password = 2;
}
message PersonaReply {
PersonaEntity persona = 1;
}
service FivetService {
rpc authenticate(AuthenticateReq) returns(PersonaReply) {}
rpc addControl(AddControlReq) returns(FichaMedicaReply) {}
rpc retrieveFicha(RetrieveFichaMedicaReq) returns(FichaMedicaReply) {}
rpc searchFicha(SearchFichaMedicaReq) returns (stream FichaMedicaEntity) {}
rpc addFicha(AddFichaReq) returns(FichaMedicaReply) {}
rpc addPersona(AddPersonaReq) returns (PersonaReply) {}
}
Acerca de cómo se construye un programa siguiendo este modelo que está aquí abajo:
Espero que esto les sirva de apoyo!!!
Muchas gracias!!!
Marcelo Andrés Lam Biaggini