O Projeto LABMedicine consiste em uma API para gestão hospitalar que permite o cadastro e gestão de médicos, enfermeiros e pacientes além do cadastro e listagem de atentimentos.
Projeto foi desenvolvido utilizando a linguagem javascript com Node.js framework e banco de dados PostgreSQL.
https://drive.google.com/file/d/1TgatvSkL_zVhRnYMggKyW_LDfgEGhQm4/view?usp=share_link
Seguem abaixo as depêndencias externas utilizadas:
| Plugin | Uso |
|---|---|
| Express | Gerenciar requisições de diferentes verbos HTTP em diferentes URLs |
| Sequelize | Gerenciar modelos da aplicação |
| Pg, Pg-hstore | Cliente PostgreSQL, Serializa e desserializa dados JSON |
| YUP | Validação dos dados |
| Dotenv | Carrega variáveis de ambiente de um arquivo .env |
O projeto foi dividido em uma estruturas de pastas para organizar os models, controllers, middlewares e database
| Local | Uso |
|---|---|
| /src/models | Contém todos modelos da aplicação |
| /src/controllers | Contém todos modelos da aplicação |
| /src/middlewares | Contém os middlewares de validação |
| /src/database | Contém todos modelos da aplicação |
Foi utilizado o app https://dbdiagram.io/ para modelagem previa da base postgres.
Acesse a documentação do modelo: https://dbdocs.io/alexandre_mariano1/labmedicinebd
Acesse no NOTION
-Clonar o repositório https://github.com/devmariano/Projeto_Avaliativo_API_Modulo01.git
-Criar uma base de dados no PostgreSQL com nome labmedicinebd
-Criar um arquivo .env na raiz do projeto com os seguintes parametros:
DIALECT_DATABASE=''
HOST_DATABASE=''
USER_DATABASE=''
PASSWORD_DATABASE=''
PORT_DATABASE=''
PORT_API=''
NAME_DATABASE=''
-No prompt de comando executar :
npm install -Executar em seguida:
npm startAqui você pode testar os endpoints online: https://labmedicine-api.onrender.com (Atenção: por se tratar de um serviço gratuito a primeira requisição pode demorar até 30 segundos até o serviço iniciar, as seguintes são em velocidade normal)
ℹ️ disponivel até 20/07/2023
POST /api/pacientes| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Autoincremental. Chave primaria |
nome_completo |
string |
Obrigatório. Nome do paciente |
genero |
string |
Genero do paciente |
data_nascimento |
date |
Obrigatório Data de nascimento do paciente |
cpf |
string |
Obrigatório. CPF do paciente, único e válido |
telefone |
string |
Telefone do paciente |
contato_emergencia |
string |
Obrigatório. Nome do contato de emergência |
lista_alergias |
string |
Alergias do paciente |
lista_cuidados |
string |
Cuidados especiais do paciente |
convenio |
string |
Convênio do paciente |
status_atendimento |
string |
Valores: 'AGUARDANDO_ATENDIMENTO','EM_ATENDIMENTO','ATENDIDO','NAO_ATENDIDO' |
Request JSON exemplo
{
"nome_completo":"Paulo Nassi",
"genero":"MASCULINO",
"data_nascimento":"1984-03-01",
"cpf":"47360294045",
"telefone":"21 984569813",
"contato_emergencia":"Marina Nassi",
"lista_alergias":"Dipirona",
"lista_cuidados":"nenhum",
"convenio":"Amil",
"status_atendimento":"AGUARDANDO_ATENDIMENTO"
}| Response Status | Descrição |
|---|---|
201 |
sucesso |
400 |
dados inválidos |
409 |
CPF já cadastrado |
500 |
erro interno |
PUT /api/pacientes/:id| Parâmetro | Tipo | Descrição |
|---|---|---|
nome_completo |
string |
Nome do paciente |
genero |
string |
Genero do paciente |
data_nascimento |
date |
Data de nascimento do paciente |
cpf |
string |
CPF do paciente, único e válido |
telefone |
string |
Telefone do paciente |
contato_emergencia |
string |
Nome do contato de emergência |
lista_alergias |
string |
Alergias do paciente |
lista_cuidados |
string |
Cuidados especiais do paciente |
convenio |
string |
Convênio do paciente |
Request JSON exemplo
/api/pacientes/1 {
"telefone":"'1 9245698115",
"convenio":"Unimed"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
400 |
dados inválidos |
404 |
não encontrado registro com o código informado |
500 |
erro interno |
PUT /api/pacientes/:id/status| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
status_atendimento |
string |
Valores: 'AGUARDANDO_ATENDIMENTO','EM_ATENDIMENTO','ATENDIDO','NAO_ATENDIDO' |
Request JSON exemplo
/api/pacientes/1/status {
"status_atendimento":"EM_ATENDIMENTO"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
400 |
dados inválidos |
404 |
não encontrado registro com o código informado |
500 |
erro interno |
GET /api/pacientesNão é necessario resquest body
Opcionalmente pode ser utilizado no patch um query param informando: AGUARDANDO_ATENDIMENTO, EM_ATENDIMENTO, ATENDIDO e NAO_ATENDIDO
Exemplo:
/api/pacientes?status=ATENDIDO
| Parâmetro | Tipo | Descrição |
|---|---|---|
status_atendimento |
string |
Valores: 'AGUARDANDO_ATENDIMENTO','EM_ATENDIMENTO','ATENDIDO','NAO_ATENDIDO' |
Exemplo de resposta:
{
"id": 1,
"nome_completo":"Paulo Nassi",
"genero":"MASCULINO",
"data_nascimento":"1984-03-01",
"cpf":"47360294045",
"telefone":"21 984569813",
"contato_emergencia":"Marina Nassi",
"lista_alergias":"Dipirona",
"lista_cuidados":"nenhum",
"convenio":"Amil",
"status_atendimento": "ATENDIDO",
"total_atendimentos": 1,
"createdAt": "2023-04-19T10:32:32.796Z",
"updatedAt": "2023-04-20T21:14:53.099Z"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
GET /api/pacientes/:idNão é necessario resquest body
Request exemplo:
/api/pacientes/1
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
Exemplo de resposta:
{
"id": 1,
"nome_completo":"Paulo Nassi",
"genero":"MASCULINO",
"data_nascimento":"1984-03-01",
"cpf":"47360294045",
"telefone":"21 984569813",
"contato_emergencia":"Marina Nassi",
"lista_alergias":"Dipirona",
"lista_cuidados":"nenhum",
"convenio":"Amil",
"status_atendimento": "ATENDIDO",
"total_atendimentos": 1,
"createdAt": "2023-04-19T10:32:32.796Z",
"updatedAt": "2023-04-20T21:14:53.099Z"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
404 |
não encontrado registro com o código informado |
DELETE /api/pacientes/:idNão é necessario resquest body
Request exemplo:
/api/pacientes/1
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
Não há response no body em caso de sucesso
| Response Status | Descrição |
|---|---|
204 |
sucesso |
404 |
não encontrado registro com o código informado |
POST /api/medicos| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Autoincremental. Chave primaria |
nome_completo |
string |
Obrigatório. Nome do medico |
genero |
string |
Genero do medico |
data_nascimento |
date |
Obrigatório Data de nascimento do medico |
cpf |
string |
Obrigatório. CPF do medico, único e válido |
telefone |
string |
Telefone do medico |
instituicao_ensino_formacao |
string |
Obrigatório. Instituição de formação |
crm_uf |
string |
Obrigatório Cadastro do CRM/UF |
especializacao_clinica |
string |
Obrigatório Valores: CLINICO_GERAL, ANESTESISTA, DERMATOLOGIA, GINECOLOGIA, NEUROLOGIA, PEDIATRIA, PSIQUIATRIA, ORTOPEDIA |
estado_no_sistema |
string |
Valores: 'ATIVO','INATIVO' , valor padrão 'ATIVO' |
Request JSON exemplo
{
"nome_completo":"Roberto Farias",
"genero":"MASCULINO",
"data_nascimento":"1982-03-01",
"cpf":"22023336066",
"telefone":"21 984569813",
"instituicao_ensino_formacao":"FAEC Med",
"crm_uf":"76870690",
"especializacao_clinica":"ORTOPEDIA",
"estado_no_sistema": "ATIVO"
}| Response Status | Descrição |
|---|---|
201 |
sucesso |
400 |
dados inválidos |
409 |
CPF já cadastrado |
500 |
erro interno |
PUT /api/medicos/:id| Parâmetro | Tipo | Descrição |
|---|---|---|
nome_completo |
string |
Nome do medico |
genero |
string |
Genero do medico |
data_nascimento |
date |
Data de nascimento do medico |
cpf |
string |
CPF do medico, único e válido |
telefone |
string |
Telefone do medico |
instituicao_ensino_formacao |
string |
Instituição de formação |
crm_uf |
string |
Cadastro do CRM/UF |
especializacao_clinica |
string |
Valores: CLINICO_GERAL, ANESTESISTA, DERMATOLOGIA, GINECOLOGIA, NEUROLOGIA, PEDIATRIA, PSIQUIATRIA, ORTOPEDIA |
Request JSON exemplo
/api/medicos/1 {
"telefone":"11 9245698345"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
400 |
dados inválidos |
404 |
não encontrado registro com o código informado |
500 |
erro interno |
PUT /api/medicos/:id/status| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
estado_no_sistema |
string |
Valores: 'ATIVO','INATIVO' |
Request JSON exemplo
/api/medicos/1/status {
"status_atendimento":"INATIVO"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
400 |
dados inválidos |
404 |
não encontrado registro com o código informado |
500 |
erro interno |
GET /api/medicosNão é necessario resquest body
Opcionalmente pode ser utilizado no patch um query param informando: ATIVO, INATIVO
Exemplo:
/api/medicos?status=INATIVO
| Parâmetro | Tipo | Descrição |
|---|---|---|
status_atendimento |
string |
Valores: 'ATIVO', 'INATIVO' |
Exemplo de resposta:
{
"id": 1,
"nome_completo":"Roberto Farias",
"genero":"MASCULINO",
"data_nascimento":"1982-03-01",
"cpf":"22023336066",
"telefone":"21 984569813",
"instituicao_ensino_formacao":"FAEC Med",
"crm_uf":"76870690",
"especializacao_clinica":"ORTOPEDIA",
"estado_no_sistema": "INATIVO"
"total_atendimentos": 1,
"createdAt": "2023-04-19T12:00:46.855Z",
"updatedAt": "2023-04-21T00:02:47.509Z"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
GET /api/medicos/:idNão é necessario resquest body
Request exemplo:
/api/medicos/1
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
Exemplo de resposta:
{
"id": 1,
"nome_completo":"Roberto Farias",
"genero":"MASCULINO",
"data_nascimento":"1982-03-01",
"cpf":"22023336066",
"telefone":"21 984569813",
"instituicao_ensino_formacao":"FAEC Med",
"crm_uf":"76870690",
"especializacao_clinica":"ORTOPEDIA",
"estado_no_sistema": "ATIVO"
"total_atendimentos": 1,
"createdAt": "2023-04-19T12:00:46.855Z",
"updatedAt": "2023-04-21T00:02:47.509Z"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
404 |
não encontrado registro com o código informado |
DELETE /api/medicos/:idNão é necessario resquest body
Request exemplo:
/api/medicos/1
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
Não há response no body em caso de sucesso
| Response Status | Descrição |
|---|---|
204 |
sucesso |
404 |
não encontrado registro com o código informado |
POST /api/enfermeiros| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Autoincremental. Chave primaria |
nome_completo |
string |
Obrigatório. Nome do enfermeiro |
genero |
string |
Genero do enfermeiro |
data_nascimento |
date |
Obrigatório Data de nascimento do enfermeiro |
cpf |
string |
Obrigatório. CPF do enfermeiro, único e válido |
telefone |
string |
Telefone do enfermeiro |
instituicao_ensino_formacao |
string |
Obrigatório. Instituição de formação |
cofen_uf |
string |
Obrigatório Cadastro do COFEN/UF |
Request JSON exemplo
{
"nome_completo":"Ana Leme",
"genero":"FEMININO",
"data_nascimento":"1987-02-01",
"cpf":"99686191089",
"telefone":"21 984569813",
"instituicao_ensino_formacao":"Fac Enf MG",
"cofen_uf":"8619108"
}| Response Status | Descrição |
|---|---|
201 |
sucesso |
400 |
dados inválidos |
409 |
CPF já cadastrado |
500 |
erro interno |
PUT /api/enfermeiros/:id| Parâmetro | Tipo | Descrição |
|---|---|---|
nome_completo |
string |
Nome do enfermeiro |
genero |
string |
Genero do enfermeiro |
data_nascimento |
date |
Data de nascimento do enfermeiro |
cpf |
string |
CPF do enfermeiro, único e válido |
telefone |
string |
Telefone do enfermeiro |
instituicao_ensino_formacao |
string |
Instituição de formação |
cofen_uf |
string |
Cadastro do COFEN/UF |
Request JSON exemplo
/api/enfermeiros/1 {
"telefone":"11 845698345",
"instituicao_ensino_formacao": "Faculdade Pan",
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
400 |
dados inválidos |
404 |
não encontrado registro com o código informado |
500 |
erro interno |
GET /api/enfermeirosNão é necessario resquest body
Exemplo de resposta:
{
"id": 1,
"nome_completo":"Ana Leme",
"genero":"FEMININO",
"data_nascimento":"1987-02-01",
"cpf":"99686191089",
"telefone":"21 984569813",
"instituicao_ensino_formacao":"Fac Enf MG",
"cofen_uf":"8619108"
"updatedAt": "2023-04-20T00:57:43.465Z",
"createdAt": "2023-04-20T00:57:43.465Z"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
GET /api/enfermeiros/:idNão é necessario resquest body
Request exemplo:
/api/enfermeiros/1
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
Exemplo de resposta:
{
"id": 1,
"nome_completo":"Ana Leme",
"genero":"FEMININO",
"data_nascimento":"1987-02-01",
"cpf":"99686191089",
"telefone":"21 984569813",
"instituicao_ensino_formacao":"Fac Enf MG",
"cofen_uf":"8619108"
"updatedAt": "2023-04-20T00:57:43.465Z",
"createdAt": "2023-04-20T00:57:43.465Z"
}| Response Status | Descrição |
|---|---|
200 |
sucesso |
404 |
não encontrado registro com o código informado |
DELETE /api/enfermeiros/:idNão é necessario resquest body
Request exemplo:
/api/enfermeiros/1
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Obrigatório número inteiro chave primaria |
Não há response no body em caso de sucesso
| Response Status | Descrição |
|---|---|
204 |
sucesso |
404 |
não encontrado registro com o código informado |
POST /api/atendimentos| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Autoincremental. Chave primaria |
paciente_id |
`int | Obrigatório. Chave estrangeira do paciente |
medico_id |
`int | Obrigatório. Chave estrangeira do medico |
Request JSON exemplo
{
"paciente_id":"2",
"medico_id":"1"
}| Response Status | Descrição |
|---|---|
201 |
sucesso |
400 |
dados inválidos |
404 |
medico ou paciente não encontrados no sistema |
500 |
erro interno |
GET /api/atendimentosNão é necessario resquest body
Opcionalmente podem ser utilizados no patch dois query params informando: medico_id ou paciente_id
Exemplo query params médico:
/api/atendimentos?medico=1 retorna todos atendimentos do médico especificado
Exemplo query params paciente:
/api/atendimentos?paciente=1 retorna todos atendimentos do paciente especificado
| Parâmetro | Tipo | Descrição |
|---|---|---|
id |
int |
Chave primaria |
paciente_id |
int |
querie params não obrigatorio. Chave estrangeira do paciente |
medico_id |
int |
querie params não obrigatorio. Chave estrangeira do medico |
Exemplo de resposta:
[
{
"id": 1,
"paciente_id": 13,
"medico_id": 1,
"createdAt": "2023-04-20T23:56:33.120Z",
"updatedAt": "2023-04-20T23:56:33.120Z",
"pacienteId": 13,
"medicoId": 1
},
{
"id": 2,
"paciente_id": 14,
"medico_id": 1,
"createdAt": "2023-04-20T23:57:25.088Z",
"updatedAt": "2023-04-20T23:57:25.088Z",
"pacienteId": 14,
"medicoId": 1
}
]| Response Status | Descrição |
|---|---|
200 |
sucesso |
404 |
medico ou paciente não encontrados no sistema |
500 |
erro interno |
| LAB365 - Espaço do SENAI para desenvolver habilidades do futuro. |
| Alexandre Mariano :: @devmariano |



