83 lines
6.5 KiB
Markdown
83 lines
6.5 KiB
Markdown
# Head em relação a quem? — Investigação
|
|
|
|
## Situação atual
|
|
|
|
- O perfil **Head** no SGMP aprova rascunhos enviados por **qualquer** gestor: no dashboard, usuários com perfil HEAD veem todas as solicitações em status `AGUARDANDO_HEAD`, sem filtro por “seus” gestores.
|
|
- Ou seja: **não existe hoje nenhuma regra que vincule um Head a um conjunto de gestores**. A pergunta “ele é Head em relação a quem?” ainda não está respondida no código.
|
|
|
|
## O que precisamos para filtrar
|
|
|
|
Para que um Head só aprove solicitações dos gestores que estão sob sua responsabilidade, é necessário ter em algum lugar a relação **Head ↔ Gestores**. Por exemplo:
|
|
|
|
- “Head (matrícula X) é superior dos gestores (matrículas A, B, C)”, ou
|
|
- “Gestor (matrícula A) tem gestor imediato Head (matrícula X)”.
|
|
|
|
No SGMP:
|
|
|
|
- **Solicitação** tem `solicitante` (FK para `UsuarioSistema`).
|
|
- **UsuarioSistema** (gestor ou head) tem `matricula` e `perfil`.
|
|
- Login é feito via **Winthor**; o `username` do Django é a **matrícula** vinda do Winthor, e o `UsuarioSistema` é identificado por essa `matricula`.
|
|
|
|
Ou seja: temos **matrícula do gestor** (solicitante) e **matrícula do Head** (usuário logado). Falta uma **fonte de verdade** que diga qual Head é responsável por qual gestor.
|
|
|
|
## Fontes possíveis: RM e Winthor
|
|
|
|
### 1. TOTVS RM (SQL Server)
|
|
|
|
- O RM tem conceitos de **hierarquia** e **gestor imediato**:
|
|
- **Chefia tradicional**: cadastro de chefes/supervisores (em algum campo ou tabela auxiliar).
|
|
- **Hierarquia por posição** (versões mais recentes): estrutura por posição/cargo.
|
|
- Em muitos clientes RM, a tabela **PFUNC** (ou tabelas relacionadas) expõe o “gestor imediato” do funcionário, por exemplo:
|
|
- Campo do tipo **CHAPAGERENTE** (ou **CHAPA_CHEFE**, **CODGERENTE**, etc.) na PFUNC, ou
|
|
- Tabela específica de chefia (ex.: PSUPERV, ou tabelas de “Hierarquia por Posição”).
|
|
- **Hoje no SGMP**: em `intf_sqlserver.py` a PFUNC é usada para listar colaboradores (CHAPA, NOME, CPF, CODSECAO, CODFUNCAO, etc.). **Nenhuma coluna de gestor imediato / chefia é utilizada**.
|
|
- **PessoaRM** no SGMP guarda `id_rm` (CODCOLIGADA-CHAPA) e `matricula` (CHAPA). Não há campo “gestor imediato” ou “chapa do head”.
|
|
|
|
**Conclusão RM:**
|
|
É **provável** que o RM já tenha condições de dizer “este funcionário (CHAPA) tem gestor imediato (CHAPA do chefe)”, mas isso **depende de**:
|
|
- (1) O cliente ter **preenchido** a chefia no RM (campo/tabela de gestor imediato ou hierarquia por posição).
|
|
- (2) Sabermos o **nome exato** da coluna/tabela (ex.: CHAPAGERENTE na PFUNC, ou tabela de hierarquia). Isso só pode ser confirmado no banco do RM (lista de colunas da PFUNC ou documentação do ambiente).
|
|
|
|
Se existir, por exemplo, `PFUNC.CHAPAGERENTE`:
|
|
- Dado o **gestor** (solicitante), precisamos obter a CHAPA dele no RM. O vínculo Gestor SGMP → RM pode ser: `UsuarioSistema.matricula` = CHAPA no RM (se a matrícula do Winthor for a mesma CHAPA), ou um mapeamento explícito (ex.: PessoaRM por matrícula/CPF).
|
|
- Com a CHAPA do gestor, consultamos no RM o **CHAPAGERENTE** (ou equivalente) desse registro. Esse valor seria a “CHAPA do Head” no RM.
|
|
- No SGMP, o Head logado tem `UsuarioSistema.matricula`. Se essa matrícula for a mesma que a CHAPA do gestor imediato no RM (ou houver mapeamento), podemos filtrar: “mostrar só solicitações cujo solicitante tem gestor imediato = usuário logado (Head)”.
|
|
|
|
### 2. Winthor (Oracle)
|
|
|
|
- No SGMP, **Winthor** é usado para:
|
|
- **Login**: `autenticar_usuario(login, senha)` consulta **PCEMPR** (MATRICULA, USUARIOBD, NOME, EMAIL, CPF, CODFILIAL, SITUACAO).
|
|
- **Dados do colaborador**: `buscar_colaborador_oracle(cpf)` também em PCEMPR (MATRICULA, NOME, CPF, SITUACAO, ENDERECO, etc.).
|
|
- No pipeline `pipeline_rm_winthor_ad.json` aparecem CODFILIAL, CODSETOR, SITUACAO; **não há campo de gestor / superior / hierarquia**.
|
|
- **Não foi encontrada** na documentação consultada referência a campo de “gestor imediato” ou “superior” na tabela PCEMPR do Winthor. Seria necessário:
|
|
- Consultar o dicionário de dados ou DBA do Oracle do Winthor no seu ambiente, ou
|
|
- Confirmar com a TOTVS/equipe de sistemas se existe tabela/campo de hierarquia no Winthor que possa ser usada para “Head de quem”.
|
|
|
|
**Conclusão Winthor:**
|
|
Com o que o SGMP usa hoje (PCEMPR para login e busca por CPF), **não há evidência de que já tenhamos condição de saber “Head em relação a quem” apenas pelo Winthor**. Pode existir em outro schema/tabela; isso exige verificação no ambiente.
|
|
|
|
## Resumo
|
|
|
|
| Fonte | Hoje no SGMP | Possível usar para “Head de quem”? |
|
|
|--------|--------------------------------------|-------------------------------------|
|
|
| **RM** | PFUNC sem campo de chefia | **Sim, se** existir e estiver preenchido um campo/tabela de gestor imediato (ex.: CHAPAGERENTE). Confirmar no banco do cliente. |
|
|
| **Winthor** | PCEMPR para login e dados básicos | **Inconclusivo.** Não há uso de hierarquia. Verificar se existe tabela/campo de superior no Oracle do Winthor. |
|
|
|
|
## Próximos passos recomendados
|
|
|
|
1. **No banco RM (SQL Server)**
|
|
- Listar as colunas da tabela **PFUNC** (ou consultar GCAMPOS onde TABELA = 'PFUNC') e procurar por colunas como CHAPAGERENTE, CHAPA_CHEFE, CODGERENTE, ou equivalente.
|
|
- Se existir: verificar se está preenchido para os gestores que devem ter Head; definir se a matrícula do Head no SGMP será a CHAPA do RM ou se será preciso mapear (ex.: por CPF ou por outro identificador).
|
|
|
|
2. **No Winthor (Oracle)**
|
|
- Verificar se **PCEMPR** ou outra tabela possui campo de “matrícula do superior” / “gestor imediato”.
|
|
- Se sim, definir como cruzar com UsuarioSistema (matrícula do Head) para filtrar solicitações.
|
|
|
|
3. **No SGMP**
|
|
- Manter por enquanto o comportamento atual (Head vê todas as solicitações AGUARDANDO_HEAD) até existir uma fonte confiável de “Head ↔ Gestores”.
|
|
- Quando houver essa fonte (RM e/ou Winthor):
|
|
- Implementar função (ex.: em `intf_sqlserver.py` ou `intf_winthor.py`) que, dado o Head (matrícula ou id), retorne a lista de matrículas dos gestores sob sua responsabilidade (ou que, dado o gestor, retorne a matrícula do Head).
|
|
- No `dashboard_view` (e onde mais listar solicitações para Head), filtrar: `Solicitacao.objects.filter(status=AGUARDANDO_HEAD, solicitante__matricula__in=matriculas_dos_gestores_do_head)` (ou equivalente).
|
|
|
|
Este arquivo pode ser usado como referência para a decisão e para a implementação futura do vínculo “Head em relação a quem”.
|