Tabela de conteúdos

SIAFI - Sistema Integrado de Administração Financeira do Governo Federal

O SIAFI – Sistema Integrado de Administração Financeira do Governo Federal é um Sistema de teleinformática criado para promover a modernização e a integração dos sistemas de acompanhamento e controle da execução orçamentária, financeira e patrimonial do Governo Federal de forma integrada, objetivando minimizar custos, e dar eficiência e eficácia na gestão dos recursos alocados na Lei Orçamentária Anual - LOA.

Link para Acesso ao SIAFI

Link para Acesso ao STA - Sistema de Transferência de Arquivos

Link para Rede SERPRO

Link para o Manual do Primeiro Acesso à Rede SERPRO

Link para configuração de acesso aos serviços do Novo Siafi

Manuais

Apostila - SIAFI

Passo a Passo para Criar um Processador de Arquivo SIAFI

Transações SIAFI

Processo para Envio de Dados ao SIAFI

  1. Acessar a Rede SERPRO ('https://acesso.serpro.gov.br/HOD900/index.htm') e clicar no link 'Acesso HOD'.
  2. Informar o 'Código' (CPF), 'Senha' da Rede SERPRO e 'Sistema': SIAFI.
  3. Informar o 'Código' (CPF), 'Senha' do SIAFI e 'Sistema': SIAFI2009.
  4. Informar no campo 'COMANDO', na parte inferior da tela, o comando '>CONARQBT'
  5. O próximo passo é informar a sigla do arquivo que se deseja recuperar o layout (NE - Empenho, OB - Ordem Bancária, etc.). Caso não saiba a sigla, basta aperta o 'ENTER' e para ver o detalhe do 'HEADER', 'DETALHE' e 'TRAILLER' basta clicar no 'F2'.
  6. Com o layout do arquivo, deve-se gerar o arquivo neste formato e acessar o STA - Sistema de Transferência de Arquivos ('https://consulta.tesouro.fazenda.gov.br/sta/') e executar a opção 'Upload'.

Processo para Extração e Processamento de Dados do SIAFI

  1. Acessar o STA - Sistema de Transferência de Arquivos https://consulta.tesouro.fazenda.gov.br/sta/.
  2. Informar 'Login (CPF)', 'Senha', 'Digite o código acima' e 'Transação' (Extrator).
  3. Informar o 'Nome da Extração' (por exemplo, LISTCREDOR) e clicar em 'Incluir'.
  4. Selecionar em 'Tipo de Arquivo' o item 'Documento', clicar no botão referente ao 'Nome do Arquivo' e selecionar o '61 - Lista de Credores - LC' (e clicar em selecionar), selecionar a 'Periodicidade' como 'Única', 'Forma de Extração' como 'Período Especificado na Abrangência' e 'Destino' como 'Portal On-line'. Clicar em 'Avançar'.
  5. Clicar no botão referente ao campo 'UG' e manda buscar pelo texto 'Rio Grande do Norte' e clicar no botão pesquisar. Selecionar o '153103 - UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE' e clicar em 'Selecionar'.
  6. Informar o 'Período' que se deseja recuperar os dados e clicar em 'Avançar'.
  7. Clicar em 'Confirmar'.
  8. Clicar no link superior 'Download'/'Extrações' e clicar no link referente ao arquivo de dados e de layout que se deseja.
  9. Com os arquivos extraídos do SIAFI, partiremos para a leitura do arquivo de layout, para sabermos quais campos vieram no arquivo de dados, qual seu tamanho e tipo.
  10. Depois de lido o arquivo de layout é feito o processamento do arquivo de dados referente ao layout lido. Estes dados são processados e armazenados no esquema SIAFI do banco de dados Administrativo para posterior consulta.

Serviços do Novo SIAFI

Para entender a metodologia de segurança utilizada na disponibilização dos serviços do SIAFI serão introduzidos alguns conceitos importantes.

Criptografia

A criptografia, considerada como a ciência e a arte de escrever mensagens em forma cifrada ou em código, é um dos principais mecanismos de segurança que pode ser usado para proteção contra os riscos associados ao uso da Internet.

Atualmente, a criptografia já está integrada ou pode ser facilmente adicionada à grande maioria dos sistemas operacionais e aplicativos e para usá-la, muitas vezes, basta a realização de algumas configurações ou cliques de mouse.

Criptografia de chave simétrica e de chaves assimétricas

De acordo com o tipo de chave usada, os métodos criptográficos podem ser subdivididos em duas grandes categorias: criptografia de chave simétrica e criptografia de chaves assimétricas.

Criptografia de chave simétrica: também chamada de criptografia de chave secreta ou única, utiliza uma mesma chave tanto para codificar como para decodificar informações, sendo usada principalmente para garantir a confidencialidade dos dados. Casos nos quais a informação é codificada e decodificada por uma mesma pessoa não há necessidade de compartilhamento da chave secreta. Entretanto, quando estas operações envolvem pessoas ou equipamentos diferentes, é necessário que a chave secreta seja previamente combinada por meio de um canal de comunicação seguro (para não comprometer a confidencialidade da chave). Exemplos de métodos criptográficos que usam chave simétrica são: AES, Blowfish, RC4, 3DES e IDEA.

Criptografia de chaves assimétricas: também conhecida como criptografia de chave pública, utiliza duas chaves distintas: uma pública, que pode ser livremente divulgada, e uma privada, que deve ser mantida em segredo por seu dono. Quando uma informação é codificada com uma das chaves, somente a outra chave do par pode decodificá-la. Qual chave usar para codificar depende da proteção que se deseja, se confidencialidade ou autenticação, integridade e não-repúdio. A chave privada pode ser armazenada de diferentes maneiras, como um arquivo no computador, um smartcard ou um token. Exemplos de métodos criptográficos que usam chaves assimétricas são: RSA, DSA, ECC e Diffie-Hellman. A criptografia de chave simétrica, quando comparada com a de chaves assimétricas, é a mais indicada para garantir a confidencialidade de grandes volumes de dados, pois seu processamento é mais rápido. Todavia, quando usada para o compartilhamento de informações, se torna complexa e pouco escalável, em virtude da:

A criptografia de chaves assimétricas, apesar de possuir um processamento mais lento que a de chave simétrica, resolve estes problemas visto que facilita o gerenciamento (pois não requer que se mantenha uma chave secreta com cada um que desejar se comunicar) e dispensa a necessidade de um canal de comunicação seguro para o compartilhamento de chaves.

Para aproveitar as vantagens de cada um destes métodos, o ideal é o uso combinado de ambos, onde a criptografia de chave simétrica é usada para a codificação da informação e a criptografia de chaves assimétricas é utilizada para o compartilhamento da chave secreta (neste caso, também chamada de chave de sessão). Este uso combinado é o que é utilizado pelos navegadores Web e programas leitores de e-mails. Exemplos de uso deste método combinado são: SSL, PGP e S/MIME.

Função de resumo(Hash)

Uma função de resumo é um método criptográfico que, quando aplicado sobre uma informação, independente do tamanho que ela tenha, gera um resultado único e de tamanho fixo, chamado hash1.

Você pode utilizar hash para:

Para verificar a integridade de um arquivo, por exemplo, você pode calcular o hash dele e, quando julgar necessário, gerar novamente este valor. Se os dois hashes forem iguais então você pode concluir que o arquivo não foi alterado. Caso contrário, este pode ser um forte indício de que o arquivo esteja corrompido ou que foi modificado. Exemplos de métodos de hash são: SHA-1, SHA-256 e MD5.

[1] O hash é gerado de tal forma que não é possível realizar o processamento inverso para se obter a informação original e que qualquer alteração na informação original produzirá um hash distinto. Apesar de ser teoricamente possível que informações diferentes gerem hashes iguais, a probabilidade disto ocorrer é bastante baixa.

Assinatura digital

A assinatura digital permite comprovar a autenticidade e a integridade de uma informação, ou seja, que ela foi realmente gerada por quem diz ter feito isto e que ela não foi alterada.

A assinatura digital baseia-se no fato de que apenas o dono conhece a chave privada e que, se ela foi usada para codificar uma informação, então apenas seu dono poderia ter feito isto. A verificação da assinatura é feita com o uso da chave pública, pois se o texto foi codificado com a chave privada, somente a chave pública correspondente pode decodificá-lo.

Para contornar a baixa eficiência característica da criptografia de chaves assimétricas, a codificação é feita sobre o hash e não sobre o conteúdo em si, pois é mais rápido codificar o hash (que possui tamanho fixo e reduzido) do que a informação toda.

Certificado digital

Como dito anteriormente, a chave púbica pode ser livremente divulgada. Entretanto, se não houver como comprovar a quem ela pertence, pode ocorrer de você se comunicar, de forma cifrada, diretamente com um impostor.

Um impostor pode criar uma chave pública falsa para um amigo seu e enviá-la para você ou disponibilizá-la em um repositório. Ao usá-la para codificar uma informação para o seu amigo, você estará, na verdade, codificando-a para o impostor, que possui a chave privada correspondente e conseguirá decodificar. Uma das formas de impedir que isto ocorra é pelo uso de certificados digitais.

O certificado digital é um registro eletrônico composto por um conjunto de dados que distingue uma entidade e associa a ela uma chave pública. Ele pode ser emitido para pessoas, empresas, equipamentos ou serviços na rede (por exemplo, um site Web) e pode ser homologado para diferentes usos, como confidencialidade e assinatura digital.

Um certificado digital pode ser comparado a um documento de identidade, por exemplo, o seu passaporte, no qual constam os seus dados pessoais e a identificação de quem o emitiu. No caso do passaporte, a entidade responsável pela emissão e pela veracidade dos dados é a Polícia Federal. No caso do certificado digital esta entidade é uma Autoridade Certificadora (AC).

Uma AC emissora é também responsável por publicar informações sobre certificados que não são mais confiáveis. Sempre que a AC descobre ou é informada que um certificado não é mais confiável, ela o inclui em uma “lista negra”, chamada de “Lista de Certificados Revogados” (LCR) para que os usuários possam tomar conhecimento. A LCR é um arquivo eletrônico publicado periodicamente pela AC, contendo o número de série dos certificados que não são mais válidos e a data de revogação.

O certificado digital de uma AC é emitido, geralmente, por outra AC, estabelecendo uma hierarquia conhecida como “cadeia de certificados” ou “caminho de certificação”, conforme ilustrado na Figura a seguir. A AC raiz, primeira autoridade da cadeia, é a âncora de confiança para toda a hierarquia e, por não existir outra AC acima dela, possui um certificado autoassinado (mais detalhes a seguir). Os certificados das ACs raízes publicamente reconhecidas já vêm inclusos, por padrão, em grande parte dos sistemas operacionais e navegadores e são atualizados juntamente com os próprios sistemas. Alguns exemplos de atualizações realizadas na base de certificados dos navegadores são: inclusão de novas ACs, renovação de certificados vencidos e exclusão de ACs não mais confiáveis.

Alguns tipos especiais de certificado digital que você pode encontrar são:

Especificação do Web Service

Etapas para Geração das Chaves

  1. O primeiro passo a ser realizado para utilização dos serviços do SIAFI é seguir o seguinte tutorial para geração das chaves do Certificado Digital: https://www.tesouro.fazenda.gov.br/novo-siafi/informacoes-tecnicas/formas-de-integracao/699-certificado-digital-homologacao
  2. Após gerar o arquivo .pfx o próximo passo é a geração do keystore(cacerts) que é a chave pública do servidor de serviço do Novo SIAFI. Para gerar esta chave utilizamos a seguinte classe:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
 
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
 
/** 
* Classe utilizada para gerar o KeyStore do Servidor do Novo SIAFI que está disponibilizando o Serviço
* 
*/  
public class SiafiBuildCacerts {  
    private static final String JSSECACERTS = "cacerts";  
    private static final int TIMEOUT_WS = 60;  
 
    public static void main(String[] args) {  
        try {  
            /** 
             * Endereço do WebService. 
             * O Endereço abaixo é do Servidor que disponibiliza o serviço
             */  
            String enderecoWebService = "homservicos-siafi.tesouro.gov.br";  
 
            File cacertsFile = gerarCacerts(enderecoWebService, 443);  
            if (cacertsFile != null) {  
                info("| Cacerts gerado em: " + cacertsFile.getAbsolutePath());  
            }  
        } catch (Exception e) {  
            error(e.toString());  
        }  
    }  
 
    public static File gerarCacerts(String host, int port) throws Exception {  
            char[] passphrase = "changeit".toCharArray();  
 
        File file = new File(JSSECACERTS);  
        if (file.isFile() == false) {  
            char SEP = File.separatorChar;  
            File dir = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security");  
            file = new File(dir, JSSECACERTS);  
            if (file.isFile() == false) {  
                    file = new File(dir, "cacerts");  
            }  
        }  
 
        info("| Loading KeyStore " + file + "...");  
        InputStream in = new FileInputStream(file);  
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());  
        ks.load(in, passphrase);  
        in.close();  
 
        SSLContext context = SSLContext.getInstance("TLS");  
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(  
                    TrustManagerFactory.getDefaultAlgorithm());  
        tmf.init(ks);  
        X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];  
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);  
        context.init(null, new TrustManager[] { tm }, null);  
        SSLSocketFactory factory = context.getSocketFactory();  
 
        info("| Abrindo conexão com " + host + ":" + port + "...");  
        SSLSocket socket = (SSLSocket) factory.createSocket(host, port);  
        socket.setSoTimeout(TIMEOUT_WS * 1000);  
        try {  
            info("| Iniciando handshake SSL  ...");  
            socket.startHandshake();  
            socket.close();  
            info("| Sem erros, certificado já é confiável");  
        } catch (SSLHandshakeException e) {  
            /** 
             * PKIX path building failed: 
             * sun.security.provider.certpath.SunCertPathBuilderException: 
             * unable to find valid certification path to requested target 
             * Não tratado, pois sempre ocorre essa exceção quando o cacerts 
             * nao esta gerado. 
             */  
        } catch (SSLException e) {  
            error("| " + e.toString());  
        }  
 
        X509Certificate[] chain = tm.chain;  
        if (chain == null) {  
            info("| Não foi possível obter a cadeia de certificados do servidor");  
            return null;  
        }  
 
        info("| Enviando ao servidor " + chain.length + " certificado(s):");  
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");  
        MessageDigest md5 = MessageDigest.getInstance("MD5");  
        for (int i = 0; i < chain.length; i++) {  
            X509Certificate cert = chain[i];  
            sha1.update(cert.getEncoded());  
            md5.update(cert.getEncoded());  
 
            String alias = host + "-" + (i);  
            ks.setCertificateEntry(alias, cert);  
            info("| Adicionando certificado para keystore '" + JSSECACERTS + "' usando o apelido '" + alias + "'");  
        }  
 
        File cafile = new File(JSSECACERTS);  
        OutputStream out = new FileOutputStream(cafile);  
        ks.store(out, passphrase);  
        out.close();  
 
        return cafile;  
    }  
 
    private static class SavingTrustManager implements X509TrustManager {  
        private final X509TrustManager tm;  
        private X509Certificate[] chain;  
 
        SavingTrustManager(X509TrustManager tm) {  
            this.tm = tm;  
        }  
 
        public X509Certificate[] getAcceptedIssuers() {  
            throw new UnsupportedOperationException();  
        }  
 
        public void checkClientTrusted(X509Certificate[] chain, String authType)  
            throws CertificateException {  
            throw new UnsupportedOperationException();  
        }  
 
        public void checkServerTrusted(X509Certificate[] chain, String authType)  
            throws CertificateException {  
            this.chain = chain;  
            tm.checkServerTrusted(chain, authType);  
        }  
    }  
 
    private static void info(String info) {  
        System.out.println("INFO: " + info);  
    }  
 
    private static void error(String error) {  
        System.out.println("ERROR: " + error);  
    }  
 
}
  1. Para verificar se as chaves estão funcionando corretamentes é possível utilizar o seguinte trecho de código:
public class CriptoSIAFI {
 
   public static void main(String[] args) throws IOException, KeyManagementException, NoSuchAlgorithmException {
 
		 String local = "local onde está armazenado o carcerts"; 
		 //O arquivo .pfx é gerado através da documetação contida em:
		 //https://www.tesouro.fazenda.gov.br/novo-siafi/informacoes-tecnicas/formas-de-integracao/699-certificado-digital-homologacao 
		 System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");  
		 System.setProperty("javax.net.ssl.keyStore", local +"homologacao.pfx");
		 System.setProperty("javax.net.ssl.keyStorePassword", senha na qual foi gerado a chave privada);  
 
		 //Chave Pública do Servidor do Novo SIAFI
		 System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
		 //Para gerar o cacerts foi utilizado a classe SiafiBuildCacerts
		 //O cacerts é a keystore do Servidor do Novo SIAFI
		 System.setProperty("javax.net.ssl.trustStore", local+"cacerts");
 
		 String urlServico = "https://homservicos-siafi.tesouro.gov.br/siafi2013he/services/cpr/manterContasPagarReceber?wsdl";
 
		 URL urlC = new URL(urlServico);
		 HttpsURLConnection connection = (HttpsURLConnection) urlC.openConnection();
 
		 BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream()));
		 String linha = null;
		 while((linha = input.readLine()) != null){
			 System.out.println(linha);
		 }
 
	 }
 
}

Contatos

  Contato para auxiliar entendimento do que deve ser extraído do SIAFI
  Marli – MJ : Marli.lehrer@mj.gov.br / 61 2025-3853
  Rodrigues – DPRF: erinaldo.rodrigues@dprf.gov.br / 61 3448-7718
  Gladston – DPF : gladston.ggm@dpf.gov.br / 61 2024-8457
  SERPRO
  Fone: 0800-9782329
  Antônio Barros / Deuto - SERPRO Natal/RN
  Fone: 84 3201-1477 / 84 3201-1361
  Nazaré Lopes Bretas
  E-mail: nazare.bretas@planejamento.gov.br
  Maria Betânia Gonçalves Xavier
  Coordenadora-Geral de Sistemas e TI da Secretaria do Tesouro Nacional
  Fone: 61 3412-3912
  Fax:  61 3412-1462
  E-mail: maria-betania.xavier@fazenda.gov.br
  Heloisa Macedo
  Informações sobre o STA - Sistema de Transferência de Arquivos do Siafi e Extrator de Dados.
  Fone: 61 3412-3928
  E-mail: heloisa.macedo@fazenda.gov.br
  Mônica Pacheco
  Dúvidas sobre SIAFI e STA
  Email: monica.pacheco@fazenda.gov.br, servicedesk.stn@fazenda.gov.br
  Pedro / Soares
  Informações sobre o STA - Sistema de Transferência de Arquivos do Siafi e Extrator de Dados.
  Fone: 61 3412-3929 / 61 3412-3957    

Guilherme Clemente Kilson (Contato Antigo) Informações sobre o STA - Sistema de Transferência de Arquivos do Siafi e Extrator de Dados. Fone: 61 3412-3983 E-mail: guilherme.kilson@fazenda.gov.br

Heron Alves Moreira (Contato Antigo) Informações sobre o STA - Sistema de Transferência de Arquivos do Siafi e Extrator de Dados. Fone: 61 3412-1628 E-mail: heron.moreira@fazenda.gov.br

  GEATE/COSIS - Gerência de Suporte ao Usuário e Coordenação-Geral de Sistemas e Tecnologia da Informação
  E-mail: geate.cosis.df.stn@fazenda.gov.br
  Fábio Alexandre de Araújo Lima 
  Gerente de Relacionamento 
  Secretaria do Tesouro Nacional - MF/STN/COSIS/GEREL 
  Fone: 61 3412-3944 / 61 8117-0843
  E-mail: fabio-alexandre.lima@fazenda.gov.br 
  Vânia
  Secretaria do Tesouro Nacional 
  Fone: 61 3412-3927 

Yuri Fontes de Oliveira

  Gerência de Gestão Corporativa / DSI / SLTI 
  Ministério do Planejamento, Orçamento e Gestão
  E-mail: yuri.oliveira@planejamento.gov.br 

Marciana Moura

  Analista de Finanças e Controle
  STN/COSIS/GEDES (61) 3412-3053
  E-mail: marciana.leal@fazenda.gov.br

Documentos do SVN

Importação e Exportação

Breve Explicação sobre Importação e Exportação de Dados do SIAFI

Manual WEB

O MANUAL WEB - SIAFI é um documento que registra, de forma estruturada e sistemática, as normas e procedimentos operacionais do SIAFI, do ponto de vista do usuário.

Próximas Atividades

Com relação a exportação de dados há duas demandas

Exemplos de GRU - Guia de Recolhimento da União

Documentos Extraídos do SIAFI

Layouts dos Arquivos Extraídos do SIAFI

Ocorrências

Data Remetente Contato Descrição
10/07/2009 Heloísa Heloísa retornou o email Retornou o e-mail com os arquivos de 'Programa de Trabalho Resumido' e 'Plano Interno' em anexo.
09/07/2009 Marcelo Feijó Heloísa Informando que continuamos com problemas na geração dos arquivos 'Plano Interno' e 'Programa de Trabalho Resumido - PTRES'. Foi perguntado também sobre a possibilidade deles nos envirarem estes arquivos para nós podermos dar continuidade à integração.
29/06/2009 Heloísa Heloísa retornou o email Repasso a você as informações que obtive do Soares: “Os registros de Elementos de Despesa podem ser obtidos a partir das contas contábeis de “Despesa”, isto é, contas iniciadas pelo algarismo “3”. Realmente o código da conta está no campo “GR-CODIGO-CONTA”.
29/06/2009 Heloísa Heloísa retornou o email Informando que encaminhou para o setor responsável no SERPRO o erro relacionado ao tamanho dos arquivos, entre outros que a gente enviou durante a semana. Assim que obtiverem alguma resposta, nos informarão.
26/06/2009 Heloísa Heloísa retornou o email Segundo informações do Soares, dependendo do tamanho do arquivo realmente não pode ser solicitado o envio para o e-mail, devendo alterar para Portal On line e depois acessar via STA - download.
26/06/2009 Marcelo Feijó Envio de email para Heloísa (heloisa.macedo@fazenda.gov.br) Informando que o cadastro da extração de Empenho para receber por e-mail também apresentou a mensagem “O arquivo Empenho - NE não foi gerado on-line porque EXCEDEU O LIMITE DE KBYTES ONLINE Extração não será mais enviada para e-mail(s): marcelohbfeijo@gmail.com”.
25/06/2009 Heloísa Heloísa retornou o email Informando que encaminharam as telas enviadas para análise, e disse que realmente está parecendo que houve erro no STA, assim que tiverem um posicionamento entrarão em contato com a gente.
25/06/2009 Marcelo Feijó Envio de email para Heloísa (heloisa.macedo@fazenda.gov.br) Solicitando informações sobre extrações que foram cadastradas, mas que não estão gerando qualquer arquivo. Uma das mensagens é por que excedeu o limite de tamanho. Foram enviados 'print screen' das telas.

Pendências e Observações

Corrigir erro de conexão. Após um certo número de registros o erro ocorre.

Empenho

PTRES