<div align="center">
    <img height="150px" src="agronet/resources/imagens/agrobrasil_logo_novo.png" alt="Logo da Essor Seguros">
</div>

# AgroNet

[![Pipeline Status](https://repos.essor.net/agrobrasil/agronet/badges/uat/pipeline.svg?style=flat)](https://repos.essor.net/agrobrasil/agronet/-/pipelines)
[![Latest Release](https://repos.essor.net/agrobrasil/agronet/-/badges/release.svg?style=flat)](https://repos.essor.net/agrobrasil/agronet/-/releases)
[![Coverage](https://repos.essor.net/agrobrasil/agronet/badges/uat/coverage.svg?style=flat)](https://repos.essor.net/agrobrasil/agronet/-/graphs/charts)

<br>

![Static Badge](https://img.shields.io/badge/composer-2.8.9-blue?style=flat)
![Static Badge](https://img.shields.io/badge/Apache-2.4-blue?style=flat)
![Static Badge](https://img.shields.io/badge/PHP-7.4-blue?style=flat)
![Static Badge](https://img.shields.io/badge/Zend-1.12.20-blue?style=flat)
![Static Badge](https://img.shields.io/badge/Postgres-12.22-blue?style=flat)

## Introdução

O AgroNet é a plataforma digital desenvolvida pela [Agro Brasil Seguros](https://www.agrobrasilseguros.com.br) 
para simplificar e otimizar a gestão de seguros agrícolas. <br>
Desenvolvida com o framework Zend, seguindo os padrões MVC de arquitetura. Criada para atender corretores, 
produtores e equipes técnicas, ela oferece um ambiente integrado para contratação, acompanhamento e administração 
de apólices, além de ferramentas avançadas para análise de riscos climáticos. <br>
Com o AgroNet, todo o processo de seguro agrícola é realizado de forma ágil, segura e transparente, garantindo 
eficiência desde a emissão da proposta até a liquidação de sinistros.

## Funcionalidades

Atualmente a aplicação do AgroNet conta com inúmeros módulos que compoem o sistema, para que o README.md não fique 
extenso demais, foi descrito algumas rotas principais do sistema para que o desenvolvedor possa conhecer ter uma breve 
noção do sistema.

### Carregamento da tela principal:
Serviço para consulta dos dados iniciais para compor a tela inicial do sistema.

```http
GET /agronet/IndexController/index
```

### Montagem dos dados de beneficiário:
Serviço para montar um arquivo com os dados do beneficiário.

```http
POST /agronet/FileController/beneficiarioArquivo
```

### Inclusão de proposta:
Serviço para inclusão de proposta no ERP.

```http
POST /seguro/PropostaAjaxController/transmitir
```

### Realização de cálculo:
Serviço para realização de cálculos para as cotações e propostas.

```http
POST /seguro/PropostaAjaxController/calcula
```

### Emissão de apólice:
Serviço para realizar a emissão de apólice no ERP.

```http
POST /seguro/TransmissaoEssorController/liberaremissao
```

### Geração de orçamento:
Serviço para consultar e salvar dados do segurado para elaboração do orçamento.

```http
POST /seguro/PropostaController/seguro
```

### Geração de unidades seguradas:
Serviço para consultar e salvar dados das unidades seguradas e croquis junto dos cálculos.

```http
POST /seguro/PropostaController/unidade
```

### Consulta de regras do prêmio para orçamento:
Serviço para consulta de dados e regras de prêmio para o orçamento.

```http
POST /seguro/PropostaController/premio
```

### Registro de dados do orçamento:
Serviço para salvar os dados do orçamento para transmissão para o ERP.

```http
POST /seguro/PropostaController/save
```

### Cálculo de cotação:
Serviço para realizar o cálculo de uma cotação.

```http
POST /seguro/CotacaoController/calcular
```

### Notificação de aviso de sinistro:
Serviço para notificar a empresa responsável da abertura de aviso de sinistro.

```http
POST /sinistro2/AvisoSinistroController/enviarempresa
```

### Registro de produto:
Serviço para cadastrar um novo produto no sistema.

```http
POST /produto/ProdutoController/form
```

### Copia de produto:
Serviço para realizar a cópia de um produto já existente no sistema para troca de safras.

```http
POST /produto/ProdutoController/copiarProduto
```

### Exportação de lista de produtos:
Serviço para exportar os dados dos produtos em forma .csv.

```http
POST /produto/ProdutoController/geraXls
```

### Ativação ou desativação de produto:
Serviço para ativar ou desativar um produto do sistema.

```http
POST /produto/ProdutoController/active
```

### Desativação de habilitação:
Serviço para ativar ou desativar a habilitação de comercialização de um produto no sistema.

```http
POST /produto/ProdutoController/desabilitar
```

## Tecnologias

| Tecnologia | Versão  | Link                                                           |
|------------|---------|----------------------------------------------------------------|
| PHP        | 7.4     | https://www.php.net/releases/7.4/pt_BR.php                     |
| Zend       | 1.12.20 | https://www.zendframework.com/manual/1.12/en/introduction.html |
| Postgres   | 12.22   | https://www.postgresql.org/                                    |
| Composer   | 2.9     | https://getcomposer.org/                                       |
| Apache     | 2.4     | https://httpd.apache.org/docs/2.4/                             |

### Dependências ou bibliotecas

Para o funcionamento do AgroNet é necessário a existencia de algumas dependencias ou bibliotecas.

| Dependência             | Versão  | Repositório                                            |
|-------------------------|---------|--------------------------------------------------------|
| docusign/esign-client   | ^8.0    | https://packagist.org/packages/docusign/esign-client   |
| mpdf/mpdf               | ^8.0    | https://packagist.org/packages/mpdf/mpdf               |
| shuchkin/simplexlsxgen  | ^1.3    | https://packagist.org/packages/shuchkin/simplexlsxgen  |
| robmorgan/phinx         | ^0.14.0 | https://packagist.org/packages/robmorgan/phinx         |
| firebase/php-jwt        | 6.10.0  | https://packagist.org/packages/firebase/php-jwt        |
| php-amqplib/php-amqplib | ^3.6    | https://packagist.org/packages/php-amqplib/php-amqplib |
| vimeo/psalm             | ^5.22   | https://packagist.org/packages/vimeo/psalm             |
| phpunit/phpunit         | 9.6     | https://packagist.org/packages/phpunit/phpunit         |

### bibliotecas Jquery

Para o funcionamento do AgroNet é necessário a existencia de algumas bibliotecas.

| Biblioteca        | Versão | Repositório                                            |
|-------------------|--------|--------------------------------------------------------|
| JQuery            | 1.6    | https://api.jquery.com                                 |
| Bootstrap         | 3.3.7  | https://getbootstrap.com/docs/3.3                      |
| Font Awesome Free | 6.2.1  | https://docs.fontawesome.com/v6                        |
| Checkbox Free     | 0.5.2  | https://www.daredevel.com/jquery-tree-widget/          |
| Color Picker      | *      | http://www.eyecon.ro/colorpicker                       |
| Facebox           | *      | https://github.com/defunkt/facebox                     |
| Fancybox          | 1.3.1  | Link Descontinuado                                     |
| JQuery-ui         | 1.7.2  | http://jqueryui.com                                    |
| JQuery Alerts     | 1.1    | Link Descontinuado                                     |
| Multiselect       | 2.1.1  | https://github.com/ehynds/jquery-ui-multiselect-widget |
| Sumoselect        | 1.12.1 | http://hemantnegi.github.io/jquery.sumoselect          |
| Tooltip           | 1.2.5  | Link Descontinuado                                     |
| Uploadify         | 2.1.0  | Link Descontinuado                                     |
| JQuery Validade   | 1.5.5  | https://jqueryvalidation.org/                          |
| JQuery MultiFile  | 1.46   | http://www.fyneworks.com/jquery/multiple-file-upload/  |
| JQuery Mask       | 1.2.1  | https://plugins.jquery.com/mask/                       |

## Configurando projeto

Clone o projeto

```sh
git@repos.essor.net:agrobrasil/agronet.git
```

Execute os passos abaixo para baixar as dependências do projeto.

```sh
composer install
```
Após finalizar a instalação das dependências é necessário configurar seu application.ini, o projeto não possui
template com as variaveis de ambiente, para isso entre em contato com algum membro de P&D - POA.

## Configurando banco de dados

Para construir ou reconstruir o banco de dados da aplicação, é necessário que entre em contato com algum 
membro de P&D - POA. Devido o tamanho da base de dados é necessário realizar um dump da base de dados do ambiente
de UAT.

## Configurando docker

Para configuração do seu ambiente docker verifique esse [artigo](https://essor.freshservice.com/support/solutions/articles/5000095477).

## Testes

Essa aplicação não possuí testes automatizados.

## Sistemas Integrados
Esta API se comunica com os seguintes sistemas e serviços externos para garantir a funcionalidade e a troca de dados
de forma eficiente:

#### Google Maps:

- Provedor: Google Maps
- Finalidade: Geolocalização
- Método de integração: API.

#### I4pro (ERP):

- Provedor: I4pro (ERP)
- Finalidade:
    - Inclusão de proposta;
    - Recusa de proposta;
    - Emissão de apólice;
    - Consulta de dados de seguro
- Método de integração:
    - API RESTful;
    - Soap;

#### Docusign:

- Provedor: Docusign
- Finalidade: Assinatura digital de proposta
- Método de integração: API.

#### ESSCR Eventos:

- Provedor: ESSCR Eventos (Essor Sistema de Controle de Requisição - Eventos)
- Finalidade: Consulta de restrição tecnica
- Método de integração: API RESTful

#### PlugEssor:

- Provedor: PlugEssor
- Finalidade: Consulta de CEP
- Método de integração: API RESTful

#### CAR API:

- Provedor: CAR API (Cadastro Ambiente Rural)
- Finalidade: Consulta de CAR
- Método de integração: API

## Arquitetura do Projeto

Este projeto foi desenvolvido com uma arquitetura modular e organizada em diversas camadas. Cada camada tem uma
responsabilidade específica, facilitando a manutenção e a escalabilidade do sistema. Veja abaixo os
componentes principais:

### Routes

- Responsabilidade: Define os endpoints da API e conecta as URLs às ações dos controladores. É o ponto inicial de interação entre o cliente e o sistema.

### Controller

- Responsabilidade: Gerencia as requisições (requests) e respostas. Intermedia a comunicação entre as rotas e a lógica de negócio definida nos serviços.

### Model

- Responsabilidade: Representa os modelos do sistema e mapeia os objetos da aplicação para os dados armazenados no banco de dados.

## Documentação

Essa aplicação não possui documentação.

## Contribuindo

Contribuições são sempre bem-vindas! <br>
Por favor, siga o `código de conduta` dos projetos da companhia.

- Criação de branch ([Link](https://essor.freshservice.com/support/solutions/articles/5000092566));
- Abertura de mudanças ([Link¹](https://essor.freshservice.com/support/solutions/articles/5000085703) e [Link²](https://essor.freshservice.com/support/solutions/articles/5000085804))
- Cobertura de teste ([Link](https://essor.freshservice.com/support/solutions/articles/5000092278))
- Padronização de idiomas ([Link](https://essor.freshservice.com/support/solutions/articles/5000098956))
