npm package: 01cm-new-layout
Description: Aplicação de importação de notas e integração com Oracle Fusion ERP Cloud
Author: Equipe Desenvolvimento Somma-IT
Latest version: 1.0.9

# _APP 01CM_

* [Overview](#overview)
* [Dependências](#dependências)
* [Rodar localmente](#rodar-localmente)
* [Deploy](#deploy)
* [Links Úteis](#links-úteis)

### [Overview]

Aplicação desenvolvida em [Next.js](https://nextjs.org/). Iniciado com  [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).

Este aplicativo compõe a plataforma 01CM, onde os clientes poderão acessar e visualizar os documentos processados pelo Invoice Manager. Cada cliente tem uma instância dessa aplicação sendo executada na Cloud da Google. 

![Colocar algum GIF demonstrando o ambiente](https://via.placeholder.com/750x500)

### [Dependências]

**Projetos relacionados:**

- [Invoice Manager]() - Sistema que recebe os documentos de todos os clientes e os processa para extração de dados.
- [Consumer](https://github.com/ADD01-TECH/consumer-01cm-invoice-integration) - Consome as notas do integrador e envia para o backend da aplicação do cliente
- [01CM API](git@github.com:ADD01-TECH/api-01cm.git) - Backend da aplicação do cliente
- [ERP Oracle]() - O projeto contém integrações com a API do ERP Oracle para envio de notas e boletos.

**Pacotes utilizados**
- [@somma/replace-envs](https://github.com/ADD01-TECH/lib-node-replace-envs) - Substituir variáveis em runtime

Os apontamentos são configuradas através das variáveis de ambiente.
Para mais detalhes a cerca das dependências, consultar o ecossistema de aplicativos no [guia](https://github.com/ADD01-TECH/guia-dev) 

### [Rodar localmente]

**Instalação**

Como estamos utilizando pacotes privados, é necessário fazer a autenticação no Artifact. Para isso, foi criado o arquivo `.npmrc` na raiz do projeto com as configurações. Esse conteúdo pode ser obtido com o `gcloud`:

```shell
gcloud artifacts print-settings npm --scope=@somma
```

O token expira periodicamente (por padrão, após 1 hora), portanto é necessário também atualizá-lo com o utilitário do `gcloud`: 

```shell
npx google-artifactregistry-auth
```

O arquivo `.npmrc` pode ser criado na pasta do usuário (`~/.npmrc`) para que seja utilizado em todos os projetos também. 

A partir daí, pode ser executado o comando de instalação das dependências:

```bash
yarn install
```

**Variáveis de ambiente**

<details>
<summary>Explicação de cada variável de ambiente utilizada no projeto com valores de exemplo:</summary>

```shell
# Variáveis para acesso ao Invoice Manager
NEXT_PUBLIC_IMG_BASE_URL=https://api-01cm-invoices-management-dev-fasdf-uc.a.run.app
NEXT_PUBLIC_IMG_USERNAME=invoice-manager
NEXT_PUBLIC_IMG_PASSWORD=123456

# Variáveis para acesso ao Backend do 01cm
NEXT_PUBLIC_LOCALHOST=https://api-01cm-dev-4yyh5fptba-uc.a.run.app

# Variáveis para acesso ao ERP Oracle
NEXT_PUBLIC_ERP_BASE_URL=https://fa-ertf-test-saasfaprod1.fa.ocs.oraclecloud.com
NEXT_PUBLIC_ERP_USER=integration.bild # usuário de integração
NEXT_PUBLIC_ERP_PASSWORD=54234h2b34h2b34 # Senha do usuário de integração

# variáveis de configuração do front
NEXT_PUBLIC_BASE_URL=http://localhost:4001
```
</details>

Variáveis padrão do NEXT podem ser consultadas [aqui](https://nextjs.org/docs/basic-features/environment-variables)

Configuradas as variáveis, o servidor de desenvolvimento do Node pode ser executado com:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
```

Ou simulado os processos de produção, fazendo o build e consequente start: 

```shell
yarn build
yarn start
```

Abrir [http://localhost:8080](http://localhost:8080) para utilizar a aplicação.

### [Deploy]

O arquivo `Dockerfile` contém uma imagem a ser construída e executada em plataformas com suporte, como o GCP Cloud Run ou o próprio Docker.

A imagem basicamente recebe as variáveis de ambiente via argumentos em tempo de build. Essas variáveis são resolvidas durante o _transpile_ no build da imagem, sendo substituídas pelo valor recebido do ARG da linha de build do docker. Exemplo: 

```shell
docker buildx build --build-arg="NEXT_PUBLIC_BASE_URL=DCK_NEXT_PUBLIC_BASE_URL"  -t app01cm:local .
```

Mais informações sobre esse processo de substituição de variáveis no [repositório do pacote](https://github.com/ADD01-TECH/lib-node-replace-envs) que faz esse processo nas variáveis em runtime.

Para o deploy na GCP, temos a pipeline configurada no arquivo `cloudbuild.yml`. A pipeline faz o build da imagem e envia para o Artifact Registry, que é o repositório de imagens da GCP. Logo em seguida faz o deploy no Cloud Run, seguindo o fluxo comentado [aqui](https://github.com/ADD01-TECH/guia-dev/tree/main/fluxo-trabalho/deploy/nextjs-gcp).  


## [Links úteis]

- [Documentação Next.js](https://nextjs.org/docs)
- [Learn Next.js](https://nextjs.org/learn) - Tutorial interativo de Next.js
- [Como usar o Artifact](https://cloud.google.com/artifact-registry/docs/nodejs/store-nodejs?hl=pt-br)