# Manuais do SUAP



# Manual de Gestão de Pessoal do SUAP

### Como cadastrar códigos de ocorrências?

1\. No menu superior acesse: **Ponto** <span style="color: #ff0000;">-&gt;</span> **Ocorrência** <span style="color: #ff0000;">-&gt;</span> **Adicionar**

**[![Captura-de-tela-de-2017-08-17-12:04:48.png](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-08-Aug/scaled-840-0/Captura-de-tela-de-2017-08-17-12:04:48.png)](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-08-Aug/Captura-de-tela-de-2017-08-17-12:04:48.png)**

2\. Preencha todos os campos e pressione o botão **Salvar**

[![Captura-de-tela-de-2017-08-17-12:05:25.png](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-08-Aug/scaled-840-0/Captura-de-tela-de-2017-08-17-12:05:25.png)](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-08-Aug/Captura-de-tela-de-2017-08-17-12:05:25.png)

### Como cadastrar usuários?

1\. Abrir o sistema SUAP no link: https://suap.ifpe.edu.br e inserir seu Siape e sua Senha.  
![](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-04-Apr/scaled-840-0/image-1492438903747.png)

2 - Após logar-se no sistema, clique no menu esquerdo na opção "Listar Servidores" ![](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-04-Apr/scaled-840-0/image-1492457635715.png)

3 - Clique no botão "Adicionar Servidor"![](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-04-Apr/scaled-840-0/image-1492457822232.png)

4 - Preencha os campos obrigatórios (em negrito) e clique no botão salvar![](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-04-Apr/scaled-840-0/image-1492457959799.png)

# Manual de Acesso ao SUAP

### Você já acessou o SUAP anteriormente?

- [SIM](https://wiki.ifpe.edu.br/books/an%C3%A1lise-e-desenvolvimento-de-sistemas/page/manual-de-acesso-ao-suap#bkmrk-como-recuperar-senha)
- [NÃO](https://wiki.ifpe.edu.br/books/an%C3%A1lise-e-desenvolvimento-de-sistemas/page/manual-de-acesso-ao-suap#bkmrk-como-criar-uma-nova-)

###  

---

###  

###  

### Como recuperar senha de acesso?

**1. Acessar a página inicial do [SUAP](https://suap.ifpe.edu.br) e clicar em [Problemas de Acesso](https://senha.ifpe.edu.br/)**

[![Captura-de-tela-de-2017-09-19-17:46:05.png](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/scaled-840-0/Captura-de-tela-de-2017-09-19-17:46:05.png)](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/Captura-de-tela-de-2017-09-19-17:46:05.png)

**2. Acessar a aba** <span style="background-color: #333333; color: #ffffff;">Recuperar</span> **e inserir as informações solicitadas**

[![Captura-de-tela-de-2017-09-19-17:46:13.png](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/scaled-840-0/Captura-de-tela-de-2017-09-19-17:46:13.png)](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/Captura-de-tela-de-2017-09-19-17:46:13.png)

**3. Será enviado um e-mail para a caixa de entrada do requisitante contendo um *link* para redefinição de senha.**

### Como acessar pela primeira vez?

**1. Acessar a página inicial do [SUAP](https://suap.ifpe.edu.br) e clicar em [Problemas de Acesso](https://senha.ifpe.edu.br/)**

[![Captura-de-tela-de-2017-09-19-17:46:05.png](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/scaled-840-0/Captura-de-tela-de-2017-09-19-17:46:05.png)](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/Captura-de-tela-de-2017-09-19-17:46:05.png)

**2. Acessar a aba** <span style="background-color: #333333; color: #ffffff;">Registrar</span> **e inserir as informações solicitadas[![Captura-de-tela-de-2017-09-19-17:51:29.png](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/scaled-840-0/Captura-de-tela-de-2017-09-19-17:51:29.png)](https://wiki.ifpe.edu.br/uploads/images/gallery/2017-09-Sep/Captura-de-tela-de-2017-09-19-17:51:29.png)**

**3. A informações inseridas serão analisadas pela equipe do SUAP. Assim que confirmadas, o requisitante receberá um e-mail contendo um *link* para criar sua senha de acesso ao sistema.**

# Guia para atendimento de chamados no SUAP

### Processo/Protocolo 

---

#### Processo com 2 últimos tramites repetidos

---

Erros que podem ser apresentados ao tentar acessar um Processo:

- get() returned more than one topic -- it returned 2!
- get() returned more than one Tramite -- it returned 2! Lookup parameters were {'ultimo': 1}

OBS.: Esse caso funcionará apenas para processos tramitados. Cada caso deve ser analisado antes de se adotar qualquer solução

  
Esse erro ocorre devido a existência de dois registros idênticos cadastrados no banco de dados e, por conta disso, a função *get* recebe dois retornos. Isso acontece por, muita vezes, o usuário pressiona o botão de enviar a solicitação, fazendo com que o sistema cadastre mais de uma vez os mesmos dados. Para resolver, é necessário excluir uma das tuplas duplicadas na base de dados.

<span style="text-decoration: underline;">**Passos para a resolução:**</span>

- Identifique o id do processo duplicado:

```SQL
select id from protocolo_processo where numero_processo='23295.001098.2017-14';
```

- Identifique o id do último tramites

```SQL
select * from protocolo_tramite where processo_id=96492 and ultimo = True
```

- Delete a tupla duplicada

```SQL
 delete from protocolo_tramite where id=id_ultimo_tramite;
```

#### Alterar Status do Processo

---

```SQL
update protocolo_processo set status = {status} where numero_processo='{processo}';

-- Status 1 = Aberto
-- Status 2 = Finalizado
-- Status 3 = Arquivado
```

#### Servidor não vê (todos/alguns dos) seus processos

---

Pode acontecer de ter sido registrada uma pessoa física nova com o mesmo nome do servidor e isso faz com que ele não enxergue esses processos na lista "Meus Processos". Para resolver é preciso alterar a pessoa interessada do processo para a pessoa correta.

- Essa consulta encontra os valores de id de todas as pessoas físicas que batem com o nome do servidor

```SQL
 select pessoa_ptr_id, username 
 from pessoa_fisica 
 where pessoa_ptr_id in (select id from pessoa where nome ilike '%{nome_servidor}%');
```

- (alternativa) Essa consulta encontra os valores de id de todas as pessoas físicas com o mesmo cpf

```
select pessoa_ptr_id, username 
from pessoa_fisica 
where cpf='{cpf}';
```

- Normalmente é bom conferir se os resultados dessas consultas batem (em banco ou na aplicação). Em ambas as consultas, apenas uma das entradas deve conter um valor na coluna 'username'. As outras devem estar vazias. Sendo esse o caso, executar o update:

```SQL
update protocolo_processo 
set pessoa_interessada_id={id_com_username} 
where pessoa_interessada_id={ids_sem_username};
```

- id\_com\_username = Resultado da busca que contem valor na coluna username.
- id\_sem\_username = Um ou mais resultados da busca que não possuam nenhum valor na coluna username.

Após esses procedimentos é bom conferir se as informações do usuário que ficou registrado nos processos estão adequadas (especialmente o cpf)

### Material de Consumo

---

#### Alterar estoque

---

Encontrar entrada do material de consumo

```SQL
SELECT * FROM movimentoalmoxentrada WHERE uo_id = 3 AND material_id=3283;
```

Atualizar valor do estoque

```SQL
UPDATE movimentoalmoxentrada 
SET estoque = 6
WHERE uo_id = 3 AND material_id=3283;
```

#### Alterar código de elemento de despesa/categoria

---

**Não se deve alterar o código do elemento de despesa de material de consumo , pois estes são compartilhados com todos os *Campi*.**

Alternativamente, deve-se criar um novo material de consumo (caso não exista) para a categoria correta. Após a criação de um novo material de consumo com o código correto deve-se realizar as atualizações a seguir

- **Atualizar Empenho**

```SQL
select * from empenhoconsumo where empenho_id = 3682 and material_id = 9235

select * from materialconsumo where id = 9235

select * from materialconsumo where nome ilike '%PILHA AA, NÃO RECARREGÁVEL, ALCALINA, 1,5V%'

-- Atualizando
update empenhoconsumo 
set material_id = 15521
where id = 18880 or id = 18881
```

- **Atualizar Entrada**

```SQL
 select * from movimentoalmoxentrada where entrada_id = 40664 and material_id = 9235

-- Atualizando
update movimentoalmoxentrada
set material_id = 15521
where id = 23161 or id = 23162


```

- **Atualizar Requisição e Saídas**

Se houverem saídas, atualizar as EDs também nessas saídas

```SQL
select * from movimentoalmoxsaida where movimento_entrada_id = 41767
update movimentoalmoxsaida set material_id = 9008 where movimento_entrada_id = 41767

select * from requisicaoalmoxusermaterial where id in (163266, 149553)
update requisicaoalmoxusermaterial set material_id=9008 where id in (163266, 149553)
```

#### Alterar valor após ter efetuado entrada

---

- Descobrir o empenho\_id através do número do empenho

```SQL
SELECT id FROM empenho WHERE numero = '2013NE800478' and uo_id = 3
```

- Descobrir os *empenhoconsumo* através do empenho\_id

```SQL
SELECT * FROM empenhoconsumo WHERE empenho_id = 666
```

- Atualizar o valor em *empenhoconsumo*

```SQL
UPDATE empenhoconsumo SET valor = 500.00 where id in (1, 2)
```

- Descobrir id dos *movimentoalmoxentrada*

```SQL
SELECT id from movimentoalmoxentrada WHERE empenhoconsumo_id in (1,2)
```

- Atualizar valor em *movimentoalmoxentrada*

```SQL
UPDATE movimentoalmoxentrada SET valor = 500.00 WHERE empenhoconsumo_id in (1,2)
```

- Descobrir id dos *movimentoalmoxsaida*

```SQL
SELECT id from movimentoalmoxsaida WHERE movimento_entrada_id in (10,11)
```

- Atualizar valor em *movimentoalmoxsaida*

```SQL
UPDATE movimentoalmoxentrada SET valor = 500.00 WHERE movimento_entrada_id in (10,11)
```

### Material Permanente

---

#### Alterar preço unitário após ter efetuado entrada

---

<span style="text-decoration: underline;">**Adicionar novo item de empenho permanente**</span>

- Descobrir id do empenho usando o número do empenho e a cidade da unidade organizacional

```SQL
SELECT emp.id,emp.numero,uo.cidade FROM empenho AS emp,unidadeorganizacional AS uo 
WHERE uo.cidade = '(cidade_da_uo)' 
AND emp.numero = '(num_empenho)' 
AND emp.uo_id = uo.id
```

- Anotar o id do empenho (id\_empenho\_anotado)
- Descobrir id categoria do Item de Empenho Permanente usando o id do empenho anoado e descrição do item

```SQL
SELECT * FROM empenhopermanente 
WHERE empenho_id = id_empenho_anotado AND descricao = 'descricao_do_item';
```

- Anotar o id da categoria (id\_categoria)
- Inserir novo Item de Empenho Permanente ao empenho

```SQL
INSERT INTO empenhopermanente(empenho_id,categoria_id,qtdempenhada,qtdadquirida,valor,descricao)
VALUES ((id_empenho_anotado),(id_categoria),(qtdempenhada),(qtdadquirida),(valor),'(descricao_do_item'))
```

- Descobrir os *ids* do Novo item de empenho permanente e do Antigo item de empenho permanente

```SQL
SELECT * FROM empenhopermanente 
WHERE empenho_id = (id_empenho_anotado) AND descricao = '(descricao_do_item)';
```

- Anotar o id do novo item de empenho permanente (id\_novo\_item\_empenho)
- Anotar o id do antigo item de empenho permanente (id\_antigo\_item\_empenho)
- Atualizar a quantidade do antigo item de empenho permanente

```SQL
UPDATE empenhopermanente 
SET qtdempenhada = (nova_quantidade), qtdadquirida = (nova_quantidade)
WHERE id = (id_antigo_item_empenho)
```

<span style="text-decoration: underline;">**Adicionar novo item de entrada permanente** </span>

- Descobrir id da entrada através do número da nota fiscal e da cidade da unidade organizacional

```SQL
SELECT ent.id,ent.numeronotafiscal,uo.cidade 
FROM entrada AS ent,unidadeorganizacional AS uo 
WHERE uo.cidade = '(cidade_da_uo)' 
AND ent.numeronotafiscal = '(num_nota_fiscal)'
AND ent.uo_id = uo.id
```

- Anotar o id da entrada associada à nota fiscal (id\_entrada\_anotado)

- Descobrir o id da categoria e a garantia do item

```SQL
SELECT * FROM entradapermanente WHERE entrada_id = (id_entrada_anotado)
```

- Anotar id da categoria (id\_categoria)
- Anotar garantia (garantia\_item)
- Inserir novo item de entrada permanente à essa entrada

```SQL
INSERT INTO entradapermanente 
(entrada_id,categoria_id,qtd,valor, empenho_permanente_id,garantia,descricao)
VALUES ((id_entrada_anotado),(id_categoria),(qtd_desejada),
(valor_desejada),(id_novo_item_empenho),'(garantia_item)','(descricao_do_item)')
```

- Anotar o id do novo item e o id antigo item de entrada permanente

```SQL
SELECT * FROM entradapermanente WHERE entrada_id = 45950;
```

- Anotar o id do novo item de entrada (id\_novo\_item\_entrada)
- Anotar o id do antigo item de entrada (id\_antigo\_item\_entrada)
- Atualizar a quantidade (qtd) no antigo item entrada permanente

```SQL
UPDATE entradapermanente 
SET qtd = (nova_qtd)
WHERE id = (id_antigo_item_entrada)
```

<span style="text-decoration: underline;">**Atribuir alguns itens do inventário relacionadas à antiga entrada para a nova entrada**</span>

- Buscar os itens do inventario relacionados à antiga entrada

```SQL
SELECT * FROM inventario WHERE entradapermanente_id = (id_antigo_item_entrada);
```

- Anote o id dos itens de invetário que deseja alterar

- Atualizar os itens desejados para a nova entrada permanente

```SQL
UPDATE inventario
SET entradapermanente_id = (id_novo_item_entrada)
WHERE numero in (numero_inv_1,numero_inv_2,numero_inv_3)
```

- Conferir o resultado

```SQL
SELECT * FROM inventario WHERE entradapermanente_id = (id_antigo_item_entrada);
SELECT * FROM inventario WHERE entradapermanente_id = (id_novo_item_entrada);
```

#### ED/Categoria/Conta errada, após efetuar entrada

---

- Descobrir a categoria\_id correta pelo código em *categoriamaterialpermanente*

```SQL
SELECT id FROM categoriamaterialpermanente WHERE codigo = '449052-24'
```

- Descobrir e atualizar os empenhopermanente pelo id do empenho. Caso sejam todos os itens do empenho, usar clausula WHERE empenho\_id. Caso contrário, usar id do empenhopermanente específico

```SQL
SELECT * FROM empenhopermanente WHERE empenho_id = 4982
UPDATE empenhopermanente set categoria_id = 666 WHERE empenho_id = 4982
UPDATE empenhopermanente set categoria_id = 666 WHERE id in (13585, 13586)
```

- Descobrir e atualizar as entradaspermanente pelo id da entrada. Caso sejam todos os itens da entrada, usar clausula WHERE entrada\_id. Caso contrário, usar id do entradapermanente específico

```SQL
SELECT * FROM entradapermanente WHERE entrada_id = 42608
UPDATE entradapermanente set categoria_id = 666 WHERE entrada_id = 42608
UPDATE entradapermanente set categoria_id = 666 WHERE id in (80355, 80356)
```

- Descobrir e atualizar os inventario por entradapermanente\_id.

```SQL
SELECT * FROM inventario WHERE entradapermanente_id in (80355,80356)
UPDATE inventario set categoria_id = 666 WHERE entradapermanente_id in (80355,80356)
```

#### Entrada cadastrada no empenho errado

---

- Descobrir os empenho\_id correto

```SQL
SELECT id FROM empenho WHERE numero = '2014NE800245' and uo_id = 3
```

- Descobrir os empenhopermanente\_id

```SQL
SELECT * FROM empenhopermanente WHERE empenho_id = 5580
```

- Atualizar TODOS os empenhopermanente com os empenho\_id correto

```SQL
UPDATE empenhopermanente set empenho_id = 555 WHERE id in (14437, 14438)
```

- Descobrir as entradapermanente da entrada errada

```SQL
SELECT * FROM entradapermanente WHERE entrada_id = 666 OU
SELECT * FROM entradapermanente WHERE empenho_permanente_id in (14437, 14438)
```

- Atualizar **TODAS** as **entradapermanente** com o **empenhopermanente\_id** correto

```SQL
UPDATE entradapermanente set empenhopermanente_id = 14437 WHERE id in (777, 778)
```

#### Material Permanente com valor errado, após ter efetuado entrada

---

- Caso a entrada seja doação, desconsiderar as tabelas empenho e empenhopermanente, devido ao fato de doação não possuir empenho.
- Descobrir o empenho\_id através do número do empenho

```SQL
SELECT id FROM empenho WHERE numero = '2013NE800478' and uo_id = 3
```

- Descobrir os empenhopermanente através do empenho\_id

```SQL
SELECT * FROM empenhopermanente WHERE empenho_id = 666
```

- Atualizar os valores dos empenhopermanente

```SQL
UPDATE empenhopermanente set valor = 500.00 WHERE id in (12345, 12346)
```

- Descobrir as entradapermanente através da entrada\_id

```SQL
SELECT * FROM entradapermanente where entrada_id = 666
```

- Atualizar os valores das entradapermanente

```SQL
UPDATE entradapermanente SET valor = 500.00 where id in (1, 2)
```

#### Exclusão de entrada de material permanente cadastrado errado ou em duplicidade

---

- Descobrir o empenho através do número do empenho

```SQL
SELECT * FROM empenho WHERE numero = '2013NE800478' and uo_id = 3
```

- Remover o empenho

```SQL
DELETE * FROM empenho WHERE numero = '2013NE800478' and uo_id = 3
```

- Descobrir os empenhopermanente através do empenho\_id

```SQL
SELECT * FROM empenhopermanente WHERE empenho_id = 666
```

- Remover os empenhopermanente ESPECÍFICOS

```SQL
SELECT * FROM empenhopermanente WHERE id in (1, 2)
```

- Descobrir a entrada

```SQL
SELECT * FROM entrada WHERE id = 16601
```

- Remover a entrada

```SQL
DELETE * FROM entrada WHERE id = 16601
```

- Descobrir as entradapermanente através da entrada\_id

```SQL
SELECT * FROM entradapermanente where entrada_id = 666
```

- Remover as entradapermanente

```SQL
DELETE * FROM entradapermanente where entrada_id = 666
```

- Descobrir as movimentações

```SQL
SELECT * FROM movimentopatrim WHERE entradapermanente_id in (1, 2)
DELETE * FROM movimentopatrim WHERE entradapermanente_id in (1, 2)
```

### Adicionar novos itens

---

#### À Entrada

---

A Entrada não pode ser editada. Solução:

1\. Verificar se os itens que deseja incluir na entrada estão empenhados. Caso não estejam, estes devem ser incluídos no Empenho (o Empenho pode ser editado via aplicação).

2\. Como não é possível editar a entrada, o usuário deve criar um nova entrada contendo os itens adicionais e com o mesmo número da nota fiscal.

#### Ao Empenho 

---

É possível editar o empenho e adicionar novos itens via aplicação.

### Buscar todos os servidores do IFPE que entraram depois de determinada data

---

 Exemplo: servidores que entraram a partir de 01/01/2016

```SQL
select au.username as siape, p.nome as nome 
FROM auth_user as au, servidor as s, pessoa as p
where au.username = s.matricula
and s.funcionario_ptr_id = p.id
and au.date_joined >= '01/01/2016'
order by p.nome;
```

### Listar responsáveis (carga atual) e quantidade de inventários a partir de um empenho

---

```SQL
SELECT p.nome, count(*) FROM empenho AS e
       INNER JOIN empenhopermanente AS epp on epp.empenho_id = e.id
       INNER JOIN entradapermanente AS etp on etp.empenho_permanente_id = epp.id
       INNER JOIN inventario AS i on i.entradapermanente_id=etp.id
       INNER JOIN pessoa AS p on i.responsavel_id = p.id 
       INNER JOIN unidadeorganizacional AS uo on e.uo_id = uo.id AND uo.cidade='REITORIA'
WHERE e.numero='2014NE800663' 
GROUP BY p.nome
```

---

---

# Procedimento para atualizar o SUAP de produção

Existem dois arquivos no servidor de produção que estão diferentes do código versionado:

- settings.py
- utils.py

Esses arquivo possuem informações como *tokens* e senhas utilizadas no ambiente de produção que não devem ser versionadas e por esse motivo estão diferentes.

Portanto, para não perder essas informações do ambiente de produção e também não versioná-las, devemos ignorar esse arquivos quando for atualizar o ambiente de produção.

Seguem os passos para atualizar o código de produção sem sobrescrever os dados de produção.

1\. Ignorar os referidos arquivos

```shell
 git update-index --assume-unchanged settings.py utils.py
```

2\. Atualizar arquivos

```shell
git pull origin master
```

3\. Voltar a considerar as mudanças dos arquivos

```shell
git update-index --no-assume-unchanged settings.py utils.py
```

O passo '3' sempre deve ser feito, pois em determinado momento podem ser feitas modificações no *setting.py* (instalação de novo *app* ou API) ou no *utils.py* (criação de novas funções ou classes) que devem ser versionadas e atualizadas no servidor de produção. Nesse caso, deve-se fazer backup dos dados de produção, como senhas, para retomar a configuração do ambiente após a atualização desses arquivos.