Ramonrune / nhs-api

NFC Health System API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NHS API

Projeto de Conclusão de Curso apresentado
como requisito parcial para obtenção do grau
Tecnólogo em Análise e Desenvolvimento de
Sistemas, pela Faculdade de Tecnologia de
Americana.
Time: 
RAMON LACAVA GUTIERREZ GONÇALES
LEONARDO MARTINS DE OLIVEIRA
NATÁLIA AKINA UESUGI
Orientador: Prof. Dr. Kleber de Oliveira Andrade
Área de concentração: Engenharia de Software

Americana, SP
2018


Este trabalho se trata de uma plataforma de saúde digital unificada, que permite melhor gestão de informações de saúde e processos inteligentes. 
A plataforma visa auxiliar o dia a dia das instituições de saúde e pacientes, buscando diminuir a quantidade de erros na área médica através de uma coleção consistente de dados do paciente, possibilitando que o sistema atue em qualquer instituição de saúde, e que tenha uma melhor eficiência e eficácia em atendimentos, sejam estes comuns ou de urgência e emergência.
O trabalho foi realizado em colaboração com a universidade de Durban, na África do Sul. 
A metodologia empregada durante o decorrer do trabalho foi o SCRUM, que visa a transparência, dinamicidade e agrega valor ao produto final. 
Foram desenvolvidos dois aplicativos para dispositivos móveis e um para computador, que realizam gestão de exames, diagnósticos, dados de saúde, medicamentos, instituições, médicos(as), dentre outros. 
Diversos requisitos foram coletados de forma dinâmica com as equipes sul africanas para possibilitar a integração dos sistemas tanto no Brasil quanto na África do Sul.
Todo o desenvolvimento do sistema se voltou para agregar valor aos processos e interfaces de usuário (se focando em facilidade de uso e experiencia de usuário).
Os resultados foram dois aplicativos publicados na Google Play e um sistema computadorizado, sendo que os três estão em fase de testes na África do Sul.
Conclui-se que o sistema poderá auxiliar muito no ambiente da saúde, facilitando a gestão, fornecendo processos inteligentes e uma maior agilidade no atendimento, permitindo com que pacientes possuam acesso a seus dados de saúde, e com que funcionários de saúde possuam uma maior facilidade e uma maior quantidade de dados relevantes para análise durante os atendimentos.
Palavras Chave: Saúde; Sistema; Internacionalização; Prontuário Médico; NFC; Arduino; Android; Java

Formato de JSON de retorno

Tabela - Formato do retorno do JSON com base nas classes de retorno

Formato JSON retornado pelas classes

MessageModel

MessageListModel

MessageNewUserModel

MessageAuthModel

{

“success”: true,

“code”: 0,

“description” : “Descrição”

}

{

“success”: true,

“code”: 0,

“description” : “Descrição”,

“list” : []

}

{

“success”: true,

“code”: 0,

“description” : “Descrição”,

“id” : “”,

“userModel” : {}

}

{

“success”: true,

“code”: 0,

“description” : “”,

“userId” : “”,

“token” : “”,

“userType” : “”,

“username” : “”,

“secretCode” : “”

}

API de usuários

Tabela - Recursos da API de usuário

Recursos disponibilizados pela API de usuários

Endereço

Método

Autenticação

Descrição

/user

POST

Sim

Adiciona um usuário

/user/checkUserStatus

POST

Não

Checa se um usuário já está cadastrado

/user

PUT

Sim

Atualiza um usuário

/user/updateUserType

PUT

Sim

Atualiza o tipo de usuário (ex: paciente passa a ser médico).

/user

DELETE

Sim

Exclui um usuário

/user/{idUser}

GET

Sim

Obtém os dados do usuário

/user/secretCode

GET

Sim

Obtém o código secreto do usuário.

/user/search/{login}

GET

Sim

Obtem os dados do usuário a partir do login.

/user/auth

POST

Não

Autentica o usuário em relação as apis que possuem autenticação.

/user/healthinstitutionbind/{idUser}

GET

Sim

Obtém as instituições de saúde que o usuário está vinculado.

/user/sendPasswordMail

POST

Sim

Envia um e-mail com login e senha para o usuário recém-criado.

/user/uploadImage

PUT

Sim

Atualiza a imagem do usuário.

/user/image

GET

Não

Obtém a imagem do usuário.

Fonte: Elaborado pelo autor

API de Paciente

Tabela - Recursos da API de paciente

Recursos disponibilizados pela API de paciente

Endereço

Método

Autenticação

Descrição

/patient

POST

Sim

Adiciona um paciente

/patient

PUT

Sim

Altera um paciente

/patient/patientData

GET

Sim

Retorna os dados do paciente

/patient/tagRegister

POST

Sim

Adiciona um equipamento de acesso ao paciente

/patient/tagUpdate

PUT

Sim

Atualiza o equipamento de acesso

/patient/tagDelete

DELETE

Sim

Exclui o equipamento de acesso.

/patient/listPatientTag

GET

Sim

Lista os equipamentos de acesso do usuário

/patient/tagExist

GET

Sim

Verifica se o equipamento de acesso já está cadastrado.

/patient/tag

GET

Sim

Obtém o paciente a partir do equipamento de acesso.

/patient/diagnosis

POST

Sim

Adiciona um diagnóstico.

/patient/diagnosis

PUT

Sim

Altera um diagnóstico

/patient/diagnosis

DELETE

Sim

Exclui um diagnóstico

/patient/diagnosis

GET

Sim

Obtém uma lista de diagnósticos de um paciente.

/patient/diagnosis/procedures

GET

Sim

Obtém uma lista de procedimentos realizados em um diagnóstico.

/patient/disease

GET

Sim

Obtém uma lista de doenças cadastradas.

/patient/disease

POST

Sim

Adiciona uma doença ao paciente.

/patient/disease

PUT

Sim

Altera uma doença do paciente.

/patient/disease

DELETE

Sim

Exclui uma doença do paciente

/patient/patientDisease

GET

Sim

Obtém uma lista de doenças do paciente

/patient/exam

POST

Sim

Adiciona um exame

/patient/exam

PUT

Sim

Altera um exame

/patient/exam

DELETE

Sim

Exclui um exame

/patient/exam

GET

Sim

Obtém um exame

/patient/exam/attachment

POST

Sim

Adiciona um anexo ao exame

/patient/exam/attachment

DELETE

Sim

Exclui um anexo do exame

/patient/exam/attachment

GET

Sim

Obtém uma lista de anexos de um exame

/patient/listMedicines

GET

Sim

Lista os medicamentos cadastrados.

/patient/registerMedicine

POST

Sim

Adiciona um medicamento

/patient/bindMedicine

POST

Sim

Adiciona um medicamento ao paciente

/patient/unbindMedicine/{idPatient}

DELETE

Sim

Desvincula um medicamento do paciente

/patient/listPatientMedicines

GET

Sim

Obtém uma lista de medicamentos do paciente.

/patient/diagnosis/image

GET

Sim

Obtém a assinatura do diagnóstico.

/patient/exam/attachment/document

GET

Sim

Obtém o anexo do exame.

/patient/listPatientHistory

GET

Sim

Obtém o histórico médico do paciente

/patient/listKnownPhysicians

GET

Sim

Lista os médicos conhecidos pelo paciente

 

            Fonte: Elaborado pelo autor

API de Médico

Tabela - Recursos disponibilizados pela API de médico(a)

Recursos disponibilizados pela API de médico(a)

Endereço

Método

Autenticação

Descrição

/physician

POST

Sim

Adiciona um médico(a)

/physician

PUT

Sim

Altera um médico(a)

/physician

GET

Sim

Retorna os dados do(a) médico(a)

/physician/userdata

GET

Sim

Retorna dados do usuário.

/physician/listSpecializations

GET

Sim

Lista as especializações do médico

/physician/specialization

GET

Sim

Lista todas as especializações de um determinado país

/physician/bindSpecialization

POST

Sim

Adiciona uma especialização ao médico

/physician/unbindSpecialization

DELETE

Sim

Remove uma especialização do médico.

/physician/listDiagnosisHistory

GET

Sim

Lista o histórico de diagnóstico do(a) médico(a) em uma instituição de saúde

/physician/listExamHistory

GET

Sim

Lista o histórico de diagnóstico do(a) médico(a) em uma instituição de saúde

/physician/listPhysicianInNearArea

GET

Sim

Lista os médicos próximos de uma determinada latitude e longitude

/physician/physicianAttendanceRegister

POST

Sim

Registra um atendimento médico em uma instituição de saúde.

/physician/listPhysicianAttendance

GET

Sim

Lista os atendimentos feitos pelo(a) médico(a) em uma instituição de saúde.

/physician/listAttendanceGraph

GET

Não

Lista os dados de atendimento do médico no mês corrente.

Fonte: Elaborado pelo autor

API de Enfermeira

Tabela - Recursos disponibilizados pela API de enfermeiro(a)

Recursos disponibilizados pela API de enfermeiro(a)

Endereço

Método

Autenticação

Descrição

/nurse

POST

Sim

Adiciona um enfermeiro(a)

/nurse

PUT

Sim

Altera um enfermeiro(a)

/nurse

GET

Sim

Retorna os dados do(a) enfermeiro(a)

/nurse/listSpecializations

GET

Sim

Lista as especializações que o(a) enfermeiro(a) possui

/nurse/bindSpecialization

POST

Sim

Adiciona uma especialização a um(a) enfermeiro(a)

/nurse/unbindSpecialization

DELETE

Sim

Remove uma especialização do(a) enfermeiro(a)

/nurse/addAttendance

POST

Sim

Adiciona um atendimento

/nurse/updateAttendance

POST

Sim

Atualiza um atendimento

/nurse/listAttendance

GET

Sim

Lista os atendimentos pelo(a) enfermeiro(a) em uma instituição de saúde

Fonte: Elaborado pelo autor

API de Instituição de Saúde

Tabela - Recursos disponibilizados pela API de instituição de saúde

Recursos disponibilizados pela API de instituição de saúde

Endereço

Método

Autenticação

Descrição

/healthinstitution

POST

Sim

Adiciona uma instituição

/healthinstitution

PUT

Sim

Altera uma instituição

/healthinstitution

GET

Sim

Retorna uma lista de instituições de saúde dado uma posição geográfica.

/healthinstitution/list

GET

Não

Lista as instituições de saúde de modo paginado.

/healthinstitution

DELETE

Sim

Remove uma instituição

/healthinstitution/{idHealthInstitution}

GET

Sim

Obtém os dados de uma instituição de saúde

/healthinstitution/bind

POST

Sim

Vincula um usuário a uma instituição de saúde

/healthinstitution/updatebind

PUT

Sim

Atualiza o vínculo do usuário com a instituição

/healthinstitution/deletebind

DELETE

Sim

Remove o vínculo do usuário com a instituição

/healthinstitution/userlist/{idHealthInstitution}

GET

Sim

Retorna os usuários de uma dada instituição

/healthinstitution/image

GET

Sim

Retorna a foto da instituição de saúde

/healthinstitution/physician

GET

Sim

Retorna médicos(as) e suas respectivas especializações

/healthinstitution/nurse

GET

Sim

Retorna as enfermeiras de uma instituição de saúde

/healthinstitution/waitlist/{idHealthInstitution}

POST

Sim

Adiciona um diagnóstico a lista de espera do hospital

/healthinstitution/updatewaitlist/{idHealthInstitution}

POST

Sim

Atualiza a chegada de um paciente na lista do hospital

Fonte: Elaborado pelo autor

API de Trilha de Auditoria

Tabela - Recursos disponibilizados pela API de trilha de auditoria

Recursos disponibilizados pela API de trilha de auditoria

Endereço

Operação

Autenticação

Descrição

/auditTrail/listAuditTrail

GET

Sim

Lista a trilha de auditoria dada uma determinada data

Fonte: Elaborado pelo autor

 

API de Erro

Tabela - Recursos disponibilizados pela API de erro

Recursos disponibilizados pela API de trilha de erro

Endereço

Método

Autenticação

Descrição

/errorlog/list

GET

Não

Lista a quantidade de erros em forma de gráfico (considera o mês atual).

/errorlog/listErrors

GET

Sim

Lista os erros que ocorreram dado uma determinada data.

Fonte: Elaborado pelo autor

Recursos e Ferramentas utilizados

Esta seção contempla as ferramentas de programação e os conceitos necessários para o desenvolvimento do NFC Health System.

  • Android Studio: ambiente de desenvolvimento integrado (IDE) oficial para o desenvolvimento de aplicativos Android, baseado no InteliJ IDEA[1], que oferece um ambiente unificado para o desenvolvimento de aplicativos. No qual é possível desenvolver, fazer debugs, testes e interfaces para smartphones e tablets Android e dispositivos Android Wear, Android TV e Android Auto (ANDROID, 2017).
  • Eclipse: É uma plataforma aberta que facilita o processo de desenvolvimento, fornecendo ferramentas para codificação, construção, execução e debug de aplicações (UMBC, 2008). Esta ferramenta suporta o desenvolvimento em diversas linguagens e foi utilizada para o desenvolvimento dos webservices do sistema.
  • SQL Server Management Studio: O SSMS é um ambiente integrado que é utilizado para gerenciamento da infraestrutura de SQL, atuando do SQL Server para o Banco de dados SQL do Azure. Fornece ferramentas para configurar, monitorar e gerenciar as instâncias do SQL, e para implantar, monitorar e atualizar componentes da camada de dados (Microsoft, 2018).
  • Netbeans: Permite que de forma rápida e fácil seja desenvolvido aplicações em Java destkop, mobile, web, assim como aplicações HTML5, JavaScript e CSS. A IDE também fornece boas ferramentas para PHP, C e C++. É uma plataforma de código aberto com uma vasta comunidade de usuários e desenvolvedores (Netbeans, 2018). É utilizado para o desenvolvimento do sistema desktop.
  • NFC (Near Field Communication): Tecnologia de curto alcance, distância de cerca de 4 a 20 centímetros (TORRES, 2008), alta frequência e baixa largura de banda, permitindo a comunicação sem fio através de dois dispositivos habilitados com NFC (COSKUN, 2011).
  • Adesivos NFC: Equipamentos de acesso utilizados, comumente conhecidos como INLAY, possuem apenas DIE (pastilha de silício onde se encontra o circuito do NFC). Ao adicionar um encapsulamento plástico ao INLAY, o resultado é uma tag com maior durabilidade e resistência, porem esta possui um custo maior do que as que não estão encapsuladas (CUNHA, 2016).
  • Módulo leitor RFID NFC PN532: O PN532 é um módulo de alta integração para comunicação sem contato que atua na frequência de 13.56 MHz. O modulo de transmissão utiliza um conceito de modulação e demodulação completamente integrados para diferentes tipos de comunicação. O módulo suporta tanto leitura quanto escrita e funciona em uma distância de até 7 centímetros. É utilizado para a leitura dos equipamentos de acesso dos pacientes.
  • Arduino: O Arduino é um placa eletrônica de código aberto criado pelo time Massimo Banzi, David Cuartilles, Tom Igoe, Gianluca Martino, e David Mellis com o objetivo de desenvolver hardwares micro controladores de fácil uso que estaria disponível a todos (BARRETT, 2013).
  • REST: REST (Representational State Transfer) define um conjunto de princípios arquiteturais os quais podem ser utilizados para projetar web services focados em recursos do sistema, incluindo como os estados dos recursos são endereçados e transferidos através do protocolo HTTP[2] por uma ampla variedade de clientes escritos em diferentes linguagens (RODRIGUEZ, 2008). Também pode ser definido como um estilo híbrido derivado de vários estilos de arquitetura baseados em rede e combinado com restrições adicionais que definem uma interface de conexão uniforme (FIELDING, 2000). Este conjunto de princípios arquiteturais foi escolhido devido à grande popularidade que vem ganhando em meio aos desenvolvedores, juntamente a diversas implementações nas mais variadas linguagens de programação e bibliotecas (RODRIGUEZ, 2008).
  • Android: É um Sistema Operacional para dispositivos móveis que foi criado com base em Linux de código aberto (ANDROID DEVELOPERS, 2018). Atualmente, o Android pode ser encontrado em diversos dispositivos, como smartphones, relógios, TVs e até mesmo carros. De acordo com a pesquisa realizada pelo jornal EL PÁIS em Abril de 2017, o Android vem cada vez mais crescendo seus números de usuários, fazendo com que seja ultrapassado o número de usuários de Windows (MENDIOLA, 2017).
  • Java: É uma tecnologia utilizada para desenvolvimento de aplicações, que podem ser Web, Desktop ou até mesmo mobile, sendo orientada a objetos, compilada e interpretada. Atualmente o Java é uma das tecnologias mais utilizadas do mundo, que de acordo com a Oracle, cerca de 97% dos Desktops executam Java e 89% dos desktops nos Estados Unidos também o executa. Esses números se dão ao fato de que essa tecnologia foi projetada para permitir o desenvolvimento de aplicativos portáteis de alto desempenho e para que se possa abranger todas as plataformas possíveis (ORACLE, 2018).
  • C: É uma linguagem de médio nível (permitindo manipulação de bits, bytes e endereços), de grande portabilidade , estruturada e compilada (ou seja, o código em C é traduzido em um código-objeto que pode ser entendido pelo computador) e muito utilizado na programação de sistemas operacionais, compiladores, gerenciadores de banco de dados, dentre diversas outras aplicações (SCHILDT, 1997). A linguagem foi utilizada para o desenvolvimento do sistema em Arduino.
  • Armazenamento em nuvem: Armazenamento em nuvem é a disponibilização de capacidade de armazenamento em hardwares remotos (data-centers[3]), fazendo assim que não exista mais a necessidade do gerenciamento de hardware para armazenamento de dados(DRAGO et al., 2012).Existem muitas empresas que provêm armazenamento em nuvem como: Microsoft, Google, Amazon, dentre outros (DRAGO et al., 2012). Para este trabalho de graduação estaremos utilizando a Microsoft Azure para a utilização do serviço de armazenamento em nuvem.
  • Azure: É uma plataforma em na nuvem para hospedar aplicativos e simplificar o processo de desenvolvimento. A Microsoft Azure integra diversos serviços de nuvem muito uteis para desenvolver, testar, implantar e gerenciar aplicativos, tudo aproveitando a computação em nuvem (Microsoft, 2017).
  • SQL Server: É uma das partes centrais da plataforma de dados da Microsoft, sendo líder em sistemas de gerenciamento de banco de dados operacionais. É um sistema de gerenciamento de banco de dados relacional altamente escalável (Quackit, 2018).
  • Apache Tomcat: É um sistema de código aberto que implementa diversas tecnologias, tais como Java Servlet, Java Server Pages, dentre outras (Apache Tomcat, 2018). Ela é utilizada para o desenvolvimento dos webservices.
  • RabbitMQ: É um intermediário de mensagens construído em Erlang, que implementa o protocolo AMQP, responsável por aceitar e encaminhar mensagens. Basicamente, um produtor envia uma mensagem, que através de uma área de troca (Exchange) é encaminhada a uma fila, onde esta mensagem deverá ser consumida por um consumidor (RabbitMQ, 2018). É utilizado para gerenciamento das filas de atendimento dos(as) enfermeiros(as).
  • CloudAMQP: É um serviço que gerencia os servidores que executam RabbitMQ na nuvem (CloudAMQP, 2018).
  • Maven: É uma ferramenta de gestão de projetos e se baseia no conceito de projeto de objeto de modelo (POM). O maven pode gerenciar a criação, relatório e documentação de um projeto a partir de um centro de informações (Apache Maven, 2018). É a ferramenta utilizada para gestão dos projetos desenvolvidos em Java.
  • Pusher Channels: Fornece comunicação em tempo real entre servidor, aplicativo e dispositivos, sendo usado para notificações, chats, jogos, web, internet das coisas, e outros sistemas que utilizam comunicação em tempo real (Pusher, 2018).
  • Astah UML: É uma ferramenta que suporta os requerimentos da UML 2.x para construção de diagramas de classe, caso de uso, sequencia, máquina de estado, atividade, componente, dentre outros (ASTAH, 2018). É a ferramenta utilizada para a construção dos diagramas de classe e caso de uso.
  • Fritzing: É um sistema para automação de design eletrônico, com o objetivo de fornecer ferramentas fáceis para documentar e compartilhar projetos de computação física (FRITZING, 2018). É a ferramenta utilizada para construção do circuito do sistema Arduino.
  • Arduino IDE: Esta ferramenta de código aberto faz com que seja fácil desenvolver o código e realizar o upload para a placa utilizada (Arduino, 2018). É a ferramenta utilizada para o desenvolvimento do sistema do Arduino.

 

[1] Intellij IDEA é um JAVA IDE da empresa JetBrains. Disponível em: <https://www.jetbrains.com/idea>.

[2] O HTTP (Hypertext Transfer Protocol) é um protocolo no nível de aplicação para informações distribuídas, colaborativas e de hipermídia

[3] Centrais de armazenamento de dados

Licença

Copyright 2019 

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.