Skip to content

Commit 4035460

Browse files
authored
Merge pull request #317 from marcianobandeira/fintel
FintelISS - Novo Provedor de Ourinhos SP
2 parents 82f88d9 + 73d0f7b commit 4035460

File tree

7 files changed

+2302
-23
lines changed

7 files changed

+2302
-23
lines changed

src/OpenAC.Net.NFSe/Commom/Types/NFSeProvider.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public enum NFSeProvider : sbyte
4040
Abaco = 0,
4141

4242
ABase = 39,
43-
43+
4444
Agili = 49,
4545

4646
AssessorPublico = 33,
@@ -138,5 +138,6 @@ public enum NFSeProvider : sbyte
138138
[Description("ISS Integra - Nobe Sistemas")]
139139
ISSIntegra = 47,
140140

141-
ISSRecife = 48
141+
ISSRecife = 48,
142+
FintelISS = 51,
142143
}
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
using System.Security.Cryptography.X509Certificates;
2+
using System.ServiceModel.Channels;
3+
using System.Text;
4+
using System.Xml.Linq;
5+
using OpenAC.Net.Core.Extensions;
6+
using OpenAC.Net.NFSe.Commom;
7+
using OpenAC.Net.NFSe.Commom.Client;
8+
using OpenAC.Net.NFSe.Commom.Interface;
9+
using OpenAC.Net.NFSe.Commom.Types;
10+
11+
namespace OpenAC.Net.NFSe.Providers;
12+
13+
internal sealed class FintelISS204ServiceClient : NFSeSoapServiceClient, IServiceClient
14+
{
15+
public FintelISS204ServiceClient(ProviderBase provider, TipoUrl tipoUrl, X509Certificate2? certificado) : base(provider, tipoUrl, certificado, SoapVersion.Soap11)
16+
{
17+
}
18+
19+
private string Execute(string soapAction, string message, string[] responseTag)
20+
{
21+
return Execute(soapAction, message, "", responseTag, ["xmlns:nfse=\"http://nfse.abrasf.org.br\""]);
22+
}
23+
24+
public string CancelarNFSe(string? cabec, string msg)
25+
{
26+
var message = new StringBuilder();
27+
message.Append("<nfse:CancelarNfse>");
28+
message.Append("<nfseCabecMsg>");
29+
message.AppendCData(EmpacotaXml(cabec));
30+
message.Append("</nfseCabecMsg>");
31+
message.Append("<nfseDadosMsg>");
32+
message.AppendCData(EmpacotaXml(msg));
33+
message.Append("</nfseDadosMsg>");
34+
message.Append("</nfse:CancelarNfse>");
35+
return this.Execute("http://nfse.abrasf.org.br/CancelarNfse", message.ToString(), ["CancelarNfseResponse"]);
36+
}
37+
38+
public string CancelarNFSeLote(string? cabec, string msg)
39+
{
40+
throw new System.NotImplementedException();
41+
}
42+
43+
public string ConsultarLoteRps(string? cabec, string msg)
44+
{
45+
// metodo nao testado
46+
var message = new StringBuilder();
47+
message.Append("<nfse:ConsultarLoteRps>");
48+
49+
message.Append("<nfseCabecMsg>");
50+
message.AppendCData(EmpacotaXml(cabec));
51+
message.Append("</nfseCabecMsg>");
52+
message.Append("<nfseDadosMsg>");
53+
message.AppendCData(EmpacotaXml(msg));
54+
message.Append("</nfseDadosMsg>");
55+
56+
message.Append("</nfse:ConsultarLoteRps>");
57+
return this.Execute("http://nfse.abrasf.org.br/ConsultarLoteRps", message.ToString(), ["ConsultarLoteRpsResponse"]);
58+
}
59+
60+
public string ConsultarNFSe(string? cabec, string msg)
61+
{
62+
// metodo nao testado
63+
var message = new StringBuilder();
64+
message.Append("<nfse:ConsultarNfseFaixa>");
65+
66+
message.Append("<nfseCabecMsg>");
67+
message.AppendCData(EmpacotaXml(cabec));
68+
message.Append("</nfseCabecMsg>");
69+
message.Append("<nfseDadosMsg>");
70+
message.AppendCData(EmpacotaXml(msg));
71+
message.Append("</nfseDadosMsg>");
72+
73+
message.Append("</nfse:ConsultarNfseFaixa>");
74+
return this.Execute("http://nfse.abrasf.org.br/ConsultarNfseFaixa", message.ToString(), ["ConsultarNfseFaixaResponse"]);
75+
}
76+
77+
private string EmpacotaXml(string conteudo)
78+
{
79+
return string.Concat("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", conteudo);
80+
}
81+
82+
public string ConsultarNFSeRps(string? cabec, string msg)
83+
{
84+
var message = new StringBuilder();
85+
message.Append("<nfse:ConsultarNfsePorRps>");
86+
87+
message.Append("<nfseCabecMsg>");
88+
message.AppendCData(EmpacotaXml(cabec));
89+
message.Append("</nfseCabecMsg>");
90+
message.Append("<nfseDadosMsg>");
91+
message.AppendCData(EmpacotaXml(msg));
92+
message.Append("</nfseDadosMsg>");
93+
94+
message.Append("</nfse:ConsultarNfsePorRps>");
95+
return this.Execute("http://nfse.abrasf.org.br/ConsultarNfsePorRps", message.ToString(), ["ConsultarNfsePorRpsResponse"]);
96+
}
97+
98+
public string ConsultarSequencialRps(string? cabec, string msg)
99+
{
100+
throw new System.NotImplementedException();
101+
}
102+
103+
public string ConsultarSituacao(string? cabec, string msg)
104+
{
105+
throw new System.NotImplementedException();
106+
}
107+
108+
public string Enviar(string? cabec, string msg)
109+
{
110+
// metodo nao testado
111+
var message = new StringBuilder();
112+
message.Append("<nfse:RecepcionarLoteRps>");
113+
114+
message.Append("<nfseCabecMsg>");
115+
message.AppendCData(EmpacotaXml(cabec));
116+
message.Append("</nfseCabecMsg>");
117+
message.Append("<nfseDadosMsg>");
118+
message.AppendCData(EmpacotaXml(msg));
119+
message.Append("</nfseDadosMsg>");
120+
121+
message.Append("</nfse:RecepcionarLoteRps>");
122+
return this.Execute("http://nfse.abrasf.org.br/RecepcionarLoteRps", message.ToString(), ["RecepcionarLoteRpsResponse"]);
123+
}
124+
125+
public string EnviarSincrono(string? cabec, string msg)
126+
{
127+
var message = new StringBuilder();
128+
message.Append("<nfse:RecepcionarLoteRpsSincrono>");
129+
130+
message.Append("<nfseCabecMsg>");
131+
message.AppendCData(EmpacotaXml(cabec));
132+
message.Append("</nfseCabecMsg>");
133+
message.Append("<nfseDadosMsg>");
134+
message.AppendCData(EmpacotaXml(msg));
135+
message.Append("</nfseDadosMsg>");
136+
137+
message.Append("</nfse:RecepcionarLoteRpsSincrono>");
138+
return this.Execute("http://nfse.abrasf.org.br/RecepcionarLoteRpsSincrono", message.ToString(), ["RecepcionarLoteRpsSincronoResponse"]);
139+
}
140+
141+
public string SubstituirNFSe(string? cabec, string msg)
142+
{
143+
// m�todo n�o testado
144+
var message = new StringBuilder();
145+
message.Append("<nfse:SubstituirNfse>");
146+
message.Append("<nfseCabecMsg>");
147+
message.AppendCData(EmpacotaXml(cabec));
148+
message.Append("</nfseCabecMsg>");
149+
message.Append("<nfseDadosMsg>");
150+
message.AppendCData(EmpacotaXml(msg));
151+
message.Append("</nfseDadosMsg>");
152+
message.Append("</nfse:SubstituirNfse>");
153+
return this.Execute("http://nfse.abrasf.org.br/SubstituirNfse", message.ToString(), ["SubstituirNfseResponse"]);
154+
}
155+
156+
protected override string TratarRetorno(XElement xmlDocument, string[] responseTag)
157+
{
158+
return xmlDocument.ElementAnyNs(responseTag[0]).ElementAnyNs("outputXML").Value;
159+
}
160+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using OpenAC.Net.NFSe.Commom.Interface;
2+
using OpenAC.Net.NFSe.Commom.Model;
3+
using OpenAC.Net.NFSe.Commom.Types;
4+
using OpenAC.Net.NFSe.Configuracao;
5+
6+
namespace OpenAC.Net.NFSe.Providers;
7+
8+
internal sealed class ProviderFintelISS204 : ProviderABRASF204
9+
{
10+
public ProviderFintelISS204(ConfigNFSe config, OpenMunicipioNFSe municipio) : base(config, municipio)
11+
{
12+
Name = "FintelISS";
13+
}
14+
15+
protected override IServiceClient GetClient(TipoUrl tipo)
16+
{
17+
return new FintelISS204ServiceClient(this, tipo, this.Certificado);
18+
}
19+
20+
//protected override bool PrecisaValidarSchema(TipoUrl tipo) => false;
21+
}

src/OpenAC.Net.NFSe/Providers/ProviderManager.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ static ProviderManager()
103103
{NFSeProvider.Sigep, new Dictionary<VersaoNFSe, Type> {{VersaoNFSe.ve100, typeof(ProviderSigep) }, {VersaoNFSe.ve202, typeof(ProviderSigep) }}},
104104
{NFSeProvider.ISSIntegra, new Dictionary<VersaoNFSe, Type> {{VersaoNFSe.ve100, typeof(ProviderISSIntegra)}}},
105105
{NFSeProvider.ISSRecife, new Dictionary<VersaoNFSe, Type> {{VersaoNFSe.ve100, typeof(ProviderISSRecife)}}},
106+
{NFSeProvider.FintelISS, new Dictionary<VersaoNFSe, Type> {{VersaoNFSe.ve204, typeof(ProviderFintelISS204)}}},
106107
};
107108

108109
Load();
@@ -136,7 +137,7 @@ static ProviderManager()
136137
/// <param name="path">Caminho para salvar o arquivo</param>
137138
public static void Save(string path = "Municipios.nfse")
138139
{
139-
if(path == null) throw new ArgumentNullException(nameof(path));
140+
if (path == null) throw new ArgumentNullException(nameof(path));
140141

141142
if (File.Exists(path)) File.Delete(path);
142143

@@ -186,7 +187,7 @@ public static void Load(string path = "", bool clean = true)
186187
buffer = File.ReadAllBytes(path);
187188
}
188189

189-
if(buffer == null) throw new ArgumentException("Arquivo de cidades não encontrado");
190+
if (buffer == null) throw new ArgumentException("Arquivo de cidades não encontrado");
190191
using var stream = new MemoryStream(buffer);
191192
Load(stream, clean);
192193
}
@@ -198,7 +199,7 @@ public static void Load(string path = "", bool clean = true)
198199
/// <param name="clean">if set to <c>true</c> [clean].</param>
199200
public static void Load(Stream stream, bool clean = true)
200201
{
201-
if(stream == null) throw new ArgumentException("Arquivo de cidades não encontrado");
202+
if (stream == null) throw new ArgumentException("Arquivo de cidades não encontrado");
202203

203204
var municipiosNFSe = MunicipiosNFSe.Load(stream);
204205
if (clean) Municipios.Clear();
@@ -213,12 +214,12 @@ public static void Load(Stream stream, bool clean = true)
213214
public static ProviderBase GetProvider(ConfigNFSe config)
214215
{
215216
var municipio = Municipios.SingleOrDefault(x => x.Codigo == config.WebServices.CodigoMunicipio);
216-
if(municipio == null) throw new OpenException("Provedor para esta cidade não implementado ou não especificado!");
217+
if (municipio == null) throw new OpenException("Provedor para esta cidade não implementado ou não especificado!");
217218

218219
// ReSharper disable once PossibleNullReferenceException
219220
var providerType = Providers[municipio.Provedor][municipio.Versao];
220-
if(providerType == null) throw new OpenException("Provedor não encontrado!");
221-
if(!CheckBaseType(providerType)) throw new OpenException("Classe base do provedor incorreta!");
221+
if (providerType == null) throw new OpenException("Provedor não encontrado!");
222+
if (!CheckBaseType(providerType)) throw new OpenException("Classe base do provedor incorreta!");
222223

223224
// ReSharper disable once AssignNullToNotNullAttribute
224225
return (ProviderBase)Activator.CreateInstance(providerType, config, municipio);

src/OpenAC.Net.NFSe/Resources/Municipios.nfse

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10045,90 +10045,98 @@
1004510045
<Codigo>3534708</Codigo>
1004610046
<Nome>Ourinhos</Nome>
1004710047
<UF>SP</UF>
10048-
<Provedor>SmarAPD</Provedor>
10048+
<Provedor>FintelISS</Provedor>
1004910049
<Versao>2.04</Versao>
10050-
<Parametros>
10051-
<Parametro Id="SubVersao">0</Parametro>
10052-
</Parametros>
1005310050
<UrlHomologacao>
1005410051
<Item>
1005510052
<TipoUrl>Enviar</TipoUrl>
10053+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1005610054
</Item>
1005710055
<Item>
1005810056
<TipoUrl>EnviarSincrono</TipoUrl>
10057+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1005910058
</Item>
1006010059
<Item>
1006110060
<TipoUrl>CancelarNFSe</TipoUrl>
10061+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1006210062
</Item>
1006310063
<Item>
1006410064
<TipoUrl>CancelarNFSeLote</TipoUrl>
10065+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1006510066
</Item>
1006610067
<Item>
1006710068
<TipoUrl>ConsultarNFSe</TipoUrl>
10069+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1006810070
</Item>
1006910071
<Item>
1007010072
<TipoUrl>ConsultarNFSeRps</TipoUrl>
10073+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1007110074
</Item>
1007210075
<Item>
1007310076
<TipoUrl>ConsultarLoteRps</TipoUrl>
10077+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1007410078
</Item>
1007510079
<Item>
1007610080
<TipoUrl>ConsultarSituacao</TipoUrl>
10081+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1007710082
</Item>
1007810083
<Item>
1007910084
<TipoUrl>ConsultarSequencialRps</TipoUrl>
10085+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1008010086
</Item>
1008110087
<Item>
1008210088
<TipoUrl>SubstituirNFSe</TipoUrl>
10089+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1008310090
</Item>
1008410091
<Item>
1008510092
<TipoUrl>Autenticacao</TipoUrl>
10093+
<Url>https://iss.ourinhos.sp.gov.br:4431/Homologacao/Services/Nfse204.asmx</Url>
1008610094
</Item>
1008710095
</UrlHomologacao>
1008810096
<UrlProducao>
1008910097
<Item>
1009010098
<TipoUrl>Enviar</TipoUrl>
10091-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10099+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1009210100
</Item>
1009310101
<Item>
1009410102
<TipoUrl>EnviarSincrono</TipoUrl>
10095-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10103+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1009610104
</Item>
1009710105
<Item>
1009810106
<TipoUrl>CancelarNFSe</TipoUrl>
10099-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10107+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1010010108
</Item>
1010110109
<Item>
1010210110
<TipoUrl>CancelarNFSeLote</TipoUrl>
10103-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10111+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1010410112
</Item>
1010510113
<Item>
1010610114
<TipoUrl>ConsultarNFSe</TipoUrl>
10107-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10115+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1010810116
</Item>
1010910117
<Item>
1011010118
<TipoUrl>ConsultarNFSeRps</TipoUrl>
10111-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10119+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1011210120
</Item>
1011310121
<Item>
1011410122
<TipoUrl>ConsultarLoteRps</TipoUrl>
10115-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10123+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1011610124
</Item>
1011710125
<Item>
1011810126
<TipoUrl>ConsultarSituacao</TipoUrl>
10119-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10127+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1012010128
</Item>
1012110129
<Item>
1012210130
<TipoUrl>ConsultarSequencialRps</TipoUrl>
10123-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10131+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1012410132
</Item>
1012510133
<Item>
1012610134
<TipoUrl>SubstituirNFSe</TipoUrl>
10127-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10135+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1012810136
</Item>
1012910137
<Item>
1013010138
<TipoUrl>Autenticacao</TipoUrl>
10131-
<Url>https://e-gov.ourinhos.sp.gov.br:8443/tb/services/nfseSOAP?wsdl</Url>
10139+
<Url>https://iss.ourinhos.sp.gov.br:4431/Services/Nfse204.asmx</Url>
1013210140
</Item>
1013310141
</UrlProducao>
1013410142
</Municipio>

0 commit comments

Comments
 (0)