/*
* This file is part of Treeunfe DFe.
*
* Treeunfe DFe is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Treeunfe DFe is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Treeunfe DFe. If not, see .
*/
import { XmlBuilder, Environment, Utility, BaseNFSe } from '@treeunfe/shared';
import { GerarConsultaImpl, NFSeParametrosMunicipaisServiceImpl, SaveFilesImpl } from '@treeunfe/types/interfaces';
import {
NFSeAlteracaoBeneficioMunicipal,
NFSeAlteracaoResponse,
NFSeAlteracaoRetencoes,
NFSeConsultaAliquota,
NFSeConsultaAliquotaResponse,
NFSeConsultaBeneficio,
NFSeConsultaBeneficioResponse,
NFSeConsultaConvenio,
NFSeConsultaConvenioResponse,
NFSeConsultaHistoricoAliquotas,
NFSeConsultaRegimesEspeciais,
NFSeConsultaRegimesEspeciaisResponse
} from '@treeunfe/types';
import { AxiosInstance } from 'axios';
class NFSeParametrosMunicipaisService extends BaseNFSe implements NFSeParametrosMunicipaisServiceImpl {
constructor(environment: Environment, utility: Utility, xmlBuilder: XmlBuilder, axios: AxiosInstance, saveFiles: SaveFilesImpl, gerarConsulta: GerarConsultaImpl) {
super(environment, utility, xmlBuilder, 'NFSe_ParametrosMunicipais', axios, saveFiles, gerarConsulta);
}
protected prepararDados(data?: any): any {
// Para GET requests, não precisa preparar dados
if (this.getHttpMethod() === 'GET') {
return null;
}
// Para POST requests (alterações), retorna o body JSON
if (data && 'paramXmlGZipB64' in data) {
return {
tipoAmbiente: data.tipoAmbiente,
paramXmlGZipB64: data.paramXmlGZipB64
};
}
return null;
}
protected getHttpMethod(): 'GET' | 'POST' | 'PUT' | 'DELETE' {
// Alterações são POST, consultas são GET
if (this.metodo.includes('Alterar')) {
return 'POST';
}
return 'GET';
}
protected getUrlPath(data?: any): string {
if (!data) return '';
// Alteração de benefício municipal: /{codigoMunicipio}/beneficiomunicipal/{idManut}
if (this.metodo.includes('AlterarBeneficio')) {
return `/${data.codigoMunicipio}/beneficiomunicipal/${data.idManut}`;
}
// Alteração de retenções: /{codigoMunicipio}/retencoes/{idManut}
if (this.metodo.includes('AlterarRetencoes')) {
return `/${data.codigoMunicipio}/retencoes/${data.idManut}`;
}
// Consulta de alíquota: /{codigoMunicipio}/{codigoServico}/{competencia}/aliquota
if (this.metodo.includes('ConsultarAliquota') && 'codigoServico' in data && 'competencia' in data) {
const competencia = encodeURIComponent(data.competencia);
return `/${data.codigoMunicipio}/${data.codigoServico}/${competencia}/aliquota`;
}
// Consulta de histórico de alíquotas: /{codigoMunicipio}/{codigoServico}/historicoaliquotas
if (this.metodo.includes('ConsultarHistoricoAliquotas')) {
return `/${data.codigoMunicipio}/${data.codigoServico}/historicoaliquotas`;
}
// Consulta de benefício: /{codigoMunicipio}/{numeroBeneficio}/{competencia}/beneficio
if (this.metodo.includes('ConsultarBeneficio')) {
const competencia = encodeURIComponent(data.competencia);
return `/${data.codigoMunicipio}/${data.numeroBeneficio}/${competencia}/beneficio`;
}
// Consulta de convênio: /{codigoMunicipio}/convenio
if (this.metodo.includes('ConsultarConvenio')) {
return `/${data.codigoMunicipio}/convenio`;
}
// Consulta de regimes especiais: /{codigoMunicipio}/{codigoServico}/{competencia}/regimes_especiais
if (this.metodo.includes('ConsultarRegimesEspeciais')) {
const competencia = encodeURIComponent(data.competencia);
return `/${data.codigoMunicipio}/${data.codigoServico}/${competencia}/regimes_especiais`;
}
return '';
}
protected getWebServiceUrl(): string {
return this.utility.getWebServiceUrlNFSe('NFSe_ParametrosMunicipais');
}
async ConsultarAliquota(data: NFSeConsultaAliquota): Promise {
this.metodo = 'NFSe_ConsultarAliquota';
return await super.Exec(data) as NFSeConsultaAliquotaResponse;
}
async ConsultarHistoricoAliquotas(data: NFSeConsultaHistoricoAliquotas): Promise {
this.metodo = 'NFSe_ConsultarHistoricoAliquotas';
return await super.Exec(data) as NFSeConsultaAliquotaResponse;
}
async ConsultarBeneficio(data: NFSeConsultaBeneficio): Promise {
this.metodo = 'NFSe_ConsultarBeneficio';
return await super.Exec(data) as NFSeConsultaBeneficioResponse;
}
async ConsultarConvenio(data: NFSeConsultaConvenio): Promise {
this.metodo = 'NFSe_ConsultarConvenio';
return await super.Exec(data) as NFSeConsultaConvenioResponse;
}
async ConsultarRegimesEspeciais(data: NFSeConsultaRegimesEspeciais): Promise {
this.metodo = 'NFSe_ConsultarRegimesEspeciais';
return await super.Exec(data) as NFSeConsultaRegimesEspeciaisResponse;
}
async AlterarBeneficioMunicipal(data: NFSeAlteracaoBeneficioMunicipal): Promise {
this.metodo = 'NFSe_AlterarBeneficioMunicipal';
const response = await super.Exec(data);
return {
sucesso: true,
mensagem: response.mensagem
};
}
async AlterarRetencoes(data: NFSeAlteracaoRetencoes): Promise {
this.metodo = 'NFSe_AlterarRetencoes';
const response = await super.Exec(data);
return {
sucesso: true,
mensagem: response.mensagem
};
}
}
export default NFSeParametrosMunicipaisService;