===== SUAP/FROTA - IMPORTAÇÃO DOS VEÍCULOS =====
==== PASSO 1 ====
ESTE PASSO DEVERÁ SER FEITO PELO SERVIDOR RESPONSÁVEL PELA COORDENAÇÃO DE TRANSPORTES DE CADA CAMPUS, JUNTAMENTE COM O COORDENADOR DE PATRIMÔNIO
Favor preencher o arquivo abaixo e enviar para **suporte.suap@ifce.edu.br**
{{:sistemas:frota:modelo_planilha_preenchida_final_suap_frota.xls|}}
-------------------------------------------------------------------
==== ORIENTAÇÕES PARA O PREENCHIMENTO DA PLANILHA ====
a) Devem ser obedecidas a ordem das colunas da tabela (tombamento, descrição, quantidade = 1, valor, matrícula SIAPE do servidor, nome do servidor que possui a carga, cnpj do fornecedor, nome do fornecedor, número da nota fiscal, data da nota fiscal, estado do bem, categoria)
b) Para cada campus, criar no módulo de Protocolo um processo, que será associado ao processo de importação dos bens do Patrimônio,
c) Categoria deve ser 4490.52.52 (VEICULOS DE TRACAO MECÂNICA)
d) Devem ser consultados previamente os fornecedores como pessoas jurídicas no SUAP, clicando em ADMINISTRAÇÃO -> Cadastros -> Pessoa Jurídica, ou através do link:
http://suap.ifce.edu.br/admin/rh/pessoajuridica/
Caso o fornecedor não exista, ele deve ser cadastrado.
É essencial que o nome e o CNPJ repassados na planilha sejam iguais aos nomes contidos no SUAP.
Para maiores informações consultar o site:
http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/cnpjreva_solicitacao.asp
e) O servidor deve ser selecionado dentre as pessoas existentes na planilha. Muita atenção para informar a matrícula SIAPE do servidor corretamente. As matrículas podem ser consultados na aba "servidor" da planilha.
f) Não será possível a importação de bens cujo número de tombamento seja ilegível.
É necessário o repasse correto desta numeração.
g) O estado do bem deve ser selecionado dentre as opções disponíveis na seleção (bom, ocioso, recuperavel, antieconomico e irrecuperável)
h) A data deve ser fornecida no formato dia/mes/ano (por exemplo: 01/01/2015)
i) A quantidade do bem deve ser sempre 1, pois eles serão importados individualmente.
OBSERVAÇÃO: os bens entrarão no sistema como DOAÇÂO, pois caso sejam lançado como compra o processo de importação será muito complexo e demorado por necessitar de dados adicionados e que talvez não sejam obtidos com a celeridade necessária.
----------------
==== PASSO 2 ====
ESTE PASSO DEVERÁ SER FEITO PELA DGTI. É A IMPORTAÇÃO DOS VEÍCULOS PARA O MÓDULO PATRIMÔNIO DO SUAP.
1) Criar o schema 'migracaopatrim'
CREATE SCHEMA migracaopatrim;
2) Criar tabela 'migracaopatrim.bens'
CREATE TABLE migracaopatrim.bens
(
tombamento character varying,
descricao character varying,
quantidade character varying,
valor character varying,
siape character varying,
responsavel character varying,
cnpjfornecedor character varying,
fornecedor character varying,
notafiscal character varying,
datanotafiscal character varying,
estadobem character varying,
categoria character varying
);
comment on column migracaopatrim.bens.tombamento is 'numero do tombamento do bem';
comment on column migracaopatrim.bens.descricao is 'descricao do bem';
comment on column migracaopatrim.bens.quantidade is 'quantidade do bem';
comment on column migracaopatrim.bens.valor is 'valor do bem';
comment on column migracaopatrim.bens.siape is 'matricula SIAPE de quem possui a carga do bem';
comment on column migracaopatrim.bens.responsavel is 'responsavel pela carga do bem';
comment on column migracaopatrim.bens.cnpjfornecedor is 'CNPJ do fornecedor';
comment on column migracaopatrim.bens.fornecedor is 'Fornecedor do bem';
comment on column migracaopatrim.bens.notafiscal is 'Numero da nota fiscal';
comment on column migracaopatrim.bens.datanotafiscal is 'Data da nota fiscal';
comment on column migracaopatrim.bens.estadobem is 'Estado do bem: bom,ocioso,recuperavel,antieconomico,irrecuperavel';
comment on column migracaopatrim.bens.categoria is 'Categoria do bem no formato 4490.XX.XX';
3) Remover cabeçalho da planilha que foi enviada.
4) Gerar CSV a partir da planilha (No LibreOffice: Arquivo - Salvar como).
5) Importar o CSV para a tabela 'migracaopatrim.bens' (no PgAdmin, clicar com o botão direito na tabela e clicar na opção Import. Na próxima tela escolha o arquivo e em format selecione a opção CSV).
6) Criar os campos abaixo para mapear para o SUAP
alter table migracaopatrim.bens add column id serial;
alter table migracaopatrim.bens add column funcionario_ptr_id integer;
alter table migracaopatrim.bens add column categoria_id character varying;
alter table migracaopatrim.bens add column fornecedor_id integer;
alter table migracaopatrim.bens add column entrada_id integer;
alter table migracaopatrim.bens add column entradapermanente_id integer;
alter table migracaopatrim.bens add column inventario_id integer;
7) Atualize o campo 'funcionario_ptr_id' por meio do script abaixo:
update migracaopatrim.bens
set funcionario_ptr_id = (
select serv.funcionario_ptr_id
from servidor serv
where serv.matricula = siape
);
8) Conferir se as matrículas SIAPE foram cadastradas sem erros. Comparar com o nome da planilha original e o próprio SUAP
select distinct siape
from
migracaopatrim.bens
where
siape is not null and funcionario_ptr_id is null;
9) Retire os espaços em branco
update migracaopatrim.bens set categoria = replace(categoria,' ','')
10) Atualizar categoria: categoria_id
update migracaopatrim.bens
set categoria_id = (
select id
from categoriamaterialpermanente catperm
where catperm.codigo = categoria
);
11) A consulta a seguir não deve retornar nenhum item sem categoria. Verificar possíveis erros no arquivo e devolver para correção.
select * from migracaopatrim.bens where categoria_id is null;
12) Atualizar fornecedor pelo CNPJ
update migracaopatrim.bens set fornecedor_id = (
select pessoa_ptr_id
from pessoa_juridica
where cnpj = trim(cnpjfornecedor)
);
13) Checar se há fornecedores com dados pendentes. Caso haja, eles devem ser incluídos no SUAP. Depois repita o passo 12.
select distinct cnpjfornecedor, fornecedor
from
migracaopatrim.bens
where
fornecedor_id is null and cnpjfornecedor is not null and cnpjfornecedor <> ' ';
14) Formatar o campo valor, retirando os pontos finais e trocando a vírgula por ponto.
update migracaopatrim.bens set valor=replace(valor,'.','');
update migracaopatrim.bens set valor=replace(valor,',','.');
15) Rodar script para criar a função para gerar as entradas
CREATE OR REPLACE FUNCTION migracao_bens_patrimonio(integer)
RETURNS VOID as
$BODY$
DECLARE
c_notafiscal text;
c_datanotafiscal date;
c_fornecedor_id INTEGER;
c_entrada_id INTEGER;
c_categoria_id INTEGER;
c_descricao TEXT;
c_quantidade FLOAT;
c_valor FLOAT;
c_entradapermanente_id INTEGER;
c_tombo INTEGER;
c_busca TEXT;
c_funcionario INTEGER;
c_inventario_id INTEGER;
c_estadobem text;
--cursor entradas
cursor_entradas CURSOR FOR select distinct
notafiscal,
to_date(datanotafiscal,'dd/mm/yyyy') as datanotafiscal,
fornecedor_id
from migracaopatrim.bens
where fornecedor_id is not null
and entrada_id is null;
--cursor entradas permanente
cursor_entrada_permanente CURSOR FOR select entrada_id,
categoria_id,
descricao,
CAST(quantidade AS integer) as quantidade,
cast(valor as float) as valor
from migracaopatrim.bens
where entrada_id is not null
and categoria_id is not null
and entradapermanente_id is null;
--cursor inventario
cursor_inventario CURSOR FOR select tombamento,
entradapermanente_id,
tombamento||' '||descricao as busca,
funcionario_ptr_id,
estadobem
from migracaopatrim.bens
where entrada_id is not null
and categoria_id is not null
and entradapermanente_id is not null
and inventario_id is null;
--cursor movimento
cursor_movimento CURSOR FOR select inventario_id,
funcionario_ptr_id,
entradapermanente_id
from migracaopatrim.bens
where inventario_id is not null;
BEGIN
OPEN cursor_entradas;
--
LOOP
FETCH cursor_entradas INTO c_notafiscal, c_datanotafiscal, c_fornecedor_id;
EXIT WHEN NOT FOUND;
insert into entrada
(data, uo_id, tipoentrada_id, tipomaterial_id, numeronotafiscal, datanotafiscal, pessoa_id)
values
(now(), $1, 2, 2, c_notafiscal, c_datanotafiscal, c_fornecedor_id);
SELECT MAX(id)
INTO c_entrada_id
FROM entrada;
UPDATE migracaopatrim.bens
SET entrada_id = c_entrada_id
WHERE notafiscal = c_notafiscal
AND fornecedor_id = c_fornecedor_id;
END LOOP;
--
CLOSE cursor_entradas;
OPEN cursor_entrada_permanente;
--
LOOP
FETCH cursor_entrada_permanente INTO c_entrada_id, c_categoria_id, c_descricao, c_quantidade, c_valor;
EXIT WHEN NOT FOUND;
insert into entradapermanente
(entrada_id, categoria_id, descricao, qtd, valor)
values
(c_entrada_id, c_categoria_id, c_descricao, c_quantidade, c_valor);
SELECT MAX(id)
INTO c_entradapermanente_id
FROM entradapermanente;
UPDATE migracaopatrim.bens SET entradapermanente_id = c_entradapermanente_id
WHERE entrada_id = c_entrada_id;
END LOOP;
--
CLOSE cursor_entrada_permanente;
OPEN cursor_inventario;
--
LOOP
FETCH cursor_inventario INTO c_tombo, c_entradapermanente_id, c_busca, c_funcionario, c_estadobem;
EXIT WHEN NOT FOUND;
BEGIN
insert into inventario
(numero, status_id, numeroserie, entradapermanente_id, campo_busca, responsavel_id, estado_conservacao, sala_id)
values
(c_tombo, 2,'', c_entradapermanente_id, c_busca, c_funcionario, c_estadobem, null);
EXCEPTION WHEN unique_violation THEN
-- Do nothing, and loop to try the UPDATE again.
END;
END LOOP;
--
CLOSE cursor_inventario;
update migracaopatrim.bens
SET inventario_id = (
select id
from inventario
where numero = cast(tombamento as integer)
);
OPEN cursor_movimento;
--
LOOP
FETCH cursor_movimento INTO c_inventario_id, c_funcionario, c_entradapermanente_id;
EXIT WHEN NOT FOUND;
insert into movimentopatrim
(usuario_id, inventario_id, tipo_id, pessoa_id, entradapermanente_id, data)
values
(66, c_inventario_id, 2, c_funcionario, c_entradapermanente_id, now());
END LOOP;
CLOSE cursor_movimento;
End; $BODY$
language 'plpgsql';
------------------------------
16) Execute a função, digitando o seguinte comando:
select migracao_bens_patrimonio(4);
OBS: Em que 4 corresponde ao campus ao qual o veículo pertence, obtido através da tabela: unidadeorganizacional (ver tabela abaixo)
^id^nome^
|1|CAMPUS ACARAU|
|4|CAMPUS CANINDE|
|6|CAMPUS CRATEUS|
|8|CAMPUS FORTALEZA|
|9|REITORIA|
|10|CAMPUS IGUATU|
|12|CAMPUS LIMOEIRO DO NORTE|
|14|CAMPUS QUIXADA|
|15|CAMPUS SOBRAL|
|26|CAMPUS CEDRO|
|28|CAMPUS MARACANAÚ|
|30|CAMPUS JUAZEIRO DO NORTE|
|32|CAMPUS CRATO|
|33|CAMPUS ARACATI|
|35|CAMPUS BATURITE|
|37|CAMPUS CAMOCIM|
|39|CAMPUS CAUCAIA|
|41|CAMPUS JAGUARIBE|
|42|CAMPUS MORADA NOVA|
|44|CAMPUS TABULEIRO|
|46|CAMPUS TAUA|
|48|CAMPUS TIANGUA|
|50|CAMPUS UBAJARA|
Checar se os inventários foram importados corretamente usando a url
/patrimonio/inventario//
Ex:
suap.ifce.edu.br/patrimonio/inventario/203075/
IMPORTANTE: Após o fim do procedimento de importação, apagar a tabela bens do schema migracaopatrim para que os passos possam ser repetidos com outros campi.
---------------------------------
==== PASSO 3 ====
Após o lançamento dos dados patrimomiais dos veículos e de posse do número de tombamento, faz-se necessário registrar os veículos no módulo de Frota.
Os dados necessários são:
^ ^ ^
|Patrimônio:| |
|Modelo:| |
|Cor:| |
|Ano:| |
|Placa:| |
|Lotação:| Capacidade máxima de ocupantes incluindo o motorista |
|Odômetro:| Km rodados |
|Chassi:| |
|Renavan:| |
|Potência:| Potência em hp |
|Cilindrada: | Cilindrada em cc |
|Combustiveis:| Gasolina, Gás Natural, Diesel, Álcool |
|Tanque:| Capacidade (l) |
------------------------------
O procedimento para cadastramento dos veículos está descrito em:
[[http://docs.dgti.ifce.edu.br/doku.php?id=sistemas:frota:manual:viatura|http://docs.dgti.ifce.edu.br/doku.php?id=sistemas:frota:manual:viatura]]
OS PASSOS ABAIXO NÃO NECESSÁRIOS NO MOMENTO, DEIXEI SÓ PRA DOCUMENTAÇÃO.
update migracaopatrim.bens set fornecedor_id = (select id from pessoa
where upper(nome) = upper(fornecedor));
10.2) Incluir os fornecedores que não foram encontrados.
Create or Replace FUNCTION migracao_incluir_fornecedores() RETURNS VOID as
$BODY$
DECLARE
c_fornecedor_id integer;
c_cnpjfornecedor text;
c_nomefornecedor text;
--cursor fornecedores
cursor_fornecedores CURSOR FOR select distinct cnpjfornecedor from migracao.bens where fornecedor_id is null and cnpjfornecedor is not null and cnpjfornecedor <> ' ';
Begin
OPEN cursor_fornecedores;
--
LOOP
FETCH cursor_fornecedores INTO c_cnpjfornecedor, c_nomefornecedor, c_fornecedor_id;
EXIT WHEN NOT FOUND;
select fornecedor
into c_nomefornecedor
from migracao.bens
where cnpjfornecedor = c_cnpjfornecedor
LIMIT 1;
BEGIN
insert into pessoa(nome, email, email_secundario, website, excluido, nome_usual, natureza_juridica, sistema_origem)
values(c_nomefornecedor, ' ',' ', ' ', 'False',' ',' ',' ');
SELECT MAX(id)
INTO c_fornecedor_id
FROM pessoa;
insert into pessoa_juridica(pessoa_ptr_id, cnpj)
values(c_fornecedor_id, c_cnpjfornecedor);
EXCEPTION WHEN unique_violation THEN
-- Do nothing, and loop to try the UPDATE again.
END;
END LOOP;
--
CLOSE cursor_fornecedores;
update migracao.bens set fornecedor_id = (select pessoa_ptr_id from pessoa_juridica
where cnpj = trim(cnpjfornecedor));
End; $BODY$
language 'plpgsql';
Roda o script:
select migracao_incluir_fornecedores();
Verifica se ainda ficou algum em branco:
select distinct cnpjfornecedor, fornecedor from migracao.bens where fornecedor_id is null and cnpjfornecedor is not null and cnpjfornecedor <> ' ';
6) Incluir predio (Orientar que coloque campus na planilha)
Buscar UO do campus
Create or Replace FUNCTION migracao_incluir_predios(uo_id integer) RETURNS VOID as
$BODY$
DECLARE
c_predio_id integer;
c_sala_id integer;
c_desc_predio text;
c_desc_sala text;
--cursor predios
cursor_predios CURSOR FOR select distinct predio from migracao.bens where b_predio_id is null and predio <> ' ';
--cursor salas
cursor_salas CURSOR FOR select distinct b_predio_id, sala from migracao.bens where b_sala_id is null and sala <> ' ' and b_predio_id is not null order by 1;
Begin
OPEN cursor_predios;
--
LOOP
FETCH cursor_predios INTO c_desc_predio;
EXIT WHEN NOT FOUND;
INSERT INTO comum_predio(nome, uo_id, ativo ) VALUES (c_desc_predio, uo_id, True);
END LOOP;
--
CLOSE cursor_predios;
update migracao.bens set b_predio_id = (select id from comum_predio
where nome = predio);
OPEN cursor_salas;
--
LOOP
FETCH cursor_salas INTO c_predio_id, c_desc_sala;
EXIT WHEN NOT FOUND;
INSERT INTO comum_sala(nome, ativa, predio_id, agendavel)
VALUES (c_desc_sala, True, c_predio_id, True);
END LOOP;
--
CLOSE cursor_salas;
update migracao.bens set b_sala_id = (select id from comum_sala
where b_predio_id = predio_id and nome = sala);
End; $BODY$
language 'plpgsql';
------------------------------
Essa consulta deve retornar vazia. Se sim, prossiga com o tutorial.
select * from migracaopatrim.bens where b_predio_id is null or b_sala_id is null;
[[sistemas:frota|Voltar à página Principal do módulo de Frota]]