Skip to content

Commit 3211f25

Browse files
authored
Merge pull request #45 from lucasmoraes804/feature/fiorilli
Fiorilli Layout Nacional e Mapeamento XML em EventoServicoNFSe
2 parents b46e3b8 + 012ca1a commit 3211f25

21 files changed

Lines changed: 1631 additions & 8 deletions

src/OpenAC.Net.NFSe.Nacional.Test/.env.example

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,35 @@ NfseModeloNovo2.CertificadoPath=C:\certificados\seu_certificado_novo2.pfx
118118
# Senha do certificado
119119
NfseModeloNovo2.CertificadoSenha=sua_senha_aqui
120120

121+
# =============================================================================
122+
# PROVEDOR FIORILLI - Webservice SOAP (layout Nacional v1.00)
123+
# =============================================================================
124+
125+
# Configuração para testes de emissão pelo provedor Fiorilli.
126+
# Usar: SetupOpenNFSeNacional.ConfigurarFiorilli(openNFSeNacional)
127+
# Testes: TestEmissaoFiorilli.EmissaoNFSeFiorilli / EmissaoNFSeFiorilliSemTomador
128+
#
129+
# OBS: o município Fiorilli NÃO está no arquivo embarcado Municipios.nfse; ele é
130+
# registrado em tempo de execução pelo setup usando o código e o endpoint abaixo.
131+
132+
# Código IBGE do município atendido pela Fiorilli (7 dígitos)
133+
Fiorilli.CodMunIbge=3550308
134+
135+
# Tipo de Inscrição Federal: 1=CPF, 2=CNPJ
136+
Fiorilli.TipoInscricaoFederal=2
137+
138+
# CNPJ ou CPF do prestador (apenas números)
139+
Fiorilli.InscricaoFederal=12345678000100
140+
141+
# Inscrição Municipal do prestador (obrigatória para cancelamento na Fiorilli)
142+
Fiorilli.InscricaoMunicipal=1234567
143+
144+
# Caminho completo do certificado digital (.pfx)
145+
Fiorilli.CertificadoPath=C:\certificados\seu_certificado.pfx
146+
147+
# Senha do certificado digital
148+
Fiorilli.CertificadoSenha=sua_senha_aqui
149+
121150
# =============================================================================
122151
# TOMADORES DE SERVIÇO
123152
# =============================================================================
@@ -257,6 +286,7 @@ Tomador4.CodMunicipio=9999999
257286
# ✓ ConfiguracaoModeloAtual2: v1.00 (Advocacia)
258287
# ✓ ConfiguracaoModeloNovoCenario1: v1.01 (Geral)
259288
# ✓ ConfiguracaoModeloNovoCenario2: v1.01 (IBS/CBS - Reforma Tributária)
289+
# ✓ ConfigurarFiorilli: v1.00 (provedor Fiorilli - webservice SOAP)
260290
#
261291
# 7. TOMADORES ESTRANGEIROS:
262292
# ✓ Identificados por CodMunicipio=9999999

src/OpenAC.Net.NFSe.Nacional.Test/OpenAC.Net.NFSe.Nacional.Test.csproj

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
<IsTestProject>true</IsTestProject>
1010
</PropertyGroup>
1111

12-
<ItemGroup>
13-
<None Remove=".env" />
14-
</ItemGroup>
15-
1612
<ItemGroup>
1713
<PackageReference Include="coverlet.collector" Version="10.0.1">
1814
<PrivateAssets>all</PrivateAssets>
@@ -33,4 +29,15 @@
3329
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
3430
</ItemGroup>
3531

32+
<ItemGroup>
33+
<!-- Copia o .env (quando existir) para o diretório de saída, pois o setup dos testes
34+
o carrega de AppContext.BaseDirectory (bin\Debug\<tfm>\). Sem isso, o arquivo criado
35+
na raiz do projeto não é encontrado em tempo de execução.
36+
O Remove evita item duplicado caso o glob padrão do SDK já inclua o .env. -->
37+
<None Remove=".env" />
38+
<None Include=".env" Condition="Exists('.env')">
39+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
40+
</None>
41+
</ItemGroup>
42+
3643
</Project>

src/OpenAC.Net.NFSe.Nacional.Test/SetupOpenNFSeNacional.cs

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
using DotNetEnv;
1+
using System.Net;
2+
using DotNetEnv;
3+
using OpenAC.Net.DFe.Core.Collection;
4+
using OpenAC.Net.DFe.Core.Common;
25
using OpenAC.Net.DFe.Core.Extensions;
36
using OpenAC.Net.NFSe.Nacional.Common.Model;
47
using OpenAC.Net.NFSe.Nacional.Common.Types;
8+
using OpenAC.Net.NFSe.Nacional.Webservice;
59

610
namespace OpenAC.Net.NFSe.Nacional.Test;
711

@@ -189,6 +193,80 @@ private static void ConfigurarBase(
189193
openNFSeNacional.Configuracoes.Arquivos.PathSchemas = pathSchemas;
190194
}
191195

196+
/// <summary>
197+
/// Configuração para o provedor Fiorilli (SOAP), versão 1.00.
198+
/// Lê as variáveis com prefixo "Fiorilli" do arquivo .env e registra o município
199+
/// no <see cref="NFSeServiceManager"/> em tempo de execução (o recurso embarcado não traz Fiorilli).
200+
/// </summary>
201+
public static void ConfigurarFiorilli(
202+
OpenNFSeNacional openNFSeNacional,
203+
string numDps = "1",
204+
string serieDps = "1",
205+
string numEvento = "1")
206+
{
207+
NumDPS = numDps;
208+
SerieDPS = serieDps;
209+
NumEvento = numEvento;
210+
211+
CodMunIBGE = GetEnvOrThrow("Fiorilli.CodMunIbge");
212+
TipoInscricaoFederal = int.Parse(GetEnvOrThrow("Fiorilli.TipoInscricaoFederal"));
213+
InscricaoFederal = GetEnvOrThrow("Fiorilli.InscricaoFederal");
214+
InscricaoMunicipal = GetEnvOrThrow("Fiorilli.InscricaoMunicipal");
215+
216+
var endpoint = Env.GetString("Fiorilli.Endpoint");
217+
if (string.IsNullOrWhiteSpace(endpoint))
218+
endpoint = "http://fi1.fiorilli.com.br:5663/IssWeb-ejb/IssWebWSNacional/IssWebWSNacionalPortType";
219+
220+
var certificadoPath = GetEnvOrThrow("Fiorilli.CertificadoPath");
221+
var certificadoSenha = GetEnvOrThrow("Fiorilli.CertificadoSenha");
222+
var pathSalvar = GetEnvOrThrow("Geral.PathSalvar");
223+
224+
RegistrarMunicipioFiorilli(int.Parse(CodMunIBGE), endpoint);
225+
226+
var pathSchemas = Path.Combine(AppContext.BaseDirectory, "Schemas", VersaoNFSe.Ve101.GetDFeValue());
227+
openNFSeNacional.Configuracoes.Geral.Versao = VersaoNFSe.Ve101;
228+
openNFSeNacional.Configuracoes.Certificados.CertificadoBytes = File.ReadAllBytes(certificadoPath);
229+
openNFSeNacional.Configuracoes.Certificados.Senha = certificadoSenha;
230+
openNFSeNacional.Configuracoes.Geral.Salvar = true;
231+
openNFSeNacional.Configuracoes.Geral.RetirarAcentos = true;
232+
openNFSeNacional.Configuracoes.Geral.RetirarEspacos = true;
233+
openNFSeNacional.Configuracoes.Arquivos.PathSalvar = pathSalvar;
234+
openNFSeNacional.Configuracoes.Arquivos.PathSchemas = pathSchemas;
235+
openNFSeNacional.Configuracoes.WebServices.Ambiente = DFeTipoAmbiente.Homologacao;
236+
openNFSeNacional.Configuracoes.WebServices.CodigoMunicipio = int.Parse(CodMunIBGE);
237+
openNFSeNacional.Configuracoes.WebServices.InscricaoMunicipal = InscricaoMunicipal;
238+
openNFSeNacional.Configuracoes.WebServices.Protocolos = SecurityProtocolType.Tls12;
239+
}
240+
241+
/// <summary>
242+
/// Registra (uma única vez) o município Fiorilli no <see cref="NFSeServiceManager"/>,
243+
/// apontando o endpoint SOAP em <see cref="TipoUrl.Enviar"/> para o ambiente de homologação.
244+
/// </summary>
245+
private static void RegistrarMunicipioFiorilli(int codigoMunicipio, string endpoint)
246+
{
247+
var services = NFSeServiceManager.Instance.Services;
248+
if (services.Webservices.Any(x => x.Codigo == codigoMunicipio)) return;
249+
250+
services.Webservices.Add(new NFSeServiceInfo
251+
{
252+
Codigo = codigoMunicipio,
253+
Provider = NFSeProvider.Fiorilli,
254+
Nome = "Fiorilli (Teste)",
255+
UF = DFeSiglaUF.SP,
256+
Ambientes = new DFeCollection<NFSeEnvironment>
257+
{
258+
new NFSeEnvironment
259+
{
260+
Ambiente = DFeTipoAmbiente.Homologacao,
261+
Enderecos = new Dictionary<TipoUrl, string>
262+
{
263+
{ TipoUrl.Enviar, endpoint }
264+
}
265+
}
266+
}
267+
});
268+
}
269+
192270
private static string GetEnvOrThrow(string key)
193271
{
194272
var value = Env.GetString(key);

0 commit comments

Comments
 (0)