APLICATIVO COLABORATIVO PARA MAPEAR ANIMAIS ABANDONADOS

REGISTRO DOI: 10.5281/zenodo.7383029


Gustavo Barbosa Nascimento Silva, Lucas Quintino da Silva, Matheus Andreotti Ferreira, Nicolas Sinegalia Nascimento, Rodrigo Eduardo Gonzalez,
Orientador: Paulo Cesar da Silva Emanuel.


Resumo

O abandono de animais domésticos é uma pauta fundamental a ser abordada nas maiores cidades do Brasil, sendo difícil mensurar a quantidade com precisão devido à falta e a complexidade de dados e pesquisas na área, porém, é comum avistar algumas espécies transitando pelas ruas.
Tendo em vista a problemática, o presente trabalho tem como objetivo o desenvolvimento de um aplicativo mobile que consiste em mapear cães e gatos desabrigados, com intuito de facilitar o processo de resgate e colaborar com a redução do alto índice de animais abandonados e doenças de zoonoses.
Para reduzir esses índices, o aplicativo fornece dados através da colaboração de usuários para ajudar ONGs e voluntários na busca destes animais, mostrando a localização aproximada e apresentando se o mesmo tem lesões e/ou invalidez, sendo capaz de colaborar com a coleta de informações contabilizando os cadastros e retratando em forma de relatórios.

Palavras-chave: Abandono, Animais, Aplicativo.

Collaborative app to map abandoned animals

Abstract

The abandonment of domestic animals is a fundamental issue to be addressed in the largest cities in Brazil, being difficult to measure precisely the amount due to the lack and complexity of data and research in the field, nevertheless, it is common to see some animals roaming the streets.
With the problem insights, this project has the objective to develop a mobile application to map homeless dogs and cats to assist the recue process and collaborate with the high level of stray animals and zoonotic diseases.
To reduce these levels, the application provides data from user collaborations to help voluntaries and NGOs in searching these animals by showing the approximate location and showing if it has injuries or disabilities, being able to collaborate with gathering information by computing the entries and displaying them in a report.

Keywords: Abandonment, Animals, Application.

  1. Introdução

A aproximação de animais e seres humanos está cada dia mais comum e presente no nosso cotidiano, seja um animal de estimação ou até um animal capacitado a auxiliar deficientes visuais. Mesmo com essa importante interação, observa-se um grande volume de animais abandonados nas principais cidades do Brasil.
Abordar sobre o abandono de animais é desafiador devido a pouco estudo na área e a inexistência de dados oficiais. Sabe-se que o número de animais em situação de rua vem crescendo a cada ano. Segundo Rosangela Gebara, gerente da ONG Ampara Animal, no período de julho de 2020 ao terceiro trimestre de 2021, houve uma crescente de em média 61%, tendo como grande influência a pandemia ocasionada pelo COVID-19 (EXAME, 2021).
De acordo com o jornal Folha de São Paulo, famílias recorreram ao abandono por medo do animal transmitir o vírus e, além do fator pandemia, a recorrência de abandono animal se dá devido à falta de recursos financeiros para se manterem (GARCIA, 2020). Outros dos principais motivos são os problemas comportamentais dos animais, a adaptação, bem como a falta de espaço, as proibições sociais em casos de mudanças de lares e a reprodução indesejada.
Essa reprodução desordenada e indesejada, que ocorrem nas ruas e nos lares, além de contribuir para o aumento dos animais abandonados, contribui também para a propagação de casos de zoonoses, que são doenças como raiva, esporotricose, verminoses e entre outras que afetam a saúde pública. Uma das formas mais eficazes de ajudar a combater essa procriação descontrolada, é a castração ou esterilização, dos animais antes do envio para adoção (G1 GLOBO, 2019).

Todos os animais têm seus direitos garantidos, e por falta de conhecimento o homem descumpri sem saber as consequências futuras. Todo animal tem direito a proteção, respeito e acima de tudo a sua vida. De acordo com o Artigo 6º da declaração Universal do Direitos Animais:

“a) Cada animal que o homem escolher para companheiro tem o direito a uma duração de vida conforme sua longevidade natural.”
“b) O abandono de um animal é um ato cruel e degradante.”

Os resgates são realizados por prefeituras ou organizações não governamentais (ONGs), que é uma organização sem qualquer tipo de fins lucrativos, a fim de realizar trabalhos sociais, e se falando de resgate, engloba muitos gastos, pois, não há somente o resgate, há o abrigo, alimentação e os cuidados necessários: como vacinas, higienização, castração e dentre outros cuidados para que o animal possa estar nutrido e bem nas suas condições naturais. Mas, para que esse trabalho seja feito, as ONGs dependem muito de doações, parceiros e patrocinadores que possam doar ou colaborar com dinheiro, alimentos, produtos de limpeza, vacinas ou até mesmo mão de obra de forma voluntária.

1.1 Justificativa

Traçar o abandono de animais, mesmo com todo avanço tecnológico é um tema complicado de ser tratado, em consequência da grande escassez de informações.
O presente projeto visa aumentar os meios de busca e localização de animais em situação de rua, utilizando meios mais atualizados e ágeis, pois, nos dias de hoje, ONGs, voluntários e Prefeituras regionais dependem muito de ligações e denúncias para a realização dos resgates.
O foco do aplicativo é facilitar a abordagem do tema e trazer o número de animais visto pelas pessoas nos seus dias, auxiliando no resgate e coletando dados que possam facilitar nas pesquisas e estudos.

1.2 Objetivos (Geral e específicos)

1.2.1 Objetivo geral

Tendo em vista as problemáticas, o objetivo deste projeto é desenvolver uma aplicação mobile para smartphones com sistema operacional Android que tenham acesso à internet móvel a fim de auxiliar ONGs, Prefeituras e voluntários a localizarem animais em situação de abandono, através da geolocalização e expor dados reais sobre o abandono de animais no Brasil.

1.2.2 Objetivo específico

• Desenvolver aplicação para facilitar a localização de animais abandonados nas cidades brasileiras;
• Aplicação com funcionalidade de cadastro de usuários;
• Cadastrar animal abandonado e sua imagem;
• Apresentar localização do animal no mapa;
• Apresentar dados sobre abandono com referência no que foi cadastrado pelo usuário;
• Listagem de animais abandonados que foram cadastrados;
• Utilizar framework React Native;
• Utilizar linguagem Java com framework Spring Boot;
• Utilizar infraestrutura em cloud (Amazon AWS); • Aplicar conceitos abordados na graduação.

2. Fundamentação teórica

2.1 Animais e seres humanos

A interação entre homem e animal, existe desde a origem do ser-humano, sendo apresentadas através de evidências como em pinturas rupestres e escritos das civilizações durante os anos, que nos dias de hoje ainda se mantém essa relação (Osório, 2016). Grandin e Johnson (2006, p. 185-186), colaboraram sobre esse tema da convivência entre animais e humanos terem iniciado no passado:

O relacionamento humano com animais domésticos é muito antigo, e as pessoas precisam dos animais em suas vidas. Até recentemente, a maioria dos especialistas acreditava que os seres humanos e os cães já viviam juntos, mas uma pesquisa mais recente do DNA dos cães provou que seres humanos e cachorros podem estar convivendo há mais de cem mil anos. Os cães não matam seres humanos porque em cem mil anos de evolução eles desenvolveram sua capacidade de inibir a agressividade contra os seres humanos, e os seres humanos desenvolveram sua capacidade de cuidar da agressividade do cão […]

Um dos benefícios ocasionado na vida das pessoas, através dos animais, é a companhia que eles nos fazem durante nosso convívio. Alguns animais, como por exemplo: cães e gatos são tidos como “Animais de companhia” por realizarem grandes vínculos afetivos (FARACO, 2008).

2.2 Abandono de animais

O abandono de animais é comum em todo o território brasileiro, gerando diversos problemas devido essas presenças em locais que não tem supervisão de prefeituras, centros de controle de zoonoses e cuidados veterinários. (SILVA et al, 2013). De acordo com a World Veterinary Association, federação com mais de 80 associações médicas, em todo o mundo há em média 200 milhões de cães abandonados e no Brasil, existem cerca de 30 milhões de animais que estão em situação de abandono (SCHEFFER, 2018).
Este abandono, gera superpopulação desses animais em todas as cidades, com isso acarreta no aumento do número de maus tratos, errantes passando frio em dias de baixas temperaturas, e fome, na busca diária por comida. Com essa situação, cães e gatos acabam sendo meios de propagação de doenças para a população (DELABARY, 2021).
De acordo com Gaertnet e Branco (2003), “a vacinação dos animais de estimação previne uma série de zoonoses, como leptospirose, raiva, giardíase entre outras e a everminação combate os vermes, evitando o frequente contágio de crianças e adultos.”
A Organização Mundial da Saúde (OMS), classifica zoonoses como:

Uma doença infecciosa que saltou de um animal não humano para humanos. Os patógenos zoonóticos podem ser bacterianos, virais ou parasitários, ou podem envolver agentes não convencionais e podem se espalhar para humanos por contato direto ou por meio de alimentos, água ou meio ambiente. […] 

2.3 Proteção aos animais

Em 1978, em Bruxelas, a UNESCO apresentou a Declaração Universal dos Direitos animais, assinado por diferentes países, onde reconhecem o valor a vida de todo ser vivo e a relação humana com animais de respeito e dignidade. (Gomes e Chalfun, 2010).
De acordo com Ackel Filho (2001): “a vida é bem maior que ao Poder Público incumbe garantir. O respeito por ela, em toda a sua biodiversidade, passou a ser dogma constitucional e elemento cultural do povo brasileiro.”
Silva (2009), reforça com a seguinte observação:

A Constituição Federal de 1988 é o marco para o pensamento sobre a dignidade animal, uma vez que ao proibir que o animal seja tratado de forma cruel, reconhece ao animal não-humano o direito de ter respeitado o seu valor intrínseco, sua integridade, vida e liberdade.

As Organizações Não Governamentais (ONGs) realizam trabalhos de acordo com o direito dos animais, sendo o resgate dos que foram abandonados pela sociedade. Além do resgate, essas ONGs fazem os seguintes processos antes de apresentarem para adoção: Higienização, medicação, cirurgias, castração, alimentação e manutenção (LAZARIN, 2014).

3. Fundamentação técnica

3.1 API

Application Programming Interface (API), é um conjunto de padrões que permitem desenvolvimento de plataformas e integração de aplicações. Em alguns casos, ditas como contratos ou normas entre provedor e um cliente de informações, apresentando o conteúdo solicitado (Chamada) e o conteúdo exigido pelo produtor (Resposta) (REDHAT, 2020).

Pense nas APIs como um mediador entre os usuários ou clientes e os recursos ou serviços web que eles querem obter. As APIs também servem para que organizações compartilhem recursos e informações e, ao mesmo tempo, mantenham a segurança, o controle e a obrigatoriedade de autenticação, pois permitem determinar quem tem acesso e o que pode ser acessado (REDHAT, 2020).

3.2 REST

De acordo com Fielding em sua dissertação de doutorado (2000, p.76), Representational State Transfer (REST) tem a seguinte definição: “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 conector uniforme.”

3.3 Métodos

O Protocolo, Hypertext Transfer Protocol (HTTP), é utilizado na maioria das vezes em softwares, para receber e enviar arquivos e informações. Para requisitar e receber essas informações, existem oito métodos, cada um com uma função (JUNIOR, 2021):

GET: Solicitar ou requisitar recurso ao servidor;
PUT: Editar arquivos e informações já existentes;
POST: Enviar informação ao servidor;
DELETE: Remover arquivos ou informações;
HEAD: Solicitar ou requisitar recurso ao servidor, porém com a representação pertinente do recurso;
OPTIONS: Retornar informações do servidor;
TRACE: Envia última requisição para o servidor e verifica se houve alguma interferência de outros servidores.
CONNECT: Conectar a API com um servidor proxy.

3.4 Microsserviços

A arquitetura de microsserviços, é designada para o desenvolvimento de softwares, em pequenos serviços independentes que se comunicam através de APIs (Amazon AWS), conforme figura 1.
Segundo a AWS: “As arquiteturas de microsserviços facilitam a escalabilidade e agilizam o desenvolvimento de aplicativos, habilitando a inovação e acelerando o tempo de introdução de novos recursos no mercado.”

Figura 1 – Divisão de um aplicativo monolítico em microsserviços

Fonte: https://aws.amazon.com/pt/microservices/

3.5 Arquitetura de desenvolvimento

O Projeto utilizou o padrão de arquitetura de software MVC, que respectivamente é Model, View e Controller, para facilitar o envio e recebimento de informações entre a interface utilizada pelo usuário e o banco de dados tornando a aplicação mais rápida nas requisições (ZUCHER. 2020).

3.5.1 Model

A camada Model ou Modelo, tem como responsabilidade gerenciar e fazer o controle dos dados a partir dos comandos da camada controller. (ZUCHER, 2020).

3.5.2 View

A camada View ou Visão tem como responsabilidade apresentar a interface do usuário, como o design de telas, botões e mensagens. Ela se comunica com a controller, transmitindo a requisição dos usuários e apresentando as respostas (ZUCHER, 2020).

3.5.3 Controller

Está camada intermedia solicitações realizadas pelo usuário através da View com o retorno (Resposta) realizadas pelo Model, que segundo Zucher (2020), “o controller operaria como o ‘’maestro de uma orquestra’’ que permite a comunicação entre o detentor dos dados e a pessoa com vários questionamentos no MVC.”

3.5.4 Service

A camada de serviços é responsável por gerenciar as regras de serviços de uma aplicação. Segundo FOWLER (2002, p. 133), a service “define o limite de um aplicativo […] e seu conjunto de operações disponíveis a partir da perspectiva das camadas de interface do cliente.” 

3.6 React Native

O React Native é uma plataforma baseada no React e no JavaScript, visando a criação e desenvolvimento de aplicações mobile híbridas, compreendendo as plataformas Android e iOS. Seu desenvolvimento teve início em 2013 pelo grupo de engenheiros do Facebook e publicado em 2015 e, no mesmo ano, também foi anunciado que seria um projeto de código-aberto (ESCUDELARIO; PINHO, 2020).
O framework já ultrapassou o desenvolvimento nativo em popularidade e conta com diversos casos de sucessos, entre eles estão Uber, Tesla, Skype e Pinterest, além de Facebook e Instagram que são da própria empresa (ESCUDELARIO; PINHO, 2020).

3.6.1 Funcionamento React Native

Para seu funcionamento temos a interface de usuário (UI) sendo desenvolvida através das tecnologias do JavaScript e os cálculos de componentes e entradas do usuário sendo recebidos e calculados de forma nativa – Objective-C/Swift para iOS e Java/Kotlin para Android – porém a comunicação não é direta, ela ocorre através da “Bridge”, essa “ponte” que atua em ambos os lados é responsável pelo gerenciamento e transmissão das requisições da interface e dos cálculos de layout e entradas do usuário para que não haja interferência entre o JavaScript e os componentes nativos, ou seja, a interface é definida pelo JavaScript, enviada para as APIs de renderização nativas e calculadas, uma vez que há a entrada do usuário essa informação volta ao JavaScript que ditará as mudanças da interface (CÂMARA, 2018).

3.6.2 Vantagens

Dessa forma, o aplicativo garante um caráter nativo, mesmo não sendo completamente nativo. Segundo Escudelario e Pinho (2020, p.18) As vantagens de uma aplicação ter caráter nativo são:

  1. Carregamentos da aplicação mais rápidos;
  2. Experiência do usuário fluida;
  3. Mais segurança;
  4. Melhor integração entre funções nativas do celular, como câmera, GPS, etc.;
  5. Melhor performance em geral.

Atualmente ganha bastante espaço no mercado de trabalho por conta da possibilidade de reaproveitar o código de um sistema operacional para outro gerando uma economia de gastos e tempo na criação das aplicações, o que antes era necessário a contratação de desenvolvedores de plataformas e linguagens diferentes, também não era possível fazer o reaproveitamento do código de uma plataforma para a outra. (ESCUDELARIO; PINHO, 2020).
Além do reaproveitamento, o React Native tem uma funcionalidade muito atrativa: Hot Reloading. Essa funcionalidade mantém o código sendo executado e compilado em segundo plano logo, toda vez que as alterações do código são aplicadas é possível visualizá-las em um dispositivo físico ou até mesmo em um emulador mobile. (ESCUDELARIO; PINHO, 2020).

3.7 Banco de dados

Banco de dados é a organização e armazenagem de informações/dados que tratam do mesmo assunto, e que precisam ser gravados para segurança ou conferência futura. Os dados nos tipos mais comuns de bancos de dados em operação atualmente, são modelados em linhas e colunas em uma série de tabelas para tornar o processamento e a consulta dos dados eficientes. Podem ser facilmente acessados, gerenciados, modificados, atualizados, controlados e organizados (SOUZA, 2020).
Segundo Silberschatz et al. (2006, p. 24), “podem ser utilizados nos mais diversos ramos, como instituições financeiras, companhias aéreas, centros de ensino, comércios, departamento de recursos humanos, dentre outros”
A importância da utilização de um banco de dados, é para poder armazenar todas as informações recebidas e contidas no aplicativo de forma eficiente e permitindo que o usuário tenha a melhor experiência possível assim conseguindo navegar e encontrar todas as informações que ele busca durante o acesso. Além de ser benéfico para os visitantes do aplicativo, também é de grande ajuda para as possíveis manutenções de rotina na parte de TI, afinal, ajuda nos acessos, armazenamentos e restauração sempre que necessário (OUVERNEY, 2021).

3.7.1 Vantagens

As vantagens de um banco de dados aparecem não só para a produtividade do grupo, como também para o alinhamento de todas as frentes e nos resultados alcançados. Além disso, influência diretamente na segurança, onde será possível o armazenamento desses dados permitindo o acesso somente a pessoas específicas. Também melhora na tomada de decisões, pois com o banco, os dados são armazenados e consegue-se basear e avaliar estratégias de forma clara e transparente (SOUZA, 2020).

3.7.2 Normalização

Como boas práticas do banco de dados, existe um processo chamado de normalização, que é a modelagem do banco de dados projetando a forma como as informações serão armazenadas com o objetivo de diminuir a redundância do banco. Para evitar essas redundâncias, deve-se criar tabelas com as suas próprias chaves primárias e relacionar a primeira tabela com a segunda (MACHADO, 2015).
Primeira forma normal é quando todos os atributos contêm apenas um valor correspondente e não existem grupos de atributos repetidos. A segunda forma normal trabalha com as irregularidades e evita que haja redundância. A terceira forma normal, é a análise e, se não for encontrado atributos que dependem de outros atributos não chave, a entidade está na terceira forma normal, isso se não for de encontro com as definições da primeira e segunda forma normal. A entidade estará na quarta forma normal, quando ela estiver na terceira forma normal e também, não ter nos seus atributos dependências multivaloradas, que são campos repetidos em relação a chave primária, gerando redundância. O objetivo é deixar sem dependências funcionais do gênero (MACHADO, 2015).

3.8 Android

Para este projeto, decidiu-se o foco para o sistema operacional Android devido ser a plataforma mais popular no Brasil e no mundo (Conforme figura 2) e, também, pela maior acessibilidade durante o desenvolvimento da aplicação – com o Android Studio, que pode ser utilizado com Windows e iOS, não se faz necessário a disponibilidade de um aparelho Android físico.

Figura 2 – Mobile Operating System Market Share Worldwide

Fonte: https://gs.statcounter.com/os-market-share/mobile/worldwide (2022)

4. Materiais e Métodos

Nesta etapa é apresentado sobre o desenvolvimento da aplicação de localização de animais, trazendo os requisitos, arquitetura, funcionamento e características.

4.1 Requisitos

Os requisitos são as propriedades de software definidas pelo usuário, com intuito de atender suas necessidades, podendo ser funcional e não funcional. O Funcional é correspondente às funções dos sistemas, em que o usuário final utiliza. Já os não funcionais, abordam sobre restrição de funcionalidade do sistema (CAMPOS et al., 2019). Como por exemplo a linguagem de programação e a plataforma de desenvolvimento.

4.1.1 Requisitos funcionais

RF01: A aplicação deverá ser executa em sistema operacional Android;
RF02: O aplicativo deverá permitir que o usuário se cadastre para obter acesso às funcionalidades do sistema;
RF03: O aplicativo deverá permitir o cadastro de parceiros (ONGs e voluntários);
RF04: O aplicativo deverá autenticação através de um processo de login;
RF06: O sistema deverá ter uma tela que apresente todas as funcionalidades disponíveis para o usuário;
RF07: Deverá ser possível cadastrar o animal abandonado informando suas características, condições, localização de onde foi visto e realizar upload de imagem;
RF08: Deverá listar os animais abandonados;
RF09: Deverá apresentar quantidade de animais abandonados cadastrados.

4.1.2 Requisitos Não funcionais

RNF01: Utilizar linguagem de programação Java com framework Spring boot para o back-end;
RNF02: Utilizar framework React Native para o front-end;
RNF03: O sistema deverá ser implementado utilizando serviços de computação em nuvem da Amazon Web Services;
RNF04: Deverá utilizar arquitetura de microsserviços;
RNF05: Deverá ter monitoração dos recursos computacionais;
RNF06: Deverá ser possível a visualização de logs do sistema.

4.2 Características

O projeto foi definido, com o desenvolvimento de uma aplicação mobile Android. Foi realizado todo o fluxo para que usuários, ONGs e voluntários possam se cadastrar, cadastrar e buscar animais através da geolocalização. Utilizou-se serviço de computação em nuvem para hospedar e executar as aplicações de back-end e seus respectivos bancos de dados.
O Aplicativo conta com um sistema de login prévio, antes de ser efetivado o acesso. Para esse login e a navegação no app, o usuário deve ter uma conta registrada com e-mail e senha, que serão utilizados para identificação.

4.3 Organização do desenvolvimento

Para realizar uma organização adequada do projeto, foi dividido o desenvolvimento em back-end, que é a parte de operação do sistema, onde o usuário não tem acesso diretamente e o front-end, responsável pela interação com o usuário, através de telas.

4.3.1 Back-end

Foram desenvolvidas duas APIs, sendo a de gerenciamento de usuários e gerenciamento de animais, utilizando a arquitetura de microsserviços. Então cada aplicação possui seu próprio banco de dados que trata de um domínio específico.
Os dois microsserviços foram desenvolvidos utilizando a linguagem de programação Java utilizando framework Spring Boot.
A aplicação de gerenciamento de usuários possui todas as funcionalidades que envolvem o domínio de usuários. Como as funcionalidades de cadastros, busca utilizando identificador e fluxo de autenticação.
A aplicação de gerenciamento de animais contém todas as funcionalidades que envolvem o domínio de animais como cadastro, upload de imagem, listar opções de característica do animal, busca utilizando identificador, listagem de animais por região.
O microsserviço de animais se comunica com o de usuários nos fluxos que é preciso retornar os dados do usuário que cadastrou o animal no sistema para front-end, para isso integra realizando chamadas HTTP no método GET de usuários por id.

4.3.1.1 Arquitetura de desenvolvimento back-end

As duas aplicações foram desenvolvidas seguindo o padrão MVC (Model, View e controller).

4.3.1.1.1 Model

A camada Model, representada pelo pacote domain, possui o pacote entity que representa as entidades da aplicação e repository que possui as interfaces que realizam as transações no banco de dados, vide figuras 3 e 4.

Figura 3 – Pacote domain API Usuário

Fonte: Autores (2022)

Figura 4 – Pacote domain API Animal

Fonte: Autores (2022)

4.3.1.1.2 Controller

A camada controller é o ponto inicial da execução, onde é recebido a requisição para um método específico, por exemplo GET e POST, e será repassado para as classes de serviços onde possui as regras de negócio e integra com a camada Model. E após finalizar retorna uma resposta para o cliente que realizou a integração. Essa camada pode ser observada nas figuras 5 e 6.

Figura 5 – Pacote controller API Usuário

Fonte: Autores (2022)

Figura 6 – Pacote controller API Animal

Fonte: Autores (2022)

4.3.1.1.2.1 Usuário

As classes controller da aplicação de usuários possui os seguintes métodos:

POST:
• Para realização de cadastro de ambos os tipos de usuários;
• Geração de token de acesso;
• Atualização de token de acesso.
GET:
• Para realizar a busca de usuários por id.

4.3.1.1.2.2 Animal

As classes controller da aplicação de animais possui os seguintes métodos:

POST:
• Para cadastro de animais e upload de imagem.
GET:
• Busca de animal por ID;
• Listar animais paginado;
• Listar animais filtrado por cidade;
• Listar opções de raças, raças filtradas por espécie, portes, cores e espécies.

4.3.1.1.3 Service

A camada service ficou responsável por todas as regras de negócio do projeto. Para usuários, ficaram regras como tratamento de informações para realização do cadastro e validação de dados para o login.
Para a parte de animais, o cadastro possui validações como, se foi recebido a imagem do animal é realizado o upload no serviço S3 (Figura 7). Na busca é validado se possui um id da imagem salvo no banco, caso não tenha, não é realizada a tentativa de download da imagem no Bucket do S3 (Figura 8).

Figura 7 – Regra de negócio upload imagem

Fonte: Autores (2022)

Figura 8 – Regra de negócio download imagem

Fonte: Autores (2022)

4.3.1.1.4 View

A camada View é a responsável por todo o desenvolvimento front-end do aplicativo, parte da interação com o usuário final.

4.3.1.2 Arquitetura AWS

As aplicações back-end foram todas construídas para serem executadas no serviço de nuvem da Amazon junto com seus bancos de dados.
A API de gerenciamento de usuários e gerenciamento de animais estão sendo executadas no Amazon Elastic Container Service (Amazon ECS) que é um serviço de orquestração de contêineres onde foi possível provisionar contêineres Docker utilizando Linux. Usou-se a tecnologia do AWS Fargate que permite executar contêineres no ECS sem a necessidade de gerenciar os servidores onde as aplicações estão hospedadas, definindo os recursos de CPU e Memória RAM que deverá ser provisionado. Foi preciso criar dois serviços do ECS sendo uma para a API de usuários e outro para de animais, onde é possível definir quantos contêineres de cada aplicação devem estar sendo executados e em conjunto com o Elastic Load Balancer sempre mantém essa quantidade, ou seja, caso uma aplicação tenha algum tipo de problema e fique offline, automaticamente é provisionado novos contêineres (Amazon AWS).
Foi criado uma VPC com quatro subnets, sendo duas públicas, ou seja, podendo ser acessadas pela internet e duas privadas, não podendo ser acessadas pela internet, só possuem IPs privados.
As duas aplicações estão hospedadas nas subnets privadas, só podendo comunicar-se com recursos que estiverem hospedados na mesma rede.
Para os bancos de dados das aplicações utilizou-se o Relational Database Service com a tecnologia do MySQL. Esse serviço além de permitir que os dados das aplicações estejam salvos na Nuvem, realiza o gerenciamento dos recursos necessários para executar os bancos de dados.
Seguindo a arquitetura de microsserviços foi construído um banco de dados por aplicação e esses foram hospedados na mesma rede onde está sendo executado os contêineres das APIs, permitindo se comunicarem em uma rede privada sem qualquer vulnerabilidade a acessos da rede pública.
Para a aplicação mobile conseguir consumir as APIs hospedadas nas subnets privadas na AWS, criou-se um API Gateway para ser o ponto central que será acessado pelo front-end, ou seja, todas as requisições deverão passar pelo API Gateway, onde é feito o fluxo de autenticação permitindo ou negando acesso às APIs. Caso seja permitido a requisição é repassada para um Network Load Balancer que repassa para o Application Load Balancer, onde é feito o balanceamento de cargas entre os contêineres melhorando a performance das aplicações, pois não estará onerando somente um recurso, já que a carga estará sendo dividida.
No fluxo de cadastro e autenticação de usuários foi utilizado o Amazon Cognito que é o serviço da AWS para realizar o gerenciamento de usuários, onde é possível criar um grupo de usuários para seu app que possuem login e senha (Amazon AWS). Para utilizar esse recurso a aplicação de gerenciamento de usuários após cadastrar os dados dos usuários no banco de dados, realiza uma chamada para API do Cognito utilizado o SDK para salvar os dados de acesso. E para realizar a autenticação a aplicação integra com API de login do Cognito, passando as credenciais informadas. Caso o usuário esteja cadastrado, é retornado um token de acesso que será utilizado pelo app mobile nas requisições para o API Gateway que irá verificar se o token é válido e não está expirado. No fluxo de sucesso é permitido o tráfego da requisição para o back-end, senão é retornado um erro.
Para que as aplicações que estavam sendo executadas no ECS em subnets privadas conseguissem se comunicar com os serviços da AWS, foi preciso utilizar o serviço de PrivateLink que permite acessar esses recursos utilizando conexão privada, sem a necessidade de o tráfego passar pela internet utilizando um Nat Gateway (Amazon AWS). Um exemplo de serviço que é possível utilizar o PrivateLink seria o S3. Então com a criação de um Endpoint PrivateLink na VPC as aplicações conseguem se comunicar com as APIs do S3 realizando conexões privadas, tendo então economia nos custos de rede.
O Cognito por não ter compatibilidade com o serviço de PrivateLink, foi preciso criar um Nat Gateway que permite que recursos em redes privadas tenha acesso a internet, mas somente é possível que a aplicação realize o tráfego de saída, então ainda permanece segura a tráfegos de entradas, ou seja, conexões externas. Esse Gateway está localizado na subnet pública e encaminha as requisições para o Internet Gateway que envia para internet.
A API de gerenciamento de animais recebe os dados do animal encontrado e realiza o upload da imagem do animal. Essa imagem é armazenada no Amazon Simple Storage Service (Amazon S3) que é o serviço de armazenamento de objetos (Amazon AWS). Para salvar no S3 a aplicação de animais gera um id aleatório e envia o arquivo da imagem e o id para o Bucket utilizando as APIs do S3, após o envio, é realizado o cadastro dos dados do animal no banco de dados e o id da imagem. No fluxo de busca de animais onde é retornado os dados do animal e sua foto, a aplicação realiza a integração com o S3 passando o id do objeto que será realizado o download e retorna a imagem para o app mobile que apresenta em tela.
Foi construído um diagrama para representar a arquitetura do back-end do aplicativo criada na AWS, conforme ilustrado na figura 9.

Figura 9 – Diagrama arquitetura AWS

Fonte: Autores (2022)

4.3.2 Front-end

4.3.2.1 Protótipo

Para facilitar no desenvolvimento das telas da aplicação, foram desenvolvidos os wireframes que são os protótipos de design das interfaces. Foram realizados na plataforma MarvelApp, com intuito de ter mais agilidade e facilidade durante a criação sendo usado como um guia.
A figura 10 apresenta como forma de exemplo a tela de login desenvolvida antes do início do desenvolvimento com React Native.

Figura 10 – Wireframe – Tela de login

Fonte: Autores (2022)

4.3.2.2 Arquitetura de desenvolvimento front-end

A forma padrão definida para criar as telas, consiste em uma função que retorna o UI (interface de usuário) desejado, dentro dessa função faríamos manipulação de dados e integrações necessárias. Porém, há outra forma de criar essas telas, utilizando Component, nativo do próprio React, temos um ciclo de vida para a classe e, com isso, mais estrutura e liberdade para montar as telas como explicado a seguir.
Para cada tela temos cinco arquivos, seguindo como base um MVC, cada um possui uma função específica:

• nomeDaTela.model;
• nomeDaTela.view;
• nomeDaTela.service;
• nomeDaTela.relations;
• nomeDaTela.component.

4.3.2.2.1 Model

A model exporta dois objetos bases idênticos para sua classe, um desses objetos será usado de backup para limpar todos os dados novos ao fecharmos a tela, o outro será usado logo no início da classe, para definir a base de quais campos temos, alguns são pré-definidos, como título da tela, outros estão vazios e serão preenchidos com o que a tela “pai” enviar e os restantes dos campos, também vazios, receberão valor de acordo com as ações do usuário. Todos os campos usados pela tela estão definidos aqui para que a memória da classe tenha conhecimento de tudo que foi alterado, para que a tela “pai” saiba o que pode enviar para a “filha”, para sabermos o que fazer com o retorno de APIs e para que ao renderizar os elementos da tela no início não tenham nenhum problema de variável indefinida.

4.3.2.2.2 View

A View utiliza a estrutura padrão de criar telas, citado anteriormente, exporta uma função que retorna o UI da tela já estilizado no próprio arquivo. Este arquivo é referenciado na etapa de renderização no ciclo de vida do componente, recebe os dados iniciais da Classe, a informa com as interações do usuário e atualiza os campos caso dados sejam alterados internamente.

4.3.2.2.3 Service

A service possui os métodos que a classe usará para chamar APIs ou para montar objetos com informações importantes para a tela “filha” antes de abri-las.

4.3.2.2.4 Relations

A relations possui métodos que a classe consulta para fazer verificações internas, principalmente após alguma interação do usuário. Por exemplo, ao preencher cada campo obrigatório da tela, a classe o envia ao método da relations responsável por validar se todos possuem valor, ao terminar de preencher todos, o método então altera o valor do campo responsável pelo estado do botão, dessa forma, o botão da tela deixa de estar desabilitado e se torna habilitado ao toque.

4.3.2.2.5 Component

A component é a principal, esta é a classe com ciclo de vida que nos permite orquestrar os demais arquivos e controlar dados. Para o controle de dados temos dois tipos presentes no React.Component, props e state. Props é definido pelo “pai” e se manterá durante a utilização da classe. State é para dados mutáveis, que será manipulada conforme a necessidade (React Native).

Todas as classes seguem a seguinte ordem de chamada de métodos:
• O primeiro a ser chamado é o construtor(), nele é iniciado o state com o objeto base da tela, presente no arquivo nomeDaTela.model;
• O segundo método a ser chamado no nosso ciclo de vida do componente é o render(), este retorna a função default, e única, do arquivo nomeDaTela.view renderizando seus elementos;
• O terceiro método chamado é o componentDidMount(), onde é passado os dados do props para state e invoca o método onInit(), do arquivo nomeDaTela.service, que, se necessário, consulta APIs para buscar mais dados. Ao final do método componentDidMount() tem todos os dados para o início da tela, sejam textos fixos de título, informações importantes da tela “pai” ou dados pertinentes do banco por exemplo;
• O último método do ciclo de vida é chamado ao fecharmos a tela, componentWillUnmount() define o state com o objeto base novamente para evitar que ao abrir a tela uma segunda vez tenha dados da interação anterior;

Após o método componentDidMount() e antes do componentWillUnmount(), tem a utilização da tela por parte do usuário e alguns métodos que auxilia a orquestração dos demais arquivos, estes são:
• onUpdate(), quando o usuário altera algo na tela é emitido do arquivo nomeDaTela.view para nomeDaTela.component qual campo foi alterado e seu novo valor, este método atualiza o state e chama o método verifyChange();
• verifyChange(), presente no fim dos métodos componentDidMount() e onUpdate(), responsável por consultar as funções do arquivo nomeDaTela.relations, de acordo com a situação;
• onPress(), quando o usuário clica em algum botão emite qual método exclusivo da tela deve ser executado, o onPress() chama esse método solicitado que pode abrir outra tela ou chamar APIs através do arquivo nomeDaTela.service;
• Em algumas classes há também o método focusUpdate(). Quando uma tela “pai” precisa de dados da tela “filha”, por causa do funcionamento da biblioteca de navegação entre telas, é necessário criar um método no arquivo nomeDaTela.view que detecta quando a tela está em foco, e chama o método focusUpdate(), que compara prop e state para saber se os dados da “filha” foram passados para a tela “pai”.

4.3.2.2.6 Bibliotecas utilizadas

Durante a evolução do aplicativo utilizamos algumas bibliotecas que facilitaram muito o desenvolvimento, estas foram:

• react navigation, utilizada para navegação entre telas;
• expo camera, para utilizar a câmera do usuário e tirar fotos dos animais abandonados;
• expo location, para obter a localização do usuário;
• react native maps, para visualizar o Google Maps em um elemento da UI;
• react native bouncy checkbox e react native dropdown select list, respectivamente um elemento de checkbox e um campo de selecionar opções, estes elementos foram utilizados a partir de bibliotecas pela facilidade, enquanto outros elementos como campo de texto, botões, inclusão de texto, entre outros, foram padronizados e disponibilizados a todos os arquivos do projeto.

4.3.2.3 Tela de Login e cadastro

Nesta tela (Figura 11), é apresentado o nome do aplicativo e os campos para que seja efetuado o login (e-mail e senha) previamente cadastrado sendo, no momento, o único método de acesso ao aplicativo. Abaixo dos campos de login é possível acessar o painel de cadastro e, em casos de problemas com a senha, uma possibilidade para a recuperação, sendo solicitado o e-mail.

Figura 11 – Tela de Login

Fonte: Autores (2022)

No cadastro de contas existem três possibilidades: perfil social, parceiros e voluntários (Figura 12).

• Perfil social: destinado ao usuário que deseja apenas utilizar as funções do aplicativo. Será solicitado os dados pessoais (nome, sobrenome, e-mail e data de nascimento) e senha;
• Parceiros: destinado a cadastro de ONGs (Organizações Não Governamentais) e empresas que desejam colaborar com resgates de animais reportados. Será solicitado os dados da organização (nome social, CNPJ, e-mail, telefone), senha e redes sociais;
• Voluntário: destinado a aqueles que desejam colaborar com resgates de animais reportados, porém não atua em nome de alguma organização. Será solicitado os dados pessoais, senha e redes sociais.

Figura 12 – Tela de Cadastro

Fonte: Autores (2022)

4.3.2.4 Menu principal

A home (Figura 13), principal interface de navegação do aplicativo, contém o ícone do perfil onde dá acesso à interface de manutenção e personalização da conta do usuário, ao mapa, ao cadastro de animais abandonados e ao relatório.

Figura 13 – Home

Fonte: Autores (2022)

4.3.2.5 Mapa

No mapa (Figura 14) é possível visualizar as marcações de todos os animais cadastrados no aplicativo.

Figura 14 – Mapa

Fonte: Autores (2022)

Ao clicar no ícone, será exibido as informações do animal bem como sua imagem conforme figura 15.

Figura 15 – Dados do animal

Fonte: Autores (2022)

4.3.2.7 Cadastro de animais abandonados

Ao selecionar “Abandonado” no menu principal, o usuário será redirecionado ao cadastro de animais (Figura 16).

Figura 16 – Tela para cadastro de animais

Fonte: Autores (2022)

Clicando em adicionar foto, a câmera do aparelho será acessada para que o usuário tire uma fotografia do animal que está sendo cadastrado, conforme figura 17.

Figura 17 – Tela para cadastro de animais

Fonte: Autores (2022)

O endereço será aplicado automaticamente após verificar a posição do usuário no mapa, que será aberto ao clicar na caixa de endereço.

4.4 Banco de dados

O banco de dados desenvolvido para o aplicativo, foi criado passando por várias etapas de um processo.
A primeira etapa foi a análise dos wireframes e os requisitos necessários para poder definir as tabelas que iriam armazenar todos os dados necessários. A partir disso, foi dado o início no diagrama entidade relacionamento do banco utilizando o software brModelo (Figura 19), e aplicando boas práticas de modelagem de banco de dados.
Outro método aplicado, foi o uso de uma entidade associativa, onde requer a implementação de uma relação base para relacionamentos muitos-para-muitos. Uma tabela associativa mapeia duas ou mais tabelas referenciando as chaves primárias, deixando o banco mais organizado, assim tendo 13 tabelas no total. Um exemplo de entidade associativa, tem-se a tabela raca_animal, onde retorna as opções parametrizadas para o front-end renderizar o combobox com as opções de raças de animais, e no momento de cadastro, enviar o id referente a raça selecionada.
A tabela raca_animal e espécie possuem relacionamento que possibilita a realização de filtros nas opções de raças associadas a espécie.
Foram realizadas também, as inserções em algumas tabelas (Figura 18) como porte_animal, que foi inserido as opções Pequeno, Médio e Grande, entre outras para parametrizar as opções que serão apresentadas no combobox na tela de cadastro.
Nas tabelas utilizadas para consultas temos em sua maior parte um ID do tipo INT para melhor leitura e otimização do processo. As tabelas auxiliares que vão armazenar as descrições, textos do tipo VARCHAR para alguma consulta ou processos de leitura que não sejam relacionados a acessos.
Utilizando o MySQL, foi criado o banco de dados para o armazenamento de informações do aplicativo, e também para validação do login dos usuários e assim dando possibilidade de testes no back-end do projeto.
As figuras 20 e 21, representam a modelagem lógica, geradas através do software MySQL Workbench.

Figura 18 – Inserts

Fonte: Autores (2022)

Figura 19 – Diagrama Entidade Relacionamento

Fonte: Autores (2022)

Figura 20 – Modelagem lógica – Banco de dados Animais

Fonte: Autores (2022)

Figura 21 – Modelagem lógica – Banco de dados usuários

Fonte: Autores (2022)

5. Resultados e discussão

Este projeto foi de grande valia, e trouxe bons resultados. Primeiramente do ponto de vista acadêmico, com a proposta de utilizar linguagens de programação como Java com framework Spring Boot e JavaScript com framework React Native.
Outro grande fator que vale salientar, foi para aproximar o trabalho acadêmico do que se tem de mais atual e eficiente no mercado tecnológico, como as linguagens de programação utilizadas que estão cada vez mais comuns em grandes empresas que buscam melhorias em suas aplicações e novos desenvolvimentos. O uso de infraestrutura em cloud e arquitetura de microsserviços, que é umas das principais vantagens, é a escalabilidade em comparação com arquiteturas monólitos e antigas.
Em caráter social, o aplicativo com uso intuitivo, tem uma grande contribuição para auxiliar ONGs, Prefeituras, voluntários e pessoas que perderam seus animais de estimação, a ajudar a localizá-los trazendo de volta a seus lares ou em abrigos temporários, com alimentação e cuidados veterinários.
Por fim, o app traz a atenção de toda a população quanto a importância do tema de abandono de animais, mostrando a situação do abandono, levando informações e números registrados nos últimos tempos.

6. Conclusão

O abandono de animais é um tema que está ganhando cada vez mais notoriedade nos últimos tempos, devido ao seu alto índice. Porém, apesar disso observa-se grandes números de animais nas ruas, por irresponsabilidades de seus tutores e/ou sua rápida reprodução, aumentando ainda mais os números de casos.
Através do aplicativo desenvolvido neste projeto, qualquer pessoa que tiver acesso à internet móvel e um aparelho (Android) que possa realizar download de aplicativos, poderá realizar o cadastro de animais abandonados que estão em situação de rua, podendo assim colaborar com ONGs, Prefeituras e voluntários no resgate.
Além dessa colaboração, o app contabilizará todos os animais cadastrados na plataforma, com intuito de apresentar os dados sobre o abandono de animais, podendo assim auxiliar em pesquisas e estudos sobre o tema.
Pelo lado dos usuários, o aplicativo tem uma fácil e intuitiva utilização, sendo possível visualizar o mapa com todos os animais registrados ao redor, listar todos animais cadastrados na plataforma e uma tela dedicada aos números do abandono.
Todo desenvolvimento da aplicação está disponibilizado no Github, tem-se o objetivo de continuar na elaboração e implementação de novas funcionalidades que surgiram durante o desenvolvimento do escopo proposto.

6.1 Desenvolvimento futuros

Tratando-se de tecnologia, todo software não tem limites para melhorias e aperfeiçoamentos em seu desenvolvimento. Pontos de melhorias e novas ideias foram surgindo durante a elaboração, porém, não sendo possível incluir no escopo inicial definido, devido ao prazo de entrega do projeto.
Como dito anteriormente, algumas melhorias foram pontuadas, como:

• Expandir a aplicação para a plataforma iOS, atingindo um número maior de usuários participativos;
• Criação de um chat de interação entre o usuário de registro animal com o tutor ou possível adotante;
• Desenvolver um canal específico para ONGs e voluntários, divulgarem os animais que estão sob sua guarda e disponíveis para adoção;
• Criar a funcionalidade “Guest/convidado(a)” para pessoas que queriam apenas visualizar os animais cadastrados;
• Desenvolver a funcionalidade para informar quando um animal for resgatado ou encontrado;
• Desenvolver funcionalidade utilizando recursos de inteligência artificial para identificar possíveis cadastros duplicados.

7. Referências Bibliográficas

Abandono de animais aumentou cerca de 60% durante a pandemia. Exame, São Paulo, 27 de dez. de 2021. Disponível em: https://exame.com/bussola/abandono-de-animais-aumentou-cerca-de-60-durante-a-pandemia. Acesso em: 15 de set. de 2022.

ABANDONO DE ANIMAIS SE MULTIPLICA NA PANDEMIA E ATINGE ATÉ CAVALOS E COELHOS: Bichos são abandonados até 6 vezes mais, por desemprego, quarentena e medo da Covid-19. Rio de Janeiro, 29 jun. 2020. Disponível em: https://www1.folha.uol.com.br/cotidiano/2020/06/abandono-de-animais-se-multiplica-na-pandemia-e-atinge-ate-cavalos-e-coelhos.shtml. Acesso em: 15 set. 2022.

ACKEL FILHO, Diomar. Direitos dos animais. Themis, 2001.

AMAZON AWS. O que é Elastic Load Balancing? Disponível em: https://docs.aws.amazon.com/pt_br/elasticloadbalancing/latest/userguide/what-is-load-balancing.html. Acesso em: 1 nov. 2022.

AMAZON AWS. O que é o Amazon API Gateway? Disponível em: https://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/welcome.html. Acesso em: 1 nov. 2022.

AMAZON AWS. O que é o Amazon Elastic Container Service? Disponível em: https://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/Welcome.html. Acesso em: 2 nov. 2022.

AMAZON AWS. O que é o Amazon Relational Database Service (Amazon RDS)? Disponível em: https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/Welcome.html. Acesso em: 2 nov. 2022.

AMAZON AWS. Amazon ECS no AWS Fargate. Disponível em: https://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/AWS_Fargate.html. Acesso em: 05 nov. 2022.

AMAZON AWS. Conectar sua VPC a outro serviços usando o AWS PrivateLink. Disponível em: https://docs.aws.amazon.com/pt_br/vpc/latest/userguide/endpoint-services-overview.html. Acesso em: 05 nov. 2022.

AMAZON AWS. O que é o Amazon Cognito? Disponível em: https://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/what-is-amazon-cognito.html. Acesso em: 05 nov. 2022.

AMAZON AWS. O que é o Amazon S3? Disponível em: https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/Welcome.html. Acesso em: 06 nov. 2022.
AMAZON AWS. Microsserviços. Disponível em: https://aws.amazon.com/pt/microservices/. Acesso em: 08 nov. 2022.

CÂMARA, Rafael. O que você deve saber sobre o funcionamento do React Native. 2018. Disponível em: https://tableless.com.br/o-que-voce-deve-saber-sobre-funcionamento-react-native/. Acesso em: 30 out. 2022.

CAMPOS, Linair Maria; DE ALMEIDA CAMPOS, Maria Luiza; DE SOUZA, Jóice Cleide Cardoso Ennes. Requisitos para softwares de tesauro. Brazilian Journal of Development, v. 5, n. 3, p. 1886-1902, 2019.

DELABARY, Barési Freitas. Aspectos que influenciam os maus tratos contra animais no meio urbano. Revista eletrônica em gestão, educação e tecnologia ambiental, p. 835-840, 2012.

ESCUDELARIO, Bruna; PINHO, Diego. Desenvolvimento de Aplicativos Mobile com React. Casa do Código, 2020, 189 p.

FARACO, C. B. INTERACAO HUMANO-ANIMAL. 2008.

FIELDING, R. Architectural Styles and the Design of Network-based Software Architectures. 100 p. Tese (Doutorado) — University of California, 2000.

FOWLER, Martin. Patterns of Enterprise Application Architecture: Pattern Enterpr Applica Arch. Addison-Wesley, 2002.

G1 GLOBO (Minas Gerais). Castração é uma das principais alternativas para controle de animais abandonados. 2019. Disponível em: https://g1.globo.com/mg/vales-mg/eobicho/noticia/2019/06/17/castracao-e-uma-das-principais-alternativas-para-controle-de-animais-abandonados.ghtml. Acesso em: 19 set. 2022.

GAERTNET, R.; BRANCO, O. Conhecimento de zoonoses pelos alunos da sexta série do ensino fundamental, sua ligação com meio ambiente e educação ambiental. I Encontro da Rede de Educação Ambiental no Sul do Brasil. Mestrado Educação/UNIVALI, Rua Uruguai. Itajaí, Brasil, 2003.

GLOBALSTATS, Statcounter. Mobile Operating System Market Share Worldwide. 2022. Disponível em: https://gs.statcounter.com/os-market-share/mobile/worldwide. Acesso em: 04 nov. 2022.

GOMES, Rosangela Ma A.; CHALFUN, Mery. Direito dos animais–um novo e fundamental direito. In: XV CONGRESSO NACIONAL DO CONPEDI. 2010.

GRANDIN, Temple; JOHNSON, Catherine. Na Língua dos Bichos: Usando os mistérios do autismo para decodificar o comportamento animal. Rio de Janeiro: Rocco, 2006.

LAZARIN, Lucas Roecker. A comunicação como estratégia de gestão em ONGs: informação, sensibilização e engajamento para sustentar e ampliar a garantia dos direitos dos animais. 2014.

MACHADO, Diego. Normalização em Bancos de Dados. Jun,2015. Disponível em: https://medium.com/@diegobmachado/normalização-em-banco-de-dados-5647cdf84a12. Acesso em: 01 nov. 2022

OMS. Zoonoses. 2020. Disponível em: https://www.who.int/news-room/fact-sheets/detail/zoonoses. Acesso em: 25 out. 2022.

OSÓRIO, Rogério. Dos crimes contra os animais de companhia–da problemática em torno da Lei 69/2014, de 29 de agosto (O direito da carraça sobre o cão). Portal da Revista Jurídica Julgar Online, 2016.

OUVERNEY, Kássio Gomes. A importância dos bancos de dados geográficos, geoprocessamento e dados na nuvem. 2021. Disponível em: https://www.nucleodoconhecimento.com.br/tecnologia/dados-geograficos. Acesso em: 31 out. 2022.

REACT NATIVE. Core Components and Native Components. 2022. Disponível em: https://reactnative.dev/docs/intro-react-native-components. Acesso em: 10 nov. 2022.

REACT NATIVE. State. Disponível em: https://reactnative.dev/docs/state.html. Acesso em: 10 nov. 2022.

REDHAT. API REST. 2020. Disponível em: https://www.redhat.com/pt-br/topics/api/what-is-a-rest-api#rest. Acesso em: 07 nov. 2022.

RENE JUNIOR. Métodos HTTP: Quais são e qual a funcionalidade deles. 2021. Disponível em: https://medium.com/@renejr03/métodos-http-quais-são-e-qual-a-funcionalidade-deles-491b1cc5d5b4. Acesso em: 12 out. 2022.

RODRIGUES, Liliana. Declaração Universal dos Direitos dos Animais. 2013. Disponível em: https://ldrldr.jusbrasil.com.br/noticias/112321553/declaracao-universal-dos-direitos-dos-animais. Acesso em: 18 set. 2022.

SCHEFFER, Gisele Kronhardt. Abandono de animais: um estudo criminológico no estado do Rio Grande do Sul. In: INSTITUTO ABOLICIONISTA ANIMAL CONGRESSO MUNDIAL DE BIOÉTICA E DIREITO ANIMAL. 2018. p. 39.

SILBERSCHATZ, Abraham. et al. Sistema de bancos de dados. Elsevier, 2006.
SILVA, Ana Julia et al. Abandono de cães na América Latina: revisão de literatura. Revista de Educação Continuada em Medicina Veterinária e Zootecnia do CRMV-SP, v. 11, n. 2, p. 34-41, 2013.

SILVESTRE, G. Controller e Service – Uma breve introdução. Disponível em https://dev.to/gabrielhsilvestre/controller-e-service-uma-breve-introducao-24hk Acesso em: 11 nov. 2022.

SOUZA, Ivan. Banco de dados: saiba o que é, os tipos e a importância para o site da sua empresa. 2020. Disponível em: https://rockcontent.com/br/blog/banco-de-dados/. Acesso em: 31 out. 2022

SILVA, Tagore Trajano. Fundamentos do Direito Animal Constitucional (Constitutional Animal Law Foundation). In: Anais do XVIII Congresso Nacional do CONPEDI. 2009.
ZUCHER, Vitor. O que é padrão MVC? Entenda arquitetura de softwares! 2020. Disponível em: https://www.lewagon.com/pt-BR/blog/o-que-e-padrao-mvc. Acesso em: 16 out. 2022.