ANPD SEI Integrations
    Preparing search index...

    Module @anpdgovbr/sei-client

    @anpdgovbr/sei-client

    SEI.SIP

    npm license node module typescript

    Cliente TypeScript para chamadas SOAP RPC/encoded ao Web Service do SEI (SeiWS.php) — sem dependência de framework, .env ou runtime específico além de Node.js 22+. A aplicação consumidora resolve configuração, cache, autorização, logging e persistência.

    A API segue o contrato do SEI 5.0.4 e cobre consultas, criação de processos e documentos, tramitação, blocos, marcadores, controle de prazo, anotações, publicações, e-mail e ouvidoria.

    O guia operacional fica em ../../doc/sei-client.md.

    npm install @anpdgovbr/sei-client
    # ou
    yarn add @anpdgovbr/sei-client
    # ou
    pnpm add @anpdgovbr/sei-client
    import { createSeiClient } from "@anpdgovbr/sei-client"

    const sei = createSeiClient({
    endpointUrl: "https://sei.orgao.gov.br/sei/ws/SeiWS.php",
    siglaSistema: process.env.SEI_SIGLA_SISTEMA!,
    identificacaoServico: process.env.SEI_IDENTIFICACAO_SERVICO!,
    requestTimeoutMs: 30_000,
    })

    // Consultas (somente leitura)
    const unidades = await sei.consultas.listarUnidades()
    const proc = await sei.consultas.consultarProcedimento({
    idUnidade: "110000001",
    protocoloProcedimento: "00000.000001/2026-01",
    })

    // Operações (alteram estado)
    const retorno = await sei.operacoes.gerarProcedimento({
    idUnidade: "110000001",
    procedimento: {
    idTipoProcedimento: "100000101",
    especificacao: "Integração via sei-client",
    assuntos: [{ codigoEstruturado: "06.01.01" }],
    interessados: [],
    nivelAcesso: "0",
    },
    })

    O pacote não lê variáveis de ambiente. SiglaSistema e IdentificacaoServico são cadastrados no SEI (Administração → Sistemas) e devem ser tratados como segredos server-side.

    A fachada SeiClient agrupa dois subclients: consultas (SeiConsultasClient, somente leitura) e operacoes (SeiOperacoesClient, escrita). Os métodos mais comuns também existem como atalhos na raiz.

    Método Descrição
    listarUnidades Unidades liberadas para o sistema integrador
    listarUsuarios Usuários com acesso à unidade
    listarTiposProcedimento Tipos de processo disponíveis
    listarSeries Séries (tipos de documento)
    listarContatos Contatos, com filtros e paginação
    consultarProcedimento Dados completos de um processo
    consultarDocumento Dados completos de um documento
    consultarBloco Dados de um bloco e seus protocolos
    consultarPublicacao Publicação oficial de um documento
    listarAndamentos Histórico de andamentos de um processo
    listarMarcadoresUnidade Marcadores configurados na unidade
    listarHipotesesLegais Hipóteses legais de restrição de acesso
    listarExtensoesPermitidas Extensões de arquivo aceitas
    listarFeriados Feriados do órgão/unidade
    adicionarArquivo Inicia upload de arquivo em partes
    listarTiposProcedimentoOuvidoria Tipos de processo habilitados para ouvidoria
    Método Descrição
    gerarProcedimento Cria processo (com documentos opcionais)
    incluirDocumento Inclui documento em processo
    enviarProcesso Tramita processo entre unidades
    concluirProcesso / reabrirProcesso Conclui/reabre processo na unidade
    atribuirProcesso Atribui processo a usuário
    lancarAndamento Registra andamento
    anexarProcesso / desanexarProcesso Anexação de processos
    relacionarProcesso Relacionamento entre processos
    sobrestarProcesso Sobrestamento
    gerarBloco / incluirDocumentoBloco ... Ciclo completo de blocos
    definirMarcador Marcadores em lote
    definirControlePrazo ... Ciclo de controle de prazo
    registrarAnotacao Anotações (post-its) em lote
    agendarPublicacao ... Ciclo de publicação oficial
    enviarEmail E-mail com documento gerado no processo
    registrarOuvidoria Manifestação de ouvidoria

    A lista completa, com parâmetros e tipos, está na documentação TypeDoc do monorepo.

    Todas as falhas de comunicação viram SeiSoapError, com operation, status HTTP (408 em timeout) e fault quando o SEI retorna SOAP Fault:

    import { SeiSoapError } from "@anpdgovbr/sei-client"

    try {
    await sei.consultas.consultarProcedimento({ ... })
    } catch (error) {
    if (error instanceof SeiSoapError) {
    console.error(error.operation, error.status, error.fault)
    }
    }

    O SEI espera Documento.Conteudo e Documento.ConteudoSecoes[].Conteudo em Base64. Use encodeSeiBase64 para HTML/texto:

    import { encodeSeiBase64 } from "@anpdgovbr/sei-client"

    await sei.operacoes.incluirDocumento({
    idUnidade: "110000036",
    documento: {
    tipo: "G",
    protocoloProcedimento: "00261.000000/2026-00",
    idSerie: "5",
    nivelAcesso: "0",
    conteudoSecoes: [
    {
    nome: "Corpo do Texto",
    conteudo: encodeSeiBase64("<p>Conteúdo do documento</p>"),
    },
    ],
    },
    })

    O SEI diferencia tipos de bloco: A (assinatura), R (reunião) e I (interno). Documento pode ser incluído em bloco de assinatura (Tipo=A), mas processo não: para incluirProcessoBloco/retirarProcessoBloco, use bloco interno ou outro tipo compatível. Essa restrição vem do SEI e não do cliente TypeScript.

    definirMarcador registra marcador em processo e não possui operação par de remoção no Web Service do SEI. Já controles de prazo têm ciclo explícito: definirControlePrazo, concluirControlePrazo e removerControlePrazo.

    adicionarArquivo inicia um anexo temporário usando tamanho total em bytes, MD5 hexadecimal do arquivo completo e a primeira parte em Base64. adicionarConteudoArquivo envia partes adicionais em Base64 até completar o tamanho declarado. O ID retornado é usado em documento.idArquivo.

    • Carregar e proteger siglaSistema/identificacaoServico (segredos).
    • Definir timeout, retry e circuit breaker conforme o ambiente.
    • Tratar SeiSoapError e mapear mensagens para o usuário final.
    • Cache, auditoria, autorização e persistência ficam na aplicação.
    index
    mappers