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
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/<numero_tombo>/
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
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. <code> 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;