2026-01-07 20:42:45 +00:00
# Portal Calendário Dias Rota
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
Sistema de gerenciamento de calendário de entregas com integração ao banco de dados Oracle, desenvolvido com Next.js 16 e TypeScript.
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
## Descrição
O Portal Calendário Dias Rota é uma aplicação web que permite visualizar e gerenciar dias de entrega em um calendário interativo. O sistema oferece controle sobre capacidades de entrega, dias úteis e status de disponibilidade para cada data.
### Funcionalidades Principais
- **Calendário Interativo**: Visualização de datas com informações de entrega
- **Gestão de Capacidades**: Configuração de capacidade de entrega por dia
- **Controle de Dias Úteis**: Definição de quantidade de dias úteis para vendas
- **Status de Entrega**: Ativação/desativação de entregas por data específica
- **Integração Oracle**: Conexão direta com banco de dados Oracle usando pool de conexões
- **Interface Responsiva**: Design moderno com Tailwind CSS e componentes Radix UI
## Tecnologias
- **Framework**: [Next.js 16.1.1 ](https://nextjs.org/ ) (App Router)
- **Linguagem**: TypeScript 5
- **Banco de Dados**: Oracle Database (via node-oracledb 6.9.0)
- **Estilização**: Tailwind CSS 3.4.1
- **UI Components**:
- Radix UI (Dialog, Popover, Label, Alert Dialog)
- Lucide React (ícones)
- Sonner (notificações toast)
- **Gerenciamento de Estado**: Jotai 2.16.0
- **Utilitários**:
- date-fns 4.1.0 (manipulação de datas)
- clsx + tailwind-merge (classes CSS)
- class-variance-authority (variantes de componentes)
## Estrutura do Projeto
```
portal-dias-rota/
├── src/
│ ├── app/
│ │ ├── dias-rota/ # Página principal do calendário
│ │ │ ├── page.tsx # Server component
│ │ │ └── pagina.tsx # Client component com lógica do calendário
│ │ ├── action/ # Server actions
│ │ ├── data-access/ # Camada de acesso a dados
│ │ └── globals.css # Estilos globais
│ ├── components/
│ │ ├── kibo-ui/ # Componentes customizados do calendário
│ │ └── ui/ # Componentes UI (shadcn/ui)
│ ├── db/
│ │ └── oracle.ts # Configuração e pool de conexões Oracle
│ └── lib/ # Utilitários
├── ecosystem.config.js # Configuração PM2 para produção
├── next.config.mjs # Configuração Next.js
├── tailwind.config.ts # Configuração Tailwind CSS
└── package.json
```
## Instalação
### Pré-requisitos
- Node.js 20+ instalado
- Acesso a um banco de dados Oracle
- Oracle Instant Client (opcional, para modo Thick)
### Passos
1. Clone o repositório:
```bash
git clone < url-do-repositorio >
cd portal-dias-rota
```
2. Instale as dependências:
```bash
npm install
```
3. Configure as variáveis de ambiente criando um arquivo `.env` :
```env
# Configurações Oracle
ORACLE_USER=seu_usuario
ORACLE_PASSWORD=sua_senha
ORACLE_CONNECTION_STRING=host:porta/servico
# Pool de Conexões (opcional)
ORACLE_POOL_MIN=1
ORACLE_POOL_MAX=30
ORACLE_POOL_INCREMENT=1
ORACLE_QUEUE_TIMEOUT=60000
ORACLE_INACTIVITY_TIMEOUT=20000
# Oracle Thick Mode (opcional)
# ORACLE_LIB_DIR=/caminho/para/instantclient
```
## Uso
### Desenvolvimento
Execute o servidor de desenvolvimento:
2026-01-07 15:28:05 +00:00
```bash
npm run dev
```
2026-01-07 20:42:45 +00:00
Acesse [http://localhost:3000 ](http://localhost:3000 ) no navegador.
### Produção
1. Build da aplicação:
```bash
npm run build
```
2. Inicie o servidor de produção:
```bash
npm start
```
O servidor rodará na porta **3003** (configurável em `package.json` ).
### Deploy com PM2
O projeto inclui configuração para PM2 (`ecosystem.config.js`):
```bash
pm2 start ecosystem.config.js
```
## Funcionalidades do Calendário
### Visualização de Dados
Cada dia no calendário exibe:
- **Capacidades**: Capacidade total de entrega
- **Peso Venda**: Peso disponível para venda
- **Disponível**: Quantidade disponível para entrega
### Configurações Globais
- **Capacidade**: Define a capacidade padrão de entrega
- **Dias Úteis**: Configura quantos dias úteis são considerados para vendas
### Interação com Datas
- Clique em uma data para ativar/desativar entregas
- Confirmação via dialog antes de aplicar mudanças
- Feedback visual com cores:
- **Cinza (#6B7280)**: Entrega ativa
- **Vermelho (#EF4444)**: Sem entrega
## Banco de Dados
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
### Conexão Oracle
O sistema utiliza o `node-oracledb` em modo **Thin** (padrão), que não requer binários nativos. Para usar o modo Thick, configure a variável `ORACLE_LIB_DIR` .
### Pool de Conexões
- Gerenciamento automático de conexões
- Configuração de pool min/max
- Timeout e incremento configuráveis
- Auto-commit habilitado para operações de escrita
### Funções Disponíveis
```typescript
// Executar queries
executeOracleQuery(sql: string, binds?: any[]): Promise< any [ ] >
// Executar updates
executeOracleUpdate(sql: string, binds?: any[]): Promise< number >
// Obter pool
getOraclePool(): Promise< oracledb.Pool >
// Fechar pool
closeOraclePool(): Promise< void >
```
## Segurança
- Variáveis de ambiente para credenciais sensíveis
- Prepared statements para prevenir SQL injection
- Pool de conexões com timeout configurável
- Validação de entrada no frontend
## Scripts Disponíveis
```bash
npm run dev # Servidor de desenvolvimento
npm run build # Build de produção
npm start # Servidor de produção (porta 3003)
npm run lint # Verificação de código com ESLint
```
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
## Contribuindo
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
1. Faça um fork do projeto
2. Crie uma branch para sua feature (`git checkout -b feature/nova-funcionalidade`)
3. Commit suas mudanças (`git commit -m 'Adiciona nova funcionalidade'`)
4. Push para a branch (`git push origin feature/nova-funcionalidade`)
5. Abra um Pull Request
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
## Licença
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
Este projeto é privado e proprietário.
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
## Autor
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
Desenvolvido por Joelson
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
## Suporte
2026-01-07 15:28:05 +00:00
2026-01-07 20:42:45 +00:00
Para questões e suporte, entre em contato com a equipe de desenvolvimento.