TerminationService
extends BaseService
in package
Classe responsável por gerar a guia de rescisão e mensal de um empregado.
Esta classe recebe os dados, faz as validações necessárias. Captura os dados da empresa ortogada. Captura os dados do empregado. Captura os dados financeiros do empregado. Captura os dados relacionados aos débitos. Verifica se existe débitos em aberto. Gera a guia de rescisão. Gera a guia mensal.
Tags
Table of Contents
Properties
- $api : mixed
- Este atributo mantém a instância da classe Api, que é utilizada para realizar chamadas à API externa.
- $companyCnpj : string|null
- Este atributo armazena o CNPJ da empresa, informado na invocação do serviço.
- $competency : string|null
- Este atributo armazena a data de competência.
- $customerCnpj : string|null
- Este atributo armazena o CNPJ da cliente, informado na invocação do serviço.
- $employer : array<string|int, mixed>|null
- Este atributo armazena os dados relacionados à empresa, como nome, CNPJ e entre outros.
- $invoiceId : string|null
- Este atributo armazena o ID da guia.
- $paymentInvoicePdfUrl : string|null
- Este atributo armazena a URL do PDF da guia de pagamento.
- $uuid : string|null
- Este atributo armazena o UUID para contexto de logs.
- $allowMonthly : bool
- Booleano que indica se a geração da guia mensal está permitida.
- $allowTermination : bool
- Booleano que indica se a geração da guia de rescisão está permitida.
- $amount : int|null
- Valor total rescisório em formato inteiro.
- $cpf : string|null
- CPF do empregado.
- $employee : array<string|int, mixed>|null
- Dados relacionados ao empregado, como nome, CPF e entre outros.
- $employeeFinancialRecord : array<string|int, mixed>|null
- Dados financeiros do empregado.
- $employeeGroupingRecord : array<string|int, mixed>|null
- Dados relacionados aos débitos, como valores, datas e entre outros.
- $formattedAmount : string|null
- Valor total rescisório formatado com duas casas decimais.
- $nonWorkingDays : array<string|int, mixed>|null
- Dias não úteis.
- $payment : string|null
- Data de pagamento.
- $severancePay : bool|null
- Este atributo armazena um booleano que indica se o mês anterior deve ser incluído no cálculo.
- $shouldIncludePreviousMonth : bool|null
- Este atributo armazena um booleano que indica se deve considerar o valor do FGTS sobre as verbas rescisórias.
- $tag : string|null
- Tag com valor da data de emissão ou descrição informada.
- $terminationDate : DateTime|null
- Data de rescisão do empregado.
Methods
- allowMonthly() : self
- Define se deve incluir débitos mensais na geração da guia de rescisão.
- allowTermination() : self
- Define se deve incluir débitos de rescisão na geração da guia de rescisão.
- amount() : self
- Define o valor da rescisão em centavos.
- companyCnpj() : self
- Define o CNPJ da empresa.
- competency() : self
- Define o mês e ano de competência para a instância da classe.
- cpf() : self
- Define o CPF para a instância atual.
- customerCnpj() : self
- Define o CNPJ do cliente.
- formattedAmount() : void
- Formata o valor informado (em centavos) para uma string decimal com duas casas decimais, e atribui à propriedade $formattedAmount da classe.
- generate() : string
- Gera a rescisão do empregado.
- payment() : self
- Define a data de pagamento.
- tag() : self
- Define a tag para a instância da classe.
- terminationDate() : self
- Define a data de rescisão para a instância da classe.
- createApiWithCnpj() : MonthlyApi|TerminationApi
- downloadInvoice() : mixed
- Faz o download de uma fatura a partir da URL informada.
- getApiClass() : string
- Retorna a classe da API.
- getDetailedInvoiceById() : string|array<string|int, mixed>|null
- Busca a guia de detalhamento pelo ID da guia.
- getUuid() : string
- Gera um UUID aleatório no formato padrão.
- returnError() : string
- sanitizeCompetency() : string
- Sanitiza a competência recebida, ajustando-a para o formato exigido pela API.
- setEmployer() : self
- Define os dados do empregador.
- validateRequiredFields() : void
- Valida os campos obrigatórios da rescisão.
- calculatePaymentDate() : string
- Calcula a data de pagamento: terminationDate + 10 dias.
- encodeAndReturnInvoices() : string
- Codifica o conteúdo dos PDFs das faturas detalhada e de pagamento em base64, e retorna uma string JSON contendo o nome, CNPJ, guia detalhada e guia de pagamento.
- findEmployeeByCpf() : array<string|int, mixed>|null
- Busca um empregado pelo atributo CPF entre os empregados ativos, afastados e inativos.
- hasEmployeesRemunerationHistory() : bool
- Verifica se o empregado possui histórico de remuneração, utilizado para fins rescisórios.
- sanitizePayment() : string
- Sanitiza a data de pagamento recebida, ajustando-a para o formato exigido pela API.
- sanitizeTag() : string
- Sanitiza e valida uma tag conforme os requisitos da API.
- searchActiveDebitsByEmployee() : bool
- Busca os débitos ativos para o empregado selecionado.
- searchGroupingsByEmployee() : void
- Procura o agrupamento de débitos do empregado.
- setEmployee() : self
- Define os dados do empregado.
- setEmployeeFinancialRecord() : self
- Define os dados do financeiro do empregado.
- shouldIncludePreviousMonth() : void
- O resultado é atribuído ao atributo $shouldIncludePreviousMonth da classe.
- stringToDateTime() : DateTime
- Converte uma string de data em um objeto DateTime.
- validateFinancialAmountResponse() : void
- Valida o array de resposta do valor financeiro e lança uma exceção se houver mensagem de erro.
- validatePaymentDate() : void
- Valida se a data de pagamento é um dia útil.
Properties
$api
Este atributo mantém a instância da classe Api, que é utilizada para realizar chamadas à API externa.
protected
mixed
$api
= null
$companyCnpj
Este atributo armazena o CNPJ da empresa, informado na invocação do serviço.
protected
string|null
$companyCnpj
= null
$competency
Este atributo armazena a data de competência.
protected
string|null
$competency
= null
$customerCnpj
Este atributo armazena o CNPJ da cliente, informado na invocação do serviço.
protected
string|null
$customerCnpj
= null
$employer
Este atributo armazena os dados relacionados à empresa, como nome, CNPJ e entre outros.
protected
array<string|int, mixed>|null
$employer
= null
$invoiceId
Este atributo armazena o ID da guia.
protected
string|null
$invoiceId
= null
$paymentInvoicePdfUrl
Este atributo armazena a URL do PDF da guia de pagamento.
protected
string|null
$paymentInvoicePdfUrl
= null
$uuid
Este atributo armazena o UUID para contexto de logs.
protected
string|null
$uuid
= null
$allowMonthly
Booleano que indica se a geração da guia mensal está permitida.
private
bool
$allowMonthly
= true
$allowTermination
Booleano que indica se a geração da guia de rescisão está permitida.
private
bool
$allowTermination
= true
$amount
Valor total rescisório em formato inteiro.
private
int|null
$amount
= null
$cpf
CPF do empregado.
private
string|null
$cpf
= null
$employee
Dados relacionados ao empregado, como nome, CPF e entre outros.
private
array<string|int, mixed>|null
$employee
= null
$employeeFinancialRecord
Dados financeiros do empregado.
private
array<string|int, mixed>|null
$employeeFinancialRecord
= null
$employeeGroupingRecord
Dados relacionados aos débitos, como valores, datas e entre outros.
private
array<string|int, mixed>|null
$employeeGroupingRecord
= null
$formattedAmount
Valor total rescisório formatado com duas casas decimais.
private
string|null
$formattedAmount
= null
$nonWorkingDays
Dias não úteis.
private
array<string|int, mixed>|null
$nonWorkingDays
= null
$payment
Data de pagamento.
private
string|null
$payment
= null
$severancePay
Este atributo armazena um booleano que indica se o mês anterior deve ser incluído no cálculo.
private
bool|null
$severancePay
= true
consideraValorFgtsSobreVerbasRescisorias => TRUE
$shouldIncludePreviousMonth
Este atributo armazena um booleano que indica se deve considerar o valor do FGTS sobre as verbas rescisórias.
private
bool|null
$shouldIncludePreviousMonth
= null
consideraValorFgtsSobreMesAnteriorRescisao => validar data de demissão
$tag
Tag com valor da data de emissão ou descrição informada.
private
string|null
$tag
= null
$terminationDate
Data de rescisão do empregado.
private
DateTime|null
$terminationDate
= null
Methods
allowMonthly()
Define se deve incluir débitos mensais na geração da guia de rescisão.
public
allowMonthly(bool $allowMonthly) : self
Este método permite a inclusão de débitos mensais ao gerar a guia de rescisão
Parameters
- $allowMonthly : bool
-
Indica se os débitos mensais devem ser incluídos.
Return values
self —Retorna a própria instância da classe.
allowTermination()
Define se deve incluir débitos de rescisão na geração da guia de rescisão.
public
allowTermination(bool $allowTermination) : self
Este método permite a inclusão de débitos de rescisão ao gerar a guia de rescisão.
Parameters
- $allowTermination : bool
-
Indica se os débitos de rescisão devem ser incluídos.
Return values
self —Retorna a própria instância da classe.
amount()
Define o valor da rescisão em centavos.
public
amount(int $amount) : self
Este método recebe o valor da base da rescisão, que deve ser um inteiro representando centavos, e formata o valor para uso posterior.
Parameters
- $amount : int
-
Valor da rescisão em centavos.
Tags
Return values
self —Retorna a instância atual para encadeamento de métodos.
companyCnpj()
Define o CNPJ da empresa.
public
companyCnpj(string $cnpj) : self
Este método recebe o CNPJ da empresa e o formata, além de criar a instância da classe Api.
Parameters
- $cnpj : string
-
O CNPJ da empresa.
Return values
self —A própria instância da classe.
competency()
Define o mês e ano de competência para a instância da classe.
public
competency(string $competency) : self
O parâmetro deve ser informado no formato "mes/ano", por exemplo "04/2025". O valor informado será sanitizado pelo método sanitizeCompetency para se adequar ao padrão exigido pela API.
Parameters
- $competency : string
-
Mês e ano de competência no formato "mes/ano".
Return values
self —Retorna a própria instância para permitir encadeamento de métodos.
cpf()
Define o CPF para a instância atual.
public
cpf(string $cpf) : self
Este método recebe um CPF, normaliza-o para conter apenas dígitos e o armazena na propriedade interna da classe, retornando a própria instância.
Parameters
- $cpf : string
-
O CPF a ser definido.
Return values
self —A própria instância da classe.
customerCnpj()
Define o CNPJ do cliente.
public
customerCnpj(string $cnpj) : self
Este método recebe o CNPJ do cliente e o formata. Além disso, a instância da classe Api é (re)criada utilizando o CNPJ da empresa e o CNPJ do cliente.
Parameters
- $cnpj : string
-
O CNPJ do cliente.
Return values
self —A própria instância da classe.
formattedAmount()
Formata o valor informado (em centavos) para uma string decimal com duas casas decimais, e atribui à propriedade $formattedAmount da classe.
public
formattedAmount(int $amount) : void
Este método é chamado pelo método amount para representar o valor monetário.
Parameters
- $amount : int
-
Valor em centavos a ser formatado.
generate()
Gera a rescisão do empregado.
public
generate() : string
Este método orquestra todo o processo de geração de rescisão, desde a validação dos campos, busca de dados do empregador e empregado, verificação de histórico financeiro, cálculo de valores, busca de débitos ativos e geração das guias (detalhada e de pagamento).
Tags
Return values
string —JSON contendo os dados do empregador, empregado e os PDFs das guias em base64.
payment()
Define a data de pagamento.
public
payment(string $payment) : self
Parameters
- $payment : string
-
Data de pagamento no formato "DD/MM/YYYY".
Return values
selftag()
Define a tag para a instância da classe.
public
tag([string|null $tag = null ]) : self
Observação: O comprimento máximo permitido para a tag é de 32 caracteres.
Parameters
- $tag : string|null = null
-
Valor da tag a ser atribuída, ou nulo para usar a data de emissão.
Return values
selfterminationDate()
Define a data de rescisão para a instância da classe.
public
terminationDate(DateTime $terminationDate) : self
O parâmetro deve ser informado no formato "dia/mes/ano", por exemplo "20/04/2025". O valor informado será sanitizado e a data de pagamento será calculada automaticamente como 10 dias corridos após a data de rescisão, a menos que seja definida manualmente através do método payment().
Parameters
- $terminationDate : DateTime
-
Data de rescisão informada no formato "DD/MM/YYYY" ou objeto DateTime.
Return values
self —Retorna a própria instância para permitir encadeamento de métodos.
createApiWithCnpj()
protected
createApiWithCnpj(string $companyCnpj, string $customerCnpj) : MonthlyApi|TerminationApi
Parameters
- $companyCnpj : string
-
O CNPJ da empresa.
- $customerCnpj : string
-
O CNPJ do cliente utilizado em conjunto com o CNPJ da empresa.
Return values
MonthlyApi|TerminationApi —A instância da classe Api configurada com o cookie de sessão.
downloadInvoice()
Faz o download de uma fatura a partir da URL informada.
protected
downloadInvoice(string $invoiceUrl) : mixed
Parameters
- $invoiceUrl : string
-
URL da fatura a ser baixada.
Return values
mixed —Conteúdo da fatura detalhada obtida pelo download.
getApiClass()
Retorna a classe da API.
protected
getApiClass() : string
Return values
string —A classe da API.
getDetailedInvoiceById()
Busca a guia de detalhamento pelo ID da guia.
protected
getDetailedInvoiceById(mixed $invoiceId) : string|array<string|int, mixed>|null
Caso a guia detalhada seja encontrada, retorna o conteúdo do arquivo através da URL. Se não for possível gerar ou encontrar a guia detalhada, lança uma exceção.
Parameters
- $invoiceId : mixed
-
ID da guia para busca do detalhamento.
Tags
Return values
string|array<string|int, mixed>|null —Conteúdo do arquivo detalhado ou nulo.
getUuid()
Gera um UUID aleatório no formato padrão.
protected
getUuid() : string
Este método é utilizado apenas para cumprir um requisito da API, que exige o envio de uma string UUID em algumas requisições. O UUID gerado não possui relação com outros dados do sistema.
Return values
string —UUID gerado aleatoriamente.
returnError()
protected
returnError(int $code, string $message) : string
Parameters
- $code : int
- $message : string
Return values
stringsanitizeCompetency()
Sanitiza a competência recebida, ajustando-a para o formato exigido pela API.
protected
sanitizeCompetency(string $competency) : string
Este método recebe uma string representando a competência no formato 'mes/ano', valida e converte para o formato 'ano + mes' utilizado pela API. Trata casos especiais como 13º salário (décimo terceiro).
Parameters
- $competency : string
-
Data de competência no formato 'MM/YYYY'.
Tags
Return values
string —Competência ajustada no formato 'YYYYMM' ou '13YYYY' para décimo terceiro.
setEmployer()
Define os dados do empregador.
protected
setEmployer(array<string|int, mixed> $employer) : self
Recebe um array com os dados do empregador e atribui ao atributo da classe.
Parameters
- $employer : array<string|int, mixed>
-
Array contendo os dados do empregador.
Return values
selfvalidateRequiredFields()
Valida os campos obrigatórios da rescisão.
protected
validateRequiredFields() : void
Esta função verifica se os parâmetros essenciais para o processamento da rescisão estão preenchidos. Caso algum dos campos obrigatórios esteja ausente, uma exceção InvalidArgumentException será lançada informando qual parâmetro está faltando e, quando aplicável, o formato esperado.
Tags
calculatePaymentDate()
Calcula a data de pagamento: terminationDate + 10 dias.
private
calculatePaymentDate() : string
Se cair em dia não útil, avança para o próximo dia útil.
Return values
string —Data de pagamento no formato Y-m-d.
encodeAndReturnInvoices()
Codifica o conteúdo dos PDFs das faturas detalhada e de pagamento em base64, e retorna uma string JSON contendo o nome, CNPJ, guia detalhada e guia de pagamento.
private
encodeAndReturnInvoices(string $detailedInvoicePdfContent, string $paymentInvoicePdfContent) : string
Parameters
- $detailedInvoicePdfContent : string
-
Conteúdo do PDF da fatura detalhada.
- $paymentInvoicePdfContent : string
-
Conteúdo do PDF da fatura de pagamento.
Return values
string —JSON com os dados do empregador, empregado e guias em base64.
findEmployeeByCpf()
Busca um empregado pelo atributo CPF entre os empregados ativos, afastados e inativos.
private
findEmployeeByCpf(string $cpf) : array<string|int, mixed>|null
Parameters
- $cpf : string
-
O CPF do empregado a ser buscado.
Return values
array<string|int, mixed>|null —Retorna o empregado encontrado ou null se não existir.
hasEmployeesRemunerationHistory()
Verifica se o empregado possui histórico de remuneração, utilizado para fins rescisórios.
private
hasEmployeesRemunerationHistory(string $cpf) : bool
Parameters
- $cpf : string
-
CPF do empregado.
Return values
bool —Retorna true se houver histórico, false se não houver.
sanitizePayment()
Sanitiza a data de pagamento recebida, ajustando-a para o formato exigido pela API.
private
sanitizePayment(string $payment) : string
Este método recebe uma string representando a data de pagamento no formato 'dia/mes/ano', valida e converte para o formato 'ano + mes + dia' utilizado pela API.
Parameters
- $payment : string
-
Data de pagamento no formato 'DD/MM/YYYY'.
Tags
Return values
string —Data de pagamento ajustada no formato 'YYYY/MM/DD'.
sanitizeTag()
Sanitiza e valida uma tag conforme os requisitos da API.
private
sanitizeTag(string $tag) : string
Este método recebe uma string representando uma tag, converte para maiúsculas, remove caracteres inválidos (permitindo apenas A-Z, 0-9, $, %, *, +, -, ., :, / e espaço), e verifica se o comprimento excede 32 caracteres. Caso exceda, lança uma InvalidArgumentException.
Parameters
- $tag : string
-
A tag a ser sanitizada e validada.
Tags
Return values
string —A tag sanitizada.
searchActiveDebitsByEmployee()
Busca os débitos ativos para o empregado selecionado.
private
searchActiveDebitsByEmployee(array<string|int, mixed> $employee) : bool
Este método limpa o carrinho de débitos, obtém os débitos ativos do empregado para a competência atual e, caso não existam guias relacionadas, cria um novo carrinho de débitos para o empregado. Se o carrinho criado possuir apenas um débito, retorna o agrupamento correspondente.
Aqui buscamos os débitos existentes para o empregado selecionado, posteriormente é retornado o carrinho com o agrupamento.
Parameters
- $employee : array<string|int, mixed>
-
Empregado para o qual os débitos serão buscados.
Return values
bool —Retorna true se encontrar débitos, false caso contrário.
searchGroupingsByEmployee()
Procura o agrupamento de débitos do empregado.
private
searchGroupingsByEmployee(array<string|int, mixed> $employeeGroupingRecord) : void
Aqui procuramos o agrupamento de débitos do empregado, caso encontrado, é retornado o agrupamento, caso contrário é emitida a nova guia.
Caso exista apenas um agrupamento, emite uma nova guia utilizando a API. Se a guia for gerada com sucesso, armazena a URL do PDF da guia.
Parameters
- $employeeGroupingRecord : array<string|int, mixed>
-
Registro contendo informações dos agrupamentos do empregado.
Tags
setEmployee()
Define os dados do empregado.
private
setEmployee(array<string|int, mixed> $employee) : self
Recebe um array com os dados do empregado e atribui ao atributo da classe.
Parameters
- $employee : array<string|int, mixed>
-
Array contendo os dados do empregado.
Return values
selfsetEmployeeFinancialRecord()
Define os dados do financeiro do empregado.
private
setEmployeeFinancialRecord(array<string|int, mixed> $employeeFinancialRecord) : self
Recebe um array com os dados financeiros do empregado e atribui ao atributo da classe.
Parameters
- $employeeFinancialRecord : array<string|int, mixed>
-
Array contendo os dados financeiros do empregado.
Return values
selfshouldIncludePreviousMonth()
O resultado é atribuído ao atributo $shouldIncludePreviousMonth da classe.
private
shouldIncludePreviousMonth() : void
Busca no atributo da classe os dados financeiros do empregado. Caso a data de desligamento esteja entre os dias 1º e 10º, retorna verdadeiro; caso seja do dia 11º em diante, retorna falso. O resultado é atribuído ao atributo $severancePay da classe. Essa informação será utilizada posteriormente para emissão da guia de rescisão, a fim de incluir o mês anterior nos cálculos.
stringToDateTime()
Converte uma string de data em um objeto DateTime.
private
stringToDateTime(string $date[, string $format = 'd/m/Y' ]) : DateTime
Este método recebe uma string representando uma data e um formato específico, e retorna um objeto DateTime configurado com o timezone 'America/Sao_Paulo'.
Formatos aceitos:
- d/m/Y (ex: 07/01/2026) - Data completa
- d-m-Y (ex: 07-01-2026) - Data completa com hífen
- Y-m-d (ex: 2026-01-07) - Data ISO
- m/Y (ex: 12/2025) - Apenas mês/ano (retorna primeiro dia)
- Y-m (ex: 2025-12) - Apenas ano-mês (retorna primeiro dia)
Parameters
- $date : string
-
Data no formato string.
- $format : string = 'd/m/Y'
-
Formato da data de entrada.
Tags
Return values
DateTime —Objeto DateTime configurado.
validateFinancialAmountResponse()
Valida o array de resposta do valor financeiro e lança uma exceção se houver mensagem de erro.
private
validateFinancialAmountResponse(array<string|int, mixed> $response) : void
Verifica se a chave 'mensagem' existe e é um array. Se sim, obtém a primeira mensagem, converte a codificação de ISO-8859-1 para UTF-8, remove o prefixo 'FIC0080 - ' e lança uma InvalidArgumentException com a mensagem processada e o código de status 400.
Parameters
- $response : array<string|int, mixed>
-
O array de resposta a ser validado.
Tags
validatePaymentDate()
Valida se a data de pagamento é um dia útil.
private
validatePaymentDate(string $paymentDate) : void
Parameters
- $paymentDate : string
-
Data de pagamento no formato Y-m-d.