Skip to content

eSocial — Eventos XML

O módulo eSocial (backend/src/esocial/) gera, persiste e transmite os eventos XML obrigatórios ao ambiente eSocial da Receita Federal, integrados com o módulo HR.

Visão Geral

CaracterísticaDetalhe
Módulo backendbackend/src/esocial/
Schema de logEsocialEventbackend/src/esocial/esocial-event.schema.ts
PermissãoAdmin ou Superadmin
Rota principal/t/:slug/admin/esocial

Eventos Implementados

CódigoNomeGatilho
S-2200Admissão de TrabalhadorCadastro de Employee (CLT)
S-1200Remuneração MensalAprovação de PayrollRun
S-2299DesligamentoterminateEmployee()

Os tipos estão enumerados em EsocialEventType em esocial-event.schema.ts.

Schema EsocialEvent

CampoTipoDescrição
tenantObjectIdIsolamento multi-tenant
employeeIdObjectIdReferência ao Employee
eventTypeS-2200 | S-1200 | S-2299
period{ month, year }Presente apenas em S-1200
xmlPayloadstringXML assinado completo — retido por 5 anos (obrigação RFB)
statusenumpending → sent → authorized | rejected
protocoloRecibostringNúmero de protocolo retornado pelo WS eSocial em caso de sucesso
errorCodestringCódigo de erro 4-dígitos em caso de rejected
errorMessagestringMensagem de erro legível
sentAtDateTimestamp do envio ao webservice

Índices compostos: (tenant, employeeId), (tenant, eventType, status), (tenant, period.year, period.month).

Ambiente (homologação vs. produção)

O campo environment aceito nos endpoints de envio controla o endpoint do webservice eSocial:

ValorURL alvo
homologacao (default)https://webwso2ihm.esocial.gov.br/servicos/
producaohttps://webwso2.esocial.gov.br/servicos/

O valor padrão é sempre homologacao — o chamador deve passar explicitamente "environment": "producao" para transmissões reais. Isso evita envios acidentais ao ambiente produtivo durante desenvolvimento.

Serviços

ServiçoResponsabilidadeArquivo
EsocialServiceOrquestrador — carrega Employee/PayrollRun/Lines, chama builder, persiste EsocialEvent, despacha via transportesocial.service.ts
EsocialEventServiceConstrutores XML — buildS2200(), buildS1200(), buildS2299()esocial-event.service.ts
EsocialTransportServiceHTTP POST ao webservice eSocial; retorna { protocoloRecibo }esocial-transport.service.ts

Fluxo de envio

Controller

EsocialService.send*()
    ↓ carrega Employee / PayrollRun / PayrollLines
EsocialEventService.build*()  → rawXml

eventModel.create() com status = 'pending'

EsocialTransportService.send()
    ↓ sucesso               ↓ falha
status = 'authorized'    status = 'rejected'
protocoloRecibo          errorCode + errorMessage

Em caso de falha no transporte, o evento permanece no banco com status: 'rejected' para reenvio manual. O erro é relançado ao chamador.

Endpoints

MétodoRotaDescrição
POST/t/:slug/admin/esocial/send/admission/:employeeIdGera e envia S-2200
POST/t/:slug/admin/esocial/send/monthly/:payrollRunIdGera e envia S-1200 para todas as linhas da folha
POST/t/:slug/admin/esocial/send/termination/:employeeIdGera e envia S-2299
GET/t/:slug/admin/esocial/eventsLista eventos com filtros

Body de envio (S-2200 e S-2299)

json
{
  "cnpjEmpregador": "12345678000100",
  "environment": "homologacao"
}

Body de envio (S-1200)

json
{
  "cnpjEmpregador": "12345678000100",
  "environment": "homologacao"
}

O cnpjEmpregador deve ser o CNPJ da filial do funcionário (ou do tenant principal). O sistema não resolve o CNPJ automaticamente — o chamador deve passá-lo.

Body de desligamento (S-2299)

json
{
  "cnpjEmpregador": "12345678000100",
  "dtDeslig": "2026-05-31",
  "mtvDeslig": "01",
  "dtProjFimAPI": "2026-06-15",
  "pensaoAlim": "N",
  "environment": "homologacao"
}
CampoDescrição
dtDesligData do desligamento YYYY-MM-DD
mtvDesligCódigo do motivo (tabela eSocial: 01 = rescisão sem justa causa, 02 = pedido de demissão, etc.)
dtProjFimAPIData projetada fim do aviso prévio indenizado
pensaoAlimS/N — indica se há pensão alimentícia

Query params (GET events)

ParâmetroDescrição
employeeIdFiltrar por funcionário
eventTypeS-2200 | S-1200 | S-2299
statuspending | sent | authorized | rejected
pagePágina (default: 1)
limitItens por página (max: 100, default: 20)

Dados obrigatórios no Employee para eSocial

CampoPor que é necessário
pisNitIdentificador do trabalhador no eSocial
cboCupationCódigo Brasileiro de Ocupações
esocialCategoryCategoria do trabalhador (ex: 101 = empregado geral)
admissionDateData de admissão (S-2200)
cpf ou cpfEncryptedCPF do trabalhador

Campos ausentes causam erro de validação no EsocialEventService ao tentar construir o XML.

Retenção dos XMLs

EsocialEvent.xmlPayload armazena o XML completo assinado. A Receita Federal / SEFAZ exige que o transmissor guarde os XMLs por 5 anos. Não exclua registros EsocialEvent — configure a RetentionPolicy em LGPD com retentionYears: 5 para esta coleção.

Relacionados

  • HCM — Recursos Humanos — Módulo HR que fornece Employee e PayrollRun
  • LGPD — Política de retenção de 5 anos para XMLs eSocial
  • Security PII — CPF do trabalhador nos XMLs é decriptado sob demanda

Lançado sob a licença MIT.