Universidade Federal do Rio de Janeiro Escola...
Transcript of Universidade Federal do Rio de Janeiro Escola...
Universidade Federal do Rio de Janeiro
Escola Politécnica
Departamento de Eletrônica e de Computação
ID Saúde - Software para Smartphone de gerenciamento de
saúde
Autor:
_________________________________________________
Timóteo Alvarenga da Silva Nascimento
Orientador:
_________________________________________________
Prof. Sergio Barbosa Villas-Boas
Examinador:
_________________________________________________
Prof. Aloysio Pedroza
Examinador:
_________________________________________________
Prof. Flávio Luis de Mello
DEL
Agosto de 2014
2
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO
Escola Politécnica – Departamento de Eletrônica e de Computação
Centro de Tecnologia, bloco H, sala H-217, Cidade Universitária
Rio de Janeiro – RJ CEP 21949-900
Este exemplar é de propriedade da Universidade Federal do Rio de Janeiro, que poderá
incluí-lo em base de dados, armazenar em computador, microfilmar ou adotar qualquer forma
de arquivamento.
É permitida a menção, reprodução parcial ou integral e a transmissão entre bibliotecas
deste trabalho, sem modificação de seu texto, em qualquer meio que esteja ou venha a ser
fixado, para pesquisa acadêmica, comentários e citações, desde que sem finalidade comercial e
que seja feita a referência bibliográfica completa.
Os conceitos expressos neste trabalho são de responsabilidade do(s) autor(es).
3
DEDICATÓRIA
Dedico esse trabalho à minha família, que sempre me deu suporte e incentivo ao estudo.
Se não fosse por ela não teria chegado até aqui.
4
AGRADECIMENTO
Acima de tudo, agradeço a Deus pela oportunidade de ter passado no vestibular e ter
entrado nesse curso. Agradeço à minha família por ser minha base, e aos meus amigos pelo
suporte e por sempre estarem ao meu lado. Agradeço aos professores do Departamento de
Eletrônica da Universidade Federal do Rio de Janeiro pelo conhecimento passado. E
finalmente, agradeço ao povo brasileiro, que paga seus impostos e que, de várias formas,
viabilizou a minha formação acadêmica.
5
RESUMO
O projeto consiste no desenvolvimento de um software para smartphone (Plataforma
Android) que auxilie a saúde do usuário. O aplicativo funciona como uma identidade da saúde
do usuário, guardando informações essenciais (Ex.: tipo sanguíneo), além de registros do
histórico médico do usuário (Ex.: alergias e histórico familiar). O aplicativo ainda possui outras
funcionalidades como encontrar serviços de saúde, mandar mensagem SOS para contatos de
emergência com a localização do usuário, e guardar registros da pressão sanguínea do usuário
mostrando esses dados de forma gráfica.
Palavras-Chave: smartphone, saúde, identidade, informações.
6
ABSTRACT
The project is the development of a mobile application (Android Platform) that would be
helpful to the wellness of the user. The application would work like the user’s health ID, storing
important data (e.g.: blood type) and medical history records (e.g.: allergy and family history).
The application would also have other functionalities as search for health services, send SOS
message to emergency contacts along with the user’s location, and store the user’s blood
pressure records showing these data graphically.
Key-words: Smartphone, health, ID, data.
7
SIGLAS
UFRJ – Universidade Federal do Rio de Janeiro
RF – Requisito Funcional
RN – Regra de Negócios
IDE – Integrated development environment
REST – Representational state transfer
JSON – JavaScript Object Notation
JPA – Java Persistence API
SOA-MC – Service Oriented Architecture - Multiple Clients
JDBC – Java Database Connectivity
API – Application Programming Interface
HTML – HyperText Markup Language
XML – Extensible Markup Language
URL – Uniform Resource Locator
GPS – Global Positioning System
CEP – Complex Event Processing
8
Sumário
1. Introdução .............................................................................................................................................. 11
1.1. Motivação ........................................................................................................................................ 11
1.2. Objetivo ............................................................................................................................................ 12
1.3. Metodologia ..................................................................................................................................... 12
1.4. Descrição .......................................................................................................................................... 12
2. Ferramentas e tecnologias utilizadas .................................................................................................... 14
2.1. Android ............................................................................................................................................ 14
2.2. REST ................................................................................................................................................. 14
2.3. JSON ................................................................................................................................................ 15
2.4. Apache Tomcat ................................................................................................................................ 15
2.5. JPA e Hibernate ............................................................................................................................... 16
2.6. PostgreSQL ...................................................................................................................................... 17
2.7. AChartEngine ................................................................................................................................... 17
2.8. Google Maps Android API ............................................................................................................... 18
2.9. SOA-MC – Arquitetura Orientada a Serviços-Múltiplos Clientes .................................................... 19
3. Desenvolvimento .................................................................................................................................... 20
3.1. WebService ....................................................................................................................................... 20
3.2. Android ............................................................................................................................................. 26
4. Requisitos de Software ........................................................................................................................... 30
4.1. Login ................................................................................................................................................. 30
4.2. Cadastrar novo usuário .................................................................................................................... 31
4.3. Tela principal .................................................................................................................................... 32
4.4. Cadastrar nova pessoa ..................................................................................................................... 33
4.5. Listar pessoas ................................................................................................................................... 34
4.6. Mensagem SOS ................................................................................................................................ 35
4.7. Serviços ............................................................................................................................................. 36
4.8. Grupos de informação ...................................................................................................................... 37
4.9. Lista de exames ................................................................................................................................ 38
4.10. Cadastro de exames ....................................................................................................................... 39
4.11. Pressão sanguínea ......................................................................................................................... 40
4.12. Cadastro de medição de pressão sanguínea .................................................................................. 41
5. Conclusões e Trabalhos Futuros ............................................................................................................. 42
9
5.1. Conclusões ........................................................................................................................................ 42
5.2. Trabalhos Futuros ............................................................................................................................ 42
Referências Bibliográficas .......................................................................................................................... 45
10
Lista de Figuras
2.1 – Utilização de um serviço REST com JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 15
2.2 – Utilização do JPA e Hibernate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 – Figura ilustrativa do uso do AChartEngine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 – Arquitetura SOA-MC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1 – Modelo do banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 – Propriedades de conexão com o Postgres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 – Entidade Usuario e seus atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4 – Configuração da persistence-unit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.5 – Classe AlergiaResource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.6 – Arquivo web.xml. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1 – Tela de Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2 – Tela de cadastro de novo usuário. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3 – Tela principal do aplicativo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.4 – Tela de cadastro de pessoa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.5 – Tela de listagem de pessoas cadastradas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.6 – Tela de envio de mensagem SOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.7 – Mensagem SOS enviada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.8 – Tela de serviços. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.9 – Tela de grupos de informações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.10 – Tela de listagem de exames. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.11 – Tela de cadastro de exames. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.12 – Tela de registros de medição de pressão sanguínea. . . . . . . . . . . . . . . . . . . . . . . . . 40
4.13 – Tela de cadastro de medição de pressão sanguínea. . . . . . . . . . . . . . . . . . . . . . . . . 41
6.1 – Aparelho de medição de pressão sanguínea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
11
Capítulo 1
Introdução
1.1 Motivação
Saúde é um tema que vem ganhando cada vez mais destaque nas mídias sociais.
Porém, muitas pessoas parecem não se preocupar com seu próprio corpo até o momento que
adoecem e são forçadas a agir de forma diferente. Este não é o cenário ideal, não deveria ser
necessário um susto para que a pessoa passasse a se preocupar mais com sua saúde. Já
dizia o velho ditado popular: “Prevenir é melhor do que remediar”.
Este é o foco que este trabalho procura dar, qualidade de vida e controle sobre a saúde.
Prevenir problemas de saúde, ou seja, se alimentar bem, fazer exercícios físicos, evitar stress,
e se consultar frequentemente, são apontados por muitos como os melhores métodos para ter
uma vida saudável. O único problema é que para muitos, falta motivação de seguir esse
caminho quando seu quadro atual não apresenta nenhuma complicação.
Além da prevenção de problemas de saúde, ter um controle maior sobre tudo
relacionado ao cuidado com seu corpo pode se mostrar uma ótima ferramenta para continuar a
ter uma vida saudável .
A tecnologia deve ser uma aliada da saúde. Seu potencial não só pode, mas como deve
ser explorado para ajudar as pessoas a ter mais qualidade de vida. Mas como aproveitar os
recursos que temos nos dias de hoje para ajudar nestes pontos citados? Como usar a
tecnologia para motivar uma pessoa a ter uma vida mais saudável?
O mercado de tecnologia móvel cresce com uma velocidade assustadora. Era difícil
imaginar há alguns anos atrás como seria relativamente fácil ter acesso a um smartphone.
Estima-se que até 2017, o Brasil terá 70.5 milhões de usuários de smartphone. Isso leva a crer
que uma aplicação voltada para saúde utilizando os recursos da tecnologia móvel irá não
somente favorecer as classes mais altas, mas também o público comum.
Este trabalho engloba o desenvolvimento de um aplicativo para Smartphones da
plataforma android que visa organizar e manter o histórico médico do usuário e de seus
dependentes, monitorar dados de sua saúde, compartilhar essas informações com seu médico,
e fornecer dicas de saúde personalizadas para o perfil do usuário. Dessa maneira, o usuário
terá controle sobre sua saúde e será constantemente motivado a cuidar melhor de si mesmo.
Sabe-se hoje que a anamnese (entrevista realizada pelo profissional de saúde ao seu
paciente), quando bem conduzida, é responsável por 85% do diagnóstico na clínica médica,
liberando 10% para o exame clínico (físico) e apenas 5% para os exames laboratoriais ou
complementares. [1] Manter uma ficha médica no celular ajuda a organizar seus dados de
saúde e torná-los mais facilmente acessíveis.
Essa facilidade no acesso a informações de saúde também é bastante valiosa em
12
situações de emergência. Com posse de informações sobre a saúde do indivíduo, o socorrista
tem uma atuação mais segura quando do início do atendimento de emergência, e um
planejamento adequado de ações posteriores.
1.2 Objetivo
O objetivo geral é, então, desenvolver um sistema prático, de fácil manuseio, e com
funcionalidades que possibilitam o usuário guardar e compartilhar informações relacionadas à
sua saúde, e receber dicas de saúde em um dispositivo que carrega sempre com ele. Com o
número de Smartphones cada vez mais crescente no mercado, este aplicativo pode se mostrar
ideal para esses tipos de serviço.
O desenvolvimento desse sistema tem como finalidade facilitar o cuidado com a saúde
do usuário. A informação é algo preciosa, e muitas vezes não sabemos o que estamos
perdendo quando não vamos atrás dela. Dessa maneira, trazer a informação diretamente para
o usuário é a forma mais prática de motiva-lo a ter mais qualidade de vida.
As próprias informações de saúde do usuário terão mais fácil acesso. A praticidade de
ter toda sua ficha médica no celular pode ser a diferença entre vida ou morte em uma situação
de emergência. Além disso, seria interessante para o médico ter fácil acesso a todas as
informações de seu paciente de maneira bem documentada e organizada.
Outras funcionalidades, como por exemplo, encontrar um serviço médico baseado na
localização do usuário medida pelo GPS do smartphone, pode ser extremamente útil em casos
de emergência. O resultado almejado se dará ao explorar ao máximo as funcionalidades de um
dispositivo celular moderno para questões ligadas a saúde de um indivíduo.
1.3 Metodologia
A metodologia Scrum é uma metodologia ágil e flexível para controlar o
desenvolvimento de um projeto. A Scrum Academic [2] é uma adaptação para ambientes
acadêmicos. Esta metodologia está de acordo com os princípios da Engenharia de Software, e
seu processo controla o atendimento aos requisitos impostos. Para isso, deve-se maximizar a
comunicação entre as partes interessadas com reuniões regulares, e dessa maneira, tornar o
processo mais interativo.
Na metodologia usada, foi definido primeiro a visão do projeto, e seu público alvo.
Depois, a definição de requisitos e regras de negócios. A implementação do aplicativo teve
como base os requisitos pré-definidos.
1.4 Descrição
No capítulo 2 serão expostas as ferramentas e tecnologias utilizadas para a realização
do projeto. Será detalhado o IDE utilizado, bem como o servidor e banco de dados.
O desenvolvimento do sistema é apresentado no capítulo 3. Nele serão explicitado os
detalhes técnicos de como o código foi construído para atender as funcionalidades desejadas.
13
O capítulo 4 apresenta os requisitos do sistema. Todas as suas funcionalidades são
expostas juntamente com as regras de negócio.
O capítulo 5 é a conclusão do trabalho. Nele são abordados os resultados obtidos.
No capítulo 6 são abordados os possíveis trabalhos futuros.
14
Capítulo 2
Ferramentas e tecnologias utilizadas
2.1 Android
O Android é o sistema operacional para dispositivos móveis criado pela Google e
presente em equipamentos feitos por empresas como LG, Samsung, Sony e Motorola. De
acordo com o Google, mais de um milhão e meio de aparelhos com o sistema operacional
Android são ativados todos os dias.
Android domina 81% do mercado global de Smartphones [3]. Isso significa que quatro
em cada cinco Smartphones no mundo usam o sistema operacional da Google. O Google Play
é a loja online para Android onde o usuário pode baixar aplicativos, filmes, música, livros de
maneira gratuita ou comprando esses conteúdos. Em Abril de 2014, o número de aplicativos
disponíveis no Google Play era aproximadamente um milhão e 200 mil. São aplicativos de
todos os tipos e gostos que estão separados em áreas como games, educação, saúde, música,
finanças, viagens, metereologia, etc.
A linguagem de programação utilizada para criar aplicativos para a plataforma Android é
JAVA. O Android é uma plataforma de código aberto e o desenvolvimento de programas é
amplamente incentivado pelo Google. No website developer.android.com [4] podemos
encontrar todas as ferramentas necessárias e dicas para começar a desenvolver em Android.
2.2 REST
REST - “Representational State Transfer” [5] é um estilo de arquitetura para projetar
aplicações web. Ao invés de usar mecanismos complexos para se comunicar entre duas
máquinas, REST faz uso de protocolos padrões da web para a implementação de um web
service. Um serviço web RESTful usa as ações HTTP GET, PUT, DELETE e POST para
enviar, recuperar ou modificar dados do lado do servidor.
Normalmente, em um serviço web REST, as ações padrões HTTP são usadas da
seguinte forma:
GET - recupera ou realiza consulta de dados, geralmente usando critérios passados por
parâmetro.
PUT - cria uma nova entrada, registro.
DELETE - remove um recurso
POST - atualiza um recurso ou cria um recurso
Os dados que são transmitidos usam tipos MIME (Multipurpose Internet Mail
Extensions) padrão, incluindo imagens, vídeo, texto, HTML, XML e JSON. Uma característica
fundamental de um serviço REST é o uso de caminhos URL como parâmetros de consulta. Por
exemplo, um serviço web fictício para uma sistema de cadastro de usuários poderia retornar
15
uma lista de usuários ativos com esta URL: http://usuariossystem/usuario?ativo=true
2.3 JSON
JSON [6] é a abreviação de JavaScript Object Notation. É uma maneira fácil e
organizada de guardar informações. É feito pelo encapsulamento de uma coleção de dados
que pode ser acessado de uma forma lógica. Abaixo segue o exemplo de uma estrutura JSON:
var jason = {
"age" : "24",
"hometown" : "Missoula, MT",
"gender" : "male"
};
Um objeto JSON é identificado por estar dentro de colchetes. Dentro do objeto JSON,
temos uma série de pares de chave e valor. Na aplicação mobile, é usado uma biblioteca capaz
de ler dados no formato JSON.
Figura 2.1 - Utilização de um serviço REST com JSON
2.4 Apache Tomcat
O servidor Apache Tomcat [7] é um container Web de código fonte aberto baseado em
Java que foi criado para executar aplicações Web que utilizam tecnologias Servlets e JSPs. O
servidor Tomcat foi criado inicialmente como um subprojeto da Apache-Jakarta, no entanto,
devido a sua alta popularidade, acabou sendo designado para um projeto separado da Apache,
sendo assim mantido por um grupo de voluntários da comunidade de código aberto do Java.
16
Apache Tomcat é um servidor bastante estável com todas as características que um container
comercial que aplicações web possui. Atualmente as versões que ainda recebem suporte são
5.5x, 6.0x e 7.0x.
2.5 JPA e Hibernate
O Hibernate [8] é uma ferramenta para mapeamento objeto-relacional (ORM) open
source e é a líder de mercado, sendo a inspiração para a especificação Java Persistence API
(JPA) [8]. O Hibernate nasceu sem JPA, mas hoje em dia é comum acessar o Hibernate pela
especificação JPA.
Figura 2.2 – Utilização do JPA com Hibernate
O Hibernate abstrai o seu código SQL, toda a camada JDBC e o SQL será gerado em
tempo de execução. Mais que isso, ele vai gerar o SQL que serve para um determinado banco
de dados, já que cada banco fala um "dialeto" diferente dessa linguagem. Assim há também a
possibilidade de trocar de banco de dados sem ter de alterar código Java, já que isso fica de
responsabilidade da ferramenta.
Para mapear uma classe, basta adicionar algumas poucas anotações em nosso código.
Anotação é um recurso do Java que permite inserir metadados em relação a nossa classe,
atributos e métodos. Essas anotações depois poderão ser lidas por frameworks e bibliotecas,
para que eles tomem decisões baseadas nessas pequenas configurações. Um exemplo de
como mapear uma classe é mostrado em seguida.
@Entity
public class Tarefa {
@Id
@GeneratedValue
private Long id;
private String descricao;
17
private boolean finalizado;
@Temporal (TemporalType.DATE)
private Calendar dataFinalizacao;
// métodos...
}
@Entity indica que objetos dessa classe se tornem "persistível" no banco de dados.
@Id indica que o atributo id é nossa chave primária (você precisa ter uma chave primária em
toda entidade) e @GeneratedValue diz que queremos que esta chave seja populada pelo
banco (isto é, que seja usado um auto increment ou sequence, dependendo do banco de
dados). Com @Temporal configuramos como mapear um Calendar para o banco, aqui usamos
apenas a data (sem o horário), mas poderíamos ter usado apenas a hora
(TemporalType.TIME) ou timestamp (TemporalType.TIMESTAMP). Essas anotações precisam
dos devidos imports, e pertencem ao pacote javax.persistence.
2.6 PostgreSQL
O PostgreSQL [9] é um SGBD (Sistema Gerenciador de Banco de Dados) objeto-
relacional de código aberto, com mais de 15 anos de desenvolvimento. É extremamente
robusto e confiável, além de ser extremamente flexível e rico em recursos. Ele é considerado
objeto-relacional por implementar, além das características de um SGBD relacional, algumas
características de orientação a objetos, como herança e tipos personalizados. A equipe de
desenvolvimento do PostgreSQL sempre teve uma grande preocupação em manter a
compatibilidade com os padrões SQL92/SQL99.
Pela riqueza de recursos e conformidade com os padrões, ele é um SGBD muito
adequado para o estudo universitário do modelo relacional, além de ser uma ótima opção para
empresas implementarem soluções de alta confiabilidade sem altos custos de licenciamento. É
um programa distribuído sob a licença BSD, o que torna o seu código fonte disponível e o seu
uso livre para aplicações comerciais ou não. O PostgreSQL foi implementado em diversos
ambientes de produção no mundo, entre eles, um bom exemplo do seu potencial é o banco de
dados que armazena os registros de domínio .org, mantido pela empresa Afilias.
2.7 AChartEngine
A AChartEngine [10] é uma biblioteca para gerar gráficos em aplicações Android. Ela é
usada no IDSaúde para gerar gráficos dos registros de pressão, possibilitando o usuário
monitorar sua pressão sanguínea. A biblioteca suporta versões do Android SDK a partir do 1.6.
Um grande número de aplicações usa o AChartEngine para mostrar dados graficamente. No
geral, é uma biblioteca fácil e prática de usar e que atende bem os requisitos da funcionalidade
proposta.
A biblioteca pode gerar gráficos XY e gráficos pizza. É possível editar a aparência dos
gráficos modificando cor, fonte, legenda. O gráfico é gerado basicamente combinando as
18
opções de customização e o dataset contendo os dados a serem mostrados. Há suporte para
zoom e para criar eventos a partir de toques na tela. Para ter gráficos dinâmicos, é só invocar o
método repaint quando o dataset é atualizado.
Figura 2.3: Figura ilustrativa do uso do AChartEngine
2.8 Google Maps Android API
O Google Maps API [11] é usado para a funcionalidade de localização de serviços. Com
esta API, é possível incorporar os mapas da Google em seu aplicativo e customizar a maneira
como você quer usar essa ferramenta. Para utilizar o Google Maps, deve-se criar uma chave
do Google Maps API válida. A chave não tem custo, e o seu proprietário pode usá-la com
qualquer aplicativo seu que use o Google Maps API. Essa chave é gerada no console do
Google APIs.
Além da visualização do mapa incorporado ao aplicativo, o Google Places é utilizado
para pesquisar lugares de acordo com a sua categoria. Para pesquisar um determinado tipo de
lugar, usa-se um query que contém como parâmetros a categoria do lugar a ser encontrado e o
raio de pesquisa tomando como base a posição atual do aparelho. Caso o aparelho mude de
localização, a query é executava novamente, retornando assim resultados diferentes.
19
2.9 SOA-MC - Arquitetura Orientada a Serviços –
Múltiplos Clientes
Este é um estilo de arquitetura de software que possui como regra principal que as
funcionalidades implementadas sejam disponibilizadas na forma de serviços. A arquitetura
SOA-MC [12] é baseada nos princípios da computação distribuída e utiliza o paradigma
request/reply para estabelecer a comunicação entre os sistemas clientes e os sistemas que
implementam os serviços.
A arquitetura orientada a serviços se revela ideal para este projeto, pois facilita a tarefa
de encontrar, definir e gerenciar os serviços disponibilizados para múltiplos clientes. Diferentes
plataformas podem fazer uso do mesmo WebService, evitando retrabalho.
As implementações SOA dependem de uma rede de serviços de software. Cada serviço
implementa uma ação, como persistir um objeto em um banco de dados, ou listar os resultados
de uma query. Ao invés de realizar de chamadas diretas para o código fonte, os serviços
definem protocolos que descrevem como enviar e receber as mensagens.
Algumas vantagens dessa arquitetura são:
● As regras de negócio são escritas somente uma vez para todos os clientes.
● O mesmo sistema pode ser usado pelo mesmo usuário em várias plataformas.
Por exemplo, o usuário pode acessar sua conta pelo smartphone ou pela web.
● A arquitetura permite separar completamente a camada das regras de negócio e
a camada da apresentação.
Figura 2.4 - Arquitetura SOA-MC
21
A figura acima mostra as tabelas do banco de dados utilizado, juntamente com suas
colunas. Além disso, podemos ver o tipo de dado de cada coluna, e quem é chave primária ou
chave estrangeira. As relações entre as colunas também são apresentadas.
A tabela principal é o usuário. Nela temos as informações referentes à conta do usuário,
ou seja, um e-mail e a senha. Todas as tabelas tem como chave primária um índice auto-
incrementado. A segunda tabela é pessoa. O relacionamento entre usuário e pessoa é de 1:n,
isto é, um usuário pode possuir várias pessoas. Uma regra já mencionada é que um usuário
deverá necessariamente possuir ao menos uma pessoa, e esta será a pessoa titular. A pessoa
titular é gerada quando um novo usuário é criado e não poderá ser apagada, somente editada.
Todas as outras pessoas criadas pelo usuário serão dependentes.
As colunas da tabela pessoa têm informações essenciais como peso, altura, tipo
sanguíneo. Existem três chaves estrangeiras na tabela pessoa. A chave estrangeira usuário
relaciona a pessoa a um usuário existente. As chaves historicofamiliar e segurosaude relaciona
a tabela pessoa para as tabelas Histórico Familiar e Seguro Saúde respectivamente. Essas são
as únicas duas tabelas ligadas a pessoa que possuem relacionamento 1:1.
As tabelas Exames, Doenças e Sintomas possuem tabelas auxiliares para guardar
imagens. Isto significa, por exemplo, que um exame pode ter diversas imagens associadas a
ele. Portanto, a relação entre essas tabelas é de 1:n.
Entidades
As entidades são objetos persistentes que representam uma tabela no banco de dados.
Cada instância de uma entidade corresponde a uma linha na tabela em questão. Como
mencionado anteriormente, JPA e Hibernate são usados para transformar uma classe JAVA
comum em uma entidade. Os métodos getters e setters são utilizados para acessar e modificar
as variáveis da entidade, enquanto equals e hashcode são usados para identificar unicamente
a instância de uma entidade.
As configurações da persistência ficam a cargo do arquivo persistence.xml. Lá
definimos qual banco de dados nosso sistema vai acessar, usuário e senha deste banco, driver
usado para acesso ao banco, qual dialeto SQL deve ser usado apara gerar as queries.
Figura 3.2 - Propriedades de conexão com o Postgres
22
Abaixo, segue como exemplo como é feito o mapeamento da entidade usuário. A
anotação @Entity identifica a classe como uma entidade, e a anotação @Table define o nome
da tabela no banco de dados. A anotação @XmlRootElement diz que esse é um objeto raiz
para as representações JSON ou XML dessa classe. Essa anotação se faz necessária, pois os
dados transmitidos do WebService para a aplicação mobile devem estar no formato JSON. @Id
identifica uma chave primária, @Column nos permite especificar o nome da coluna no banco
de dados. @SequenceGenerator cria uma sequência e @GeneratedValue especifica que
queremos usar a sequence já criada para popular essa coluna. @Index cria um índice para
facilitar a busca que tem como parâmetro a coluna indexada. @Type nos permite especificar o
tipo de dado que queremos ter na tabela.
Figura 3.3 - Entidade Usuario e seus atributos
EntityManager
O nome é bastante intuitivo. É a classe do JPA responsável por administrar as
entidades. Ela é o serviço central para todas as ações de persistência. Ela é a ferramenta
chave que facilita as transações entre as entidades e o banco de dados.
O EntityManager vai mapear as classes entidades para o banco de dados configurado.
O conjunto de classes entidades é chamado de unidade de persistência. Antes de poder fazer
uso das funcionalidades do EntityManager, tal unidade de persistência deve ser configurada no
arquivo persistence.xml, assim como foi configurado as propriedades de acesso ao banco de
dados.
23
Figura 3.4 - Configuração da persistence unit
Para criar uma instância do EntityManager, usamos a classe EntityManagerFactory.
Esse trabalho é feito na classe EntityManagerUtil. Depois de instanciar o EntityManager,
podemos usar seus métodos para gerenciar as entidades. Para persistir uma entidade, por
exemplo, simplesmente usamos o método “persist” ou “merge”. Para fazer uma consulta, é
usado o método “find”, e para excluir um registro no banco de dados relacionado a um banco
de dados, usamos o método “remove”.
Resources
Essas são as classes de recursos do WebService. São elas as responsáveis de realizar
as operações CRUD no banco de dados. Essas classes abstraem e encapsulam os
mecanismos de acesso a dados, escondendo os detalhes da execução da origem dos dados.
Dessa maneira, existe uma classe exclusivamente para trabalhar com cada tipo de objeto e
realizar tarefas como inserir, deletar, atualizar, listar. Este padrão permite dividir as
responsabilidades das operações em classes, o que segue o princípio de uma boa prática de
programação: “Dividir para conquistar!”.
Usando uma camada separada para o acesso a dados, estamos evitando futuros
inconvenientes como dificuldade de replicação do código e propensão a erros. Além disso, este
padrão deixa o código mais organizado e fácil de entender.
As classes Resources serão as interfaces entre as entidades e a web. As diversas
requisições serão enviadas pela aplicação mobile e deverão ser interpretadas no WebService
com a ajuda das anotações da arquitetura REST. Por exemplo, o usuário pode requisitar a
inserção de uma determinada alergia, então a classe AlergiaResource irá executar essa
operação e retornar uma mensagem informando o sucesso ou não dessa operação.
24
Abaixo temos detalhado um pedaço da classe AlergiaResource. A anotação @Path
(“/alergia”) permite definir a URL que terá acesso a esse recurso. As anotações @POST,
@GET e @DELETE nos permite especificar qual método será chamado dependendo do tipo
de requisição do cliente. O nome do método não fará parte da URL de requisição e sim o
caminho definido no @Path.
A anotação @Produces permite definir em qual formato queremos mandar o resultado
da operação de volta para nosso cliente. No nosso caso, iremos transmitir os dados de volta
para a aplicação mobile no formato JSON. Dessa maneira, o objeto Alergia é formatado para o
formato JSON antes de ser enviado. Outros formatos comuns de transmitir dados seriam XML,
HTML, ou simplesmente um texto puro.
As operações do tipo @POST também devem especificar que tipo de dado ela vai
consumir. As informações vindas do cliente não chegam no formato JSON, mas sim uma
coleção de pares Chave-Valor. A anotação @Consumes nos permite especificar que tipo de
dados a operação terá que ler. Nesse caso, é passado para ela um array com pares Chave-
Valor, e podemos de maneira simples ler os valores desse array passando como parâmetro as
chaves utilizadas.
25
Figura 3.5 - Classe AlergiaResource
O arquivo web.xml é essencial para a configuração do serviço REST. Nele
configuramos os caminhos das requisições para o servlet nomeado Jersey REST Service. No
arquivo é especificado a classe que define o servlet bem como o caminho das classes usadas
para mapear as URLs. Ainda definimos um padrão URL. Isso leva todas as requisições que
contém /rest/ sejam mapeadas por nossas classes.
26
Figura 3.6 - Arquivo web.xml
3.2 Android
WebServiceTask
Essa classe é uma extensão da classe AsyncTask. Ela é utilizada para comunicação
com o WebService. Qualquer operação de comunicação com o WebService deve ser feita
através desta classe, pois pode demandar um processamento pesado. Os métodos
implementados nessa classe são executados assincronamente, ou seja, fora da thread
principal.
Não é recomendável rodar tarefas pesadas na thread principal do programa, pois isso
impede que a tela mude até que a tarefa esteja completa, isto é, o aplicativo acaba travando
caso esse processo demore muito. O AsyncTask é uma ótima solução para processar tarefas
pesadas, pois encapsula todo o processo pesado e fornece métodos para modificar a interface
do usuário antes, durante e depois da execução.
Os seguintes métodos podem ser implementados para a execução da tarefa:
● onPreExecute: Prepara o ambiente para a execução da tarefa. Geralmente utiliza um
Progress Dialog para mostrar que algo está sendo carregado.
● doInBackground: Aqui é feita a tarefa propriamente dita em uma thread distinta. Após a
execução da tarefa, um objeto do tipo Resultado é retornado.
● onProgressUpdate: Usada para atualizar a interface com o usuário com informações de
progresso vindas do método doInBackground.
● onPostExecute: Executada assim que terminada a tarefa processada no método
doInBackground. Aqui a barra de progresso deve ser dispensada e a tela de interface
com o usuário deve ser atualizada com as informações do resultado da tarefa.
No ID Saúde, o acesso ao WebService é feito no método doInBackground. O resultado
27
de uma operação do tipo GET pode ser um objeto ou uma lista de objetos, enquanto o
resultado de uma operação do tipo POST ou DELETE é um texto informando o sucesso ou não
dessa operação.
Com respeito à passagem de parâmetros, nas operações do tipo GET ou DELETE, os
parâmetros são passados via URL. Por exemplo, caso se queira resgatar as doenças
registradas de uma pessoa, passamos o identificador da pessoa como parâmetro dentro da
URL que é passada para o WebServiceTask, ou se o caso for de apagar uma doença
cadastrada, o parâmetro a ser passado é o identificador da doença.
Já nas operações do tipo POST, os parâmetros são passados através de um array de
NameValuePair que constitui de uma estrutura que mapeia chaves e valores. No caso do
cadastro de uma doença, antes de executarmos a instância do WebServiceTask que irá
solicitar a persistência de dados, devemos passar os dados da doença para esse array. O
método da classe WebServiceTask chamado addNameValuePair se encarrega dessa tarefa.
O resultado dessas operações, como mencionado anteriormente, é feito dentro do
método onPostExecute. O grande desafio é que esse resultado deve ser tratado de acordo com
a operação que foi feita. Por exemplo, caso a operação ter sido fazer o login no sistema, o
resultado será uma mensagem informando o sucesso ou não da operação, e temos que tratar
essa mensagem. Em outra situação, a operação pode ser listar todas as pessoas cadastradas
por um usuário, e o resultado será uma lista de objetos do tipo Pessoa, então temos que tratar
esse resultado e criar no ID Saúde essa lista e apresentá-la para o usuário.
Para driblar esse problema, é criada uma interface chamada AsyncTaskListener. Ela
implementa o método handleResponse que por sua vez é chamado dentro do onPostExecute.
Isso permite as classes que implementarem o AsyncTaskListener a customizarem o tratamento
dos dados vindos do WebService.
Outro fator importante é o tempo limite de operação. Este deve ser configurado a fim de
evitar que o aplicativo demore muito tempo em uma operação onde não há comunicação com o
WebService. São dois tipos de timeouts que devem ser configurados, o connection timeout e o
socket timeout. O connection timeout se refere ao início da conexão. Ele geralmente acontece
quando o servidor não responde o cliente. No ID Saúde, o connection timeout foi configurado
para 10 segundos. O socket timeout se refere à monitoração contínua dos dados que estão
vindo do servidor. Caso essa esse fluxo seja interrompido por tempo maior que o timeout, a
conexão é dada como perdida. No ID Saúde, o socket timeout foi configurado para 15
segundos.
GPS Tracker
Este é um serviço que implementa a interface LocationListener. Esse serviço serve para
buscar a geolocalização do usuário e é usado na implementação de duas funcionalidades:
Mensagem SOS e Serviços. Para acessar o serviço de GPS do aparelho celular, é usada a
classe LocationManager. Existem duas maneiras possíveis de buscar a geolocalização do
usuário via aparelho celular, uma é com o dispositivo GPS do próprio aparelho, e o outro é por
triangulação de antenas, que utiliza a distância até as antenas de telefonia mais próximas para
28
dar uma localização aproximada do aparelho.
A busca por GPS tem a vantagem de ser absolutamente mais precisa, porém, a busca
por triangulação de antenas é definitivamente mais rápida. Os dois métodos são usados, pois
caso se queira uma resposta rápida ou simplesmente o GPS estiver indisponível, o método de
triangulação de antenas se faz necessário.
O método do LocationManager chamado requestLocationUpdates serve para configurar
como queremos atualizar a localização do usuário. Esse método recebe o tempo mínimo e a
distância mínima entre as atualizações, isto é, se a distância configurada for 10 metros, caso o
aparelho se mova 10 metros, a localização será atualizada. O método getLastKnownLocation
retorna a última localização do usuário de acordo com os critérios já configurados. O serviço
também tem a funcionalidade de verificar se o GPS está ativo, pois caso esteja inativo, um pop-
up aparece perguntando se o usuário deseja ligar o GPS. Caso o usuário confirme, ele será
redirecionado para a tela de configuração do GPS.
Mensagem SOS
A classe SOS trabalha de maneira simples. Ela primeiramente busca os contatos de
emergência se comunicando com o WebService com o auxílio da classe WebServiceTask, que
por sua vez executa uma url do formato “/contatoEmergencia/sos?idUsuario= +
Login.usuarioLogado.getIdUsuario()”. O WebService irá assim retornar todos os contatos de
emergência cadastrados do usuário em questão. Esses são guardados em uma lista de objetos
do tipo ContatoEmergencia.
Caso o usuário confirme o envio da mensagem SOS, o sistema irá buscar a localização
do usuário com o auxílio do serviço GPSTracker. Com os dados da localização do usuário, é
usado um método para traduzir esses dados para um endereço utilizando a classe Geocoder.
Feita essa tradução, a lista de contatos de emergência é percorrida. Dentro desse loop,
utilizamos a classe SMSManager para mandar uma mensagem SMS para os telefones
cadastrados.
Serviços
Como já mencionado anteriormente, o Google Maps API é usado para apresentar ao
usuário um mapa que será populado com marcadores de onde estão os serviços que estão
selecionados por ele. São três as opções de serviço que o usuário pode buscar: hospital,
bombeiro, polícia. A query executada pelo para buscar os serviços deve ser feita fora da main
thread, pois demanda comunicação externa e pode demorar apara ser executada. Para
contornar esse problema, é criada uma classe interna que estende AsyncTask para fazer esse
processamento.
A classe interna em questão é chamada de GetPlaces, e ela recebe como parâmetro
somente a URL para buscar os lugares. Ela faz uma requisição do tipo HttpGet e trata o
resultado para popular um array do tipo Marker para mostrar no mapa os lugares encontrados
juntamente com seus detalhes.
29
São duas as regras para atualizar o mapa. Caso o sistema detecte um evento de
seleção de item de um dos menus, o método de atualizar o mapa é disparado. Ou caso o
sistema detecte uma mudança de localização. O sistema consegue detectar uma mudança de
localização, pois a classe Serviços está implementando a interface LocationListener, o que nos
permite sobrescrever o método onLocationChanged.
30
Capítulo 4
Requisitos de Software
O sistema tem como objetivo facilitar o cuidado com nossa saúde de acordo com o perfil
do usuário. Utilizando o sistema, o usuário terá a funcionalidade de cadastrar, alterar, consultar,
remover um perfil, informar dados de saúde, além de procurar serviços e enviar uma
mensagem SOS para contatos de emergência.
Nesse capítulo, será descrito para cada caso de uso os requisitos funcionais e
eventuais regras de negócio, que serão representadas pelas siglas RF e RN, respectivamente.
Não serão abordados todos os casos de uso, pois muitos são praticamente idênticos, e seria
repetitivo abordar cada um.
4.1 Login
Figura 4.1 - Tela de Login
O usuário deve ser capaz de ao entrar no aplicativo, realizar login para acessar sua conta.
RF01 – Ao clicar no botão Entrar, os dados inseridos (Login/E-mail e senha) serão verificados.
Caso a autenticação tenha sucesso, o usuário será redirecionado para a tela principal do
aplicativo. Caso contrário, o usuário receberá uma mensagem de erro.
RF02 – Ao clicar no botão Cadastre-se, o usuário será redirecionado para uma nova tela onde
31
é possível cadastrar um novo usuário.
RF03 – Caso o Check Box “Login automático“ esteja marcado, o usuário não precisará se logar
toda vez que entrar no aplicativo.
RN01 – Para entrar no sistema, o usuário deverá preencher obrigatoriamente os campos e-mail
e senha.
4.2 Cadastrar novo usuário
Figura 1.2 - Tela de cadastro de novo usuário
O usuário deve ser capaz de cadastrar um novo usuário.
RF01 – Ao clicar no botão “Confirmar”, os dados inseridos serão enviados para um web service
que criará no banco de dados um novo usuário e uma nova pessoa.
RF02 – Após o sucesso do cadastro, o usuário será redirecionado de volta para a tela de Login.
RN01 – Para o cadastro ter sucesso, o e-mail deverá ter um formato válido, e os dois campos
de senha devem ter igual conteúdo.
32
RN02 – A pessoa criada juntamente com o novo usuário será o titular da conta. Todas as
demais pessoas criadas serão dependentes.
4.3 Tela principal
Figura 4.3 - Tela principal do aplicativo
RF01 – Ao clicar no botão cadastrar, o usuário será redirecionado para a tela de cadastro de
pessoa.
RF02 – Ao clicar no botão listar, o usuário será redirecionado para a tela de Listar Pessoas.
RF03 – Ao clicar no botão Mensagem SOS, o usuário estará solicitando um envio de
mensagem de socorro contendo sua atual localização que será enviada para seus contatos de
emergência cadastrados.
RF04 – Ao clicar no botão Serviços, o usuário será redirecionado para uma tela que contém um
mapa com sinalizadores de onde se encontram unidades do tipo de serviço por ele selecionado
(Hospital, Bombeiro, Polícia).
33
4.4 Cadastrar nova pessoa
Figura 4.4 - Tela de cadastro de pessoa
RF01 – Caso seja uma pessoa existente, os campos deverão ser preenchidos com os dados
dessa pessoa. Caso contrário, os campos virão em branco.
RF02 – Ao clicar no botão “Confirmar”, os dados inseridos serão enviados para um web service
que criará no banco de dados uma nova pessoa.
RF03 – Após o sucesso do cadastro, o usuário será redirecionado de volta para a tela de Listar
Pessoas.
34
4.5 Listar pessoas
Figura 4.5 - Tela de listagem de pessoas cadastradas
RF01 – Nesta tela o usuário irá receber uma lista contendo todas as pessoas cadastradas.
RF02 – Ao clicar em uma das pessoas cadastradas, o usuário será redirecionado para a tela de
grupos de Informações.
RF03 – Clicando e segurando o dedo sobre a pessoa cadastrada, o usuário abrirá um menu
com a opção de “Apagar” para apagar a pessoa selecionada.
RF04 – Ao clicar em “Apagar”, a pessoa será removida do banco de dados juntamente com
todas as suas dependências e a lista será atualizada.
36
RF01 – Antes do envio de mensagem SOS, o usuário terá que confirmar a situação de
emergência. Caso ele confirme o envio de mensagem SOS, o sistema irá buscar os contatos
de emergência cadastrados para a pessoa titular.
RF02 – Caso não haja nenhum contato de emergência cadastrado, uma mensagem informativa
irá aparecer e o usuário será redirecionado para a tela principal. Caso contrário, um serviço irá
buscar a localização atual do usuário, e enviará uma mensagem requisitando ajuda para esses
contatos.
4.7 Serviços
Figura 4.8 - Tela de serviços
RF01 – Ao escolher um novo raio de busca, ou uma nova categoria de serviço pelos menus
drop-down presentes na tela, o sistema irá buscar através do Google Places lugares que
37
atendem os critérios definidos.
RF02 – Um mapa do Google Maps API irá mostrar a localização desses lugares juntamente
com a localização do usuário.
RN01 – Há um limite de número de lugares que a query retorna, pois caso o raio seja muito
grande, uma lista muito grande de lugares seria retornada, o que deixaria o processamento
muito pesado.
4.8 Grupos de Informação
Figura 4.9 - Tela de grupos de informação
38
RF01 – Esta tela tem o objetivo de apresentar de maneira intuitiva as categorias de dados que
podem ser guardados e processados pelo ID Saúde.
RF02 – Quando o usuário selecionar um ícone, ele irá ser redirecionado para a tela
correspondente seguindo as seguintes regras:
1. Caso o usuário selecione Dados Pessoais, Seguro Saúde ou Histórico Familiar,
ele será redirecionado para a tela de edição desses itens.
2. Caso o usuário selecione Eventos, ele será redirecionado para a tela que lista
os tipos de eventos.
3. Todos os demais itens, quando selecionados redirecionam o usuário para uma
tela que lista registros dos dados correspondentes.
4.9 Lista de exames
Figura 4.10 - Tela de listagem de exames
39
RF01 – Nesta tela o usuário irá receber uma lista contendo todos os exames cadastrados.
RF02 – Ao clicar em um dos exames cadastrados, o usuário será redirecionado para a tela de
cadastro/edição do exame.
RF03 – Clicando e segurando o dedo sobre o exame cadastrado, o usuário abrirá um menu
com a opção de “Apagar” para apagar o exame selecionado.
RF04 – Ao clicar em “Apagar”, o exame será removido do banco de dados juntamente com
todas as suas dependências e a lista será atualizada.
RF05 – O botão “Adicionar” fará o usuário ser redirecionado para a tela de cadastro de um
novo exame.
4.10 Cadastro de exames
Figura 4.11 - Tela de cadastro de exames
RF01 – Caso seja um exame existente, os campos deverão ser preenchidos com os dados
desse exame. Caso contrário, os campos virão em branco.
RF02 – Ao clicar no botão “Confirmar”, os dados inseridos serão enviados para um web service
40
que criará ou irá editar no banco de dados o exame.
RF03 – Após o sucesso do cadastro, o usuário será redirecionado de volta para a tela de Listar
Exames.
4.11 Pressão sanguínea
Figura 4.12 - Tela de registros de medição de pressão sanguínea
RF01 – A tela deverá apresentar um gráfico que apresenta todos os registros de medições de
pressão sanguínea da pessoa.
RF02 – Ao clicar sobre um número, uma mensagem irá aparecer informando o dia exato da
medição.
RF03 – Ao clicar no botão “Adicionar registro de pressão”, o usuário será redirecionado para a
tela de cadastro de pressão.
41
4.12 Cadastro de medição de pressão sanguínea
Figura 4.13 - Tela de cadastro de medição de pressão sanguínea
RF01 – Ao clicar no botão “Confirmar”, os dados inseridos serão enviados para um web service
que criará no banco de dados um novo registro de medição de pressão.
RF02 – Após o sucesso do cadastro, o usuário será redirecionado de volta para a tela que
apresenta os registros de pressão sanguínea graficamente.
42
Capítulo 5
Conclusões e Trabalhos Futuros
5.1 Conclusões
Este projeto englobou diversos tópicos na área de computação aprendidos durante a
graduação. Foram colocados em prática os conceitos de orientação a objetos e integração de
aplicações com um banco de dados. O desenvolvimento de um sistema funcional ajudou a
consolidar os ensinamentos de sala de aula.
Também foi colocado em prática conceitos da área de engenharia de software. A
decisão de quais tecnologias e arquitetura de software devem ser usadas foi muito importante
para o desenvolvimento de um bom sistema. A comunicação entre a aplicação mobile e o Web
Service foi peça fundamental na construção do sistema. A especificação funcional do sistema
também teve grande importância para guiar o desenvolvimento do sistema.
O projeto também ajudou a amadurecer meu espírito empreendedor. Construir um
sistema que atende uma necessidade real me fez sentir capaz de um dia construir um negócio
de sucesso e me estimulou a estudar um pouco sobre empreendedorismo. Não seria
exagerado dizer que depois da realização deste projeto final, minha mente tem uma visão
diferente. Vejo possibilidades de negócio e tenho novas ideias frequentemente, e agora tenho a
ambição de fazer algo útil para a sociedade com os conhecimentos adquiridos durante a
faculdade.
5.2 Trabalhos futuros
O ID Saúde pode ser ainda muito explorado. A área de saúde ainda carece de muitas
soluções e inovação. A tecnologia tem o papel de prover seus recursos e aplicar na área de
saúde. Dessa maneira, muito ainda pode se fazer para tornar esse projeto ainda mais
funcional.
Aplicação WEB e iOS
O ID Saúde não foi construído para ser acessado somente pelo aplicativo Android. A
ideia de uma arquitetura orientada a serviços é justamente permitir acesso ao sistema por
múltiplos clientes. Dessa maneira, dois clientes poderiam ser desenvolvidos, uma aplicação
web e um aplicativo para Smartphones com o sistema operacional iOS.
A aplicação web seria ideal para melhor visualização dos dados e inserção de grande
volume de dados. E o aplicativo para iOS serviria para atender a grande parte do mercado que
Apple possui. Ambos os clientes teriam o estilo e a aparência parecidas com o cliente Android
e também poderiam consumir o mesmo WebService já criado.
43
Modelo de negócios
O modelo de negócios que mais se encaixa nesse projeto é o modelo Freemium [13].
Nesse modelo, as funcionalidades mais básicas do produto são disponibilizadas sem custos,
porém, funcionalidades mais avançadas tem um preço. A premissa básica por trás do modelo é
a de que, ao oferecer aos potenciais clientes um pedaço gratuito do serviço, diminui-se a
barreira para experimentação inicial e aumenta-se a efetividade na aquisição de clientes
através de marketing boca-a-boca.
Outra forma de receita seria construir parcerias com laboratórios, operadoras de saúde,
e redes de farmácia. Um laboratório poderia disponibilizar o resultado de um exame
diretamente no sistema. Uma operadora de saúde poderia ter acesso aos dados de seus
clientes, facilitando o atendimento e conhecendo mais o paciente. E uma rede de farmácia
poderia fazer propaganda para usuários do sistema.
Dicas de saúde
Para ser um aplicativo de saúde ainda mais completo, disponibilizar dicas de saúde
agregaria mais valor ao sistema. O usuário poderia tanto buscar informações, que seriam
agrupadas em temas, ou receber as dicas de saúde como notificações de acordo com o seu
perfil.
A entrega de informação personalizada para o usuário é uma tendência muito forte. O
usuário vai se sentir mais valorizado e com certeza irá dar mais valor às dicas recebidas. Um
exemplo desse processo seria um usuário com diabetes que poderia configurar seu aplicativo
para receber diariamente uma dica de saúde. Sabendo que o usuário é diabético, o sistema vai
mandar uma informação específica para uma pessoa diabética.
O serviço Google Cloud Messaging seria ideal para o desenvolvimento dessa
funcionalidade. Com esse serviço, ao invés do aplicativo ir buscar a informação, um
WebService pode enviar uma notificação para um determinado dispositivo cadastrado.
Integração com aparelhos de saúde
Outra funcionalidade que iria enriquecer o sistema seria a integração com aparelhos de
saúde. Existem no mercado aparelhos de saúde com Bluetooth, isto é, é possível realizar a
comunicação do aplicativo Android com o aparelho e assim automatizar o envio de medições
de pressão sanguínea por exemplo.
44
Figura 6.1 - Aparelho de medição de pressão sanguínea
Ao medir a pressão sanguínea, o aparelho enviaria automaticamente os dados da
medição para o aplicativo e este faria o registro de uma nova medição. Neste caso, o usuário
deve garantir que o Bluetooth do aparelho celular está ligado.
Esta funcionalidade abre as portas para a inovação em uma área na saúde que já
existe, a área do Home Cair. Para pacientes que precisam ser monitorados remotamente, este
sistema de autoexame seria ideal. O paciente poderia realizar exames como eletrocardiograma
ou glicose e enviar os dados diretamente para uma central com profissionais na área de saúde
que iriam analisar esses dados.
Processamento de eventos complexos
Expandindo essa ideia de monitoração da saúde dos usuários, o conceito de
processamento de eventos complexos cairia como uma luva para a implementação dessa
funcionalidade. O volume de dados a ser processado pode ser de grande proporção. Assim
sendo, o sistema deve possuir uma arquitetura que permita processar um grande volume de
dados em tempo real.
O CEP (Complex Event Processing) é uma tecnologia de rastreamento e análise de um
fluxo de dados. A tecnologia funciona como se fosse um banco de dados de cabeça para baixo.
Ao invés de guardar os dados e rodar queries em cima desses dados, o que são guardados
são as queries, e os dados são enviados para serem processados.
No sistema então teríamos como entrada eventos de saúde, que poderia ser, por
exemplo, uma medição de pressão sanguínea. O sistema iria então processar todos os eventos
que chegam e de acordo com regras estabelecidas iria redirecionar a informação ou executar
alguma ação específica. Uma medição de pressão com valores fora do comum iria criar um
alerta que chegaria ao conhecimento do médico responsável pelo paciente em pouco tempo.
45
Referências Bibliográficas
[1] “Anamnese (saúde)” - http://pt.wikipedia.org/wiki/Anamnese_(sa%C3%BAde)
[2] “Scrum Academic” - http://www.sbvb.com.br/proposals/Scrum-Academic-sbvb.com.br.pdf
[3] “Android dominates 81 percent of world smartphone market” -
http://www.cnet.com/news/android-dominates-81-percent-of-world-smartphone-market
[4] “Official site provides the SDK, Developer's Guide, Reference, and Android Market for the
open source project.” - developer.android.com/
[5] “An Android REST Client and Tomcat REST WebService” - http://avilyne.com/?p=105
[6] “JSON: What It Is, How It Works, & How to Use It” - http://www.copterlabs.com/blog/json-
what-it-is-how-it-works-how-to-use-it/
[7] “Apache Tomcat” - http://tomcat.apache.org/
[8] “Uma introdução prática ao JPA com Hibernate” - http://www.caelum.com.br/apostila-java-
web/uma-introducao-pratica-ao-jpa-com-hibernate/#14-1-mapeamento-objeto-relacional
[9] “PostgreSQL” - http://www.postgresql.org/
[10] “AChartEngine” - http://www.achartengine.org/
[11] “Android working with Google Maps V2” –
http://www.androidhive.info/2013/08/android-working-with-google-maps-v2/
[12] “SOA_MC Service Oriented Architecture – Multiple Client” -
http://www.sbvb.com.br/proposals/SOA-MC-sbvb.com.br.pdf
[13] “O modelo freemium para startups” –
http://www.manualdastartup.com.br/blog/o-modelo-freemium-para-startups-parte-i