# Padrões de Integrações
> [name=Joelton da silva de moura]
> [time=Dec 23, 2021 11:47]
Neste documento será trato o padrão de integração
### Padrão de criação de objeto
Para criação de objeto no banco de dados externo deve manter um padrão de
nomenclatura: **inicial objeto** + **psi** + **nome objeto**.
<div style="
background-color: #e9e9e9;
color: inherit;
height: 90;
width: 570PX;
border-radius: 15px 0px 15px 0px;
padding: 5px ">
vw_psi_filial </br>
prc_psi_filial </br>
pkg_psi_filial
</div>
### Fluxo de consulta com base externa
As consulta de select entre clint, api e banco externo deve ser trata utilizando recurso de view com isso evitamos repetição de sql e melhoramos a semântica. Além de facilitar futuras integrações onde pode ser passado qual views o sistema já espera receber.
```mermaid
stateDiagram
req_consulta --> api
api --> req_consulta
api --> view
view --> bd_externo
bd_externo --> resultado
resultado --> api
```
### Modelos de Views
**Regras de Modelagem**
- As view deve ser modeladas de forma que retorne apenas o espelho da entidade ou seja deve ser evitado multiplos join dentro da view.
- Os domínios que representa ativo ou inativo devera retorna **A** ou **I**.
- Campos de **FK** e **PK** nas views tem que está identificados
- Para melhor peformace retorna apenas campos que será utilizado evitando o uso do famoso retorna tudo ou ordenação.
- Retorna campos sem mascará Ex.: CNPJ 00.000.000/0000-00 - 00000000000000
<details>
<summary >
<a style=" font-weight: bold; color: #000"> vw_psi_filial</a>
</summary>
nesta view será retornada os dados das empresas.
| column_name | data_type | data_length | nullable | comments |
| ----------- | --------- | ----------- | -------- | -------------------------------------- |
| DTEXCLUSAO | DATE | 7 | Y | Indica a data de inativação da filial. |
| FANTASIA | STRING | 25 | Y | |
| CODFIL_PK | STRING | 2 | N | |
| RAZAOSOCIAL | STRING | 40 | N | |
| CIDADE | STRING | 30 | Y | |
| UF | STRING | 2 | Y | |
| ATIVO | STRING | 1 | N | Indica se filial está ativa ou inativa |
---
DML da view
```sql
create or replace view vw_psi_filial as select
CODIGO AS CODFIL_PK
,RAZAOSOCIAL
,FANTASIA
,CIDADE
,UF
,DECODE(pcfilial.dtexclusao, NULL, 'A', 'I') AS ATIVO
,DTEXCLUSAO
from pcfilial
```
</details>
<details>
<summary >
<a style=" font-weight: bold; color: #000"> vw_psi_fornecedores</a>
</summary>
View que retorna dados dos fornecedores
| column_name | data_type | data_length | nullable | comments |
| ------------ | --------- | ----------- | -------- | -------- |
| TIPOFORNEC | VARCHAR2 | 1 | Y | |
| CODFORNEC_PK | NUMBER | 22 | N | |
| RAZAOSOCIAL | VARCHAR2 | 60 | N | |
| CIDADE | VARCHAR2 | 15 | Y | |
| ESTADO | VARCHAR2 | 2 | Y | |
| CNPJ | VARCHAR2 | 18 | Y | |
| REVENDA | VARCHAR2 | 1 | Y | |
| DTEXCLUSAO | DATE | 7 | Y | |
| FANTASIA | VARCHAR2 | 60 | Y | |
| Ativo | VARCHAR2 | 1 | Y | |
---
DML da view
```sql
CREATE OR REPLACE VIEW vw_psi_fornecedores AS SELECT
PCFORNEC.CODFORNEC AS CODFORNEC_PK,
PCFORNEC.FORNECEDOR AS RAZAOSOCIAL,
PCFORNEC.FANTASIA,
REGEXP_REPLACE(PCFORNEC.CGC, '[^[:digit:]]') AS CNPJ,
PCFORNEC.ESTADO,
PCFORNEC.CIDADE,
PCFORNEC.DTEXCLUSAO,
DECODE(DTEXCLUSAO, NULL, 'A', 'I') ATIVO,
CASE
WHEN PCFORNEC.TIPOFORNEC = 'V'
THEN 'COMÉRCIO VAREJISTA'
WHEN PCFORNEC.TIPOFORNEC = 'D'
THEN 'CENTRAL DE DISTRIBUIÇÃO'
WHEN PCFORNEC.TIPOFORNEC = 'C'
THEN 'COMÉRCIO ATACADISTA'
WHEN PCFORNEC.TIPOFORNEC = 'I'
THEN 'INDÚSTRIA'
WHEN PCFORNEC.TIPOFORNEC = 'S'
THEN 'PRESTADOR SERVIÇOS'
ELSE 'OUTROS' END TIPOFORNEC,
CASE
WHEN PCFORNEC.REVENDA = 'B'
THEN 'BENEFICIAMENTO'
WHEN PCFORNEC.REVENDA = 'C'
THEN 'COMUNICAÇÃO'
WHEN PCFORNEC.REVENDA = 'O'
THEN 'CONSUMO'
WHEN PCFORNEC.REVENDA = 'E'
THEN 'ENERGIA'
WHEN PCFORNEC.REVENDA = 'X'
THEN 'EXPORTADOR'
WHEN PCFORNEC.REVENDA = 'N'
THEN 'NÃO REVENDA'
WHEN PCFORNEC.REVENDA = 'P'
THEN 'PROFISSIONAL LIBERAL'
WHEN PCFORNEC.REVENDA = 'T'
THEN 'TRANSPORTADORA'
END REVENDA
FROM PCFORNEC
```
</details>
<details>
<summary >
<a style=" font-weight: bold; color: #000"> vw_psi_marcas</a>
</summary>
View que retorna dados de marcas
| column_name | data_type | data_length | nullable | comments |
| ----------- | --------- | ----------- | -------- | ---------------------------------------- |
| column_name | data_type | data_length | nullable | comments |
| CODMARCA_PK | NUMBER | 22 | N | Indica o código da marca. |
| MARCA | VARCHAR2 | 40 | Y | Indica o descrição da marca. |
| ATIVO | VARCHAR2 | 1 | Y | Indica se a marca esta ativa ou inativa. |
---
DML da view
```sql
create or replace view vw_psi_marcas as SELECT
PCMARCA.CODMARCA as CODMARCA_PK,
PCMARCA.MARCA,
PCMARCA.ATIVO
FROM PCMARCA
```
</details>
### Criação de novas entidades
Se no projeto for preciso criar uma nova entidade que não tenha no cliente a criação da mesma não dever ser feita na base externa (`base do cliente`) contendo na sua nomenclatura que se trata de um objeto integrador.