sgmp/README.md

177 lines
6.6 KiB
Markdown
Raw Normal View History

## SGMP_PROD Sistema de Gestão de Movimentações de Pessoas
### Visão geral
O **SGMP_PROD** é um sistema interno para gestão de processos de pessoas, hoje focado em:
- Desligamentos
- Admissões (substituição e aumento de quadro)
- Movimentações internas
Cada processo é representado por uma `Solicitacao` que percorre um fluxo controlado de aprovação, com rastreabilidade completa (status, aprovações, pareceres técnicos e anexos).
O projeto em produção é um monólito **Django** com renderização server-side e uso de **Tailwind CSS** para o layout das telas principais.
---
### Stack técnica
- **Linguagem**: Python 3.9
- **Framework web**: Django 4.2
- **Banco de dados aplicação**: SQLite (desenvolvimento) / compatível com outros bancos suportados pelo Django
- **Integrações externas**:
- **TOTVS RM (SQL Server)** dados de colaboradores, cargos, seções, coligadas/filiais.
- **Winthor (Oracle)** autenticação e dados básicos de usuários.
- **Frontend**:
- Templates Django
- Tailwind CSS via CDN (`base.html` e `dashboard.html`)
- JavaScript vanilla para interações pontuais (modal de aprovação, filtros, expansão de linhas).
- **Empacotamento / Deploy**:
- Docker (`Dockerfile` e `entrypoint.sh`)
- Servidor de aplicação: `gunicorn`
Principal app Django:
- `solicitacoes/` contém:
- `models.py`: modelos de domínio (`UsuarioSistema`, `UsuarioPerfilExtra`, `HeadGestor`, `PessoaRM`, `Solicitacao`, `Desligamento`, `AdmissaoSubstituicao`, `AdmissaoAumentoQuadro`, `Movimentacao`, `Aprovacao`, `Parecer`, enums de status/etapas).
- `services.py`: regras de negócio transacionais (envio de solicitação, aprovação por Head/Diretoria, registro de parecer, etc.).
- `views.py`: orquestração HTTP, dashboard, criação de solicitações, decisão, parecer, gerenciamento de permissões.
- `templates/`: telas do dashboard, detalhe da solicitação e formulários.
---
### Fluxo de aprovação (resumo)
1. **GESTOR** cria uma `Solicitacao` (desligamento, admissão ou movimentação).
2. Solicitação começa em **`RASCUNHO`**.
3. GESTOR envia → status muda para **`AGUARDANDO_HEAD`** (quando há etapa de Head configurada) ou **`ENVIADA`**, conforme o tipo/regra.
4. **HEAD** (usuário com perfil principal ou extra `HEAD`) aprova/reprova solicitações em `AGUARDANDO_HEAD`, limitado aos gestores aos quais está vinculado (`HeadGestor`).
5. Após a etapa de Head, a solicitação segue para **`ENVIADA`**:
- **GG** e **CONTROLADORIA** registram **pareceres técnicos** (`Parecer`) não mudam o status diretamente.
- Quando há parecer de GG e de Controladoria, o status avança para **`AGUARDANDO_DIRETORIA`**.
6. **DIRETORIA** aprova ou reprova solicitações em `AGUARDANDO_DIRETORIA`:
- Aprovada → **`FINALIZADA`**
- Reprovada em qualquer etapa → **`REPROVADA`**
Regras principais:
- `Solicitacao.etapa_atual()` mapeia o status para a etapa de aprovação.
- `Solicitacao.pode_aprovar(usuario)` centraliza a regra de quem pode aprovar na etapa atual (HEAD ou DIRETORIA, considerando perfis extras).
- `Solicitacao.pode_dar_parecer(usuario)` define se GG / Controladoria podem registrar parecer na etapa `ENVIADA`.
Mais detalhes de arquitetura estão em [`ARQUITETURA_APROVACAO.md`](./ARQUITETURA_APROVACAO.md).
---
### Perfis, multi-perfis e relação HeadGestor
- `UsuarioSistema` possui:
- `perfil` **perfil principal** (GESTOR, HEAD, GG, CONTROLADORIA, DIRETORIA).
- `UsuarioPerfilExtra` tabela de **perfis adicionais** (multi-perfis).
- Métodos:
- `tem_perfil(perfil)` verifica se o usuário possui o perfil principal ou extra.
- `perfis_ativos()` lista todos os perfis do usuário (principal + extras).
- `HeadGestor` modela a relação **Head → Gestores**:
- Campos: `head`, `gestor` (FK para `UsuarioSistema`).
- Cada Head só vê/aprova solicitações de gestores vinculados nessa tabela.
- A tela `/permissoes/` permite configurar, manualmente, quais gestores cada Head lidera.
Documentação detalhada de login, perfis e permissões: [`README_PERMISSOES.md`](./README_PERMISSOES.md).
Histórico e decisões sobre a relação HeadGestor: [`docs/head_relacao_gestor_investigacao.md`](./docs/head_relacao_gestor_investigacao.md).
---
### Como rodar localmente (sem Docker)
Pré-requisitos:
- Python 3.9
- Acesso opcional aos bancos RM/Winthor (para full integração); sem eles, é possível rodar com dados mínimos locais.
Passos:
1. Clonar o repositório:
```bash
git clone https://git.jurunense.com/felipe.araujo/sgmp.git
cd sgmp/SGMP_PROD
```
2. Criar e ativar o ambiente virtual:
```bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
```
3. Instalar dependências:
```bash
pip install --upgrade pip
pip install -r requirements.txt
```
4. Aplicar migrações:
```bash
python manage.py migrate
```
5. Criar usuário admin (opcional, para acesso a `/admin/`):
```bash
python manage.py createsuperuser
```
6. Rodar o servidor de desenvolvimento:
```bash
python manage.py runserver
```
7. Acessar:
- Página de login: `http://localhost:8000/login/`
- Dashboard: `http://localhost:8000/`
- Admin Django: `http://localhost:8000/admin/`
> Observação: em desenvolvimento, integrações com RM/Winthor podem exigir configuração de variáveis de ambiente (host, porta, usuário, senha, etc.) conforme `SQLSERVER_CONFIG` e credenciais Oracle definidas no projeto.
---
### Como rodar com Docker
O projeto possui um `Dockerfile` voltado para produção (`gunicorn`), incluindo instalação do Oracle Instant Client para integração com Winthor.
Exemplo simples de build e run:
```bash
cd SGMP_PROD
docker build -t sgmp_prod .
docker run --rm -p 8000:8000 \
--env-file .env \\
sgmp_prod
```
O `entrypoint.sh` executa migrações e `collectstatic` antes de iniciar o `gunicorn`.
---
### Estrutura de diretórios (resumo)
```text
SGMP_PROD/
config/ # settings Django, urls, wsgi
solicitacoes/ # app principal de domínio
models.py # modelos de domínio
services.py # regras de negócio
views.py # views / endpoints
templates/ # templates HTML (base, dashboard, solicitação_detalhe, formulários)
migrations/ # migrations do Django
templates/ # templates globais (base.html, dashboard.html, etc.)
static/ # assets estáticos de desenvolvimento (se houver)
ARQUITETURA_APROVACAO.md
README_PERMISSOES.md
docs/head_relacao_gestor_investigacao.md
Dockerfile
entrypoint.sh
requirements.txt
```