É necessário que o prestador envie um email para o Setor de Documentário Fiscal
(SEDOF) através do formulário de contato disponibilizado no menu principal ou do
endereço cfi.sedof@sefaz.salvador.ba.gov.br, informando que deseja desenvolver o
aplicativo cliente para emissão de RPS. Neste email deve conter o CNPJ, CGA, Razão
Social e email de contato do prestador para a criação do usuário de acesso no ambiente
de homologação. Caso o prestador contrate uma empresa ou profissional de TI para
o desenvolvimento é necessário informar os dados da empresa ou do profissional de
TI para que possamos sanar dúvidas referentes ao Manual de Integração e estrutura
e validação do XML. A confirmação de criação do usuário será enviada por email.
A senha de acesso para o ambiente de homologação é diferente do ambiente de produção.
O Modelo Conceitual e o Manual de Integração são os documentos que contém as informações
necessárias sobre NFS-e e encontram-se disponíveis no portal respectivamente nas
opções Dúvidas - Modelo Conceitual e Tecnologia - Manual de Integração. É recomendada
a leitura destes documentos.
Em atendimento ao decreto n° 19.682 de 18 de junho de 2009, foi criada uma estrutura
de dados complementares para armazenar as informações previstas abaixo:
Atividade Portuária
I - o nome ou razão social, CNPJ ou CPF e endereço do proprietário da embarcação
ou do seu representante, quando aquele for domiciliado no exterior;
II - o nome do porto;
III - o nome e bandeira da embarcação;
IV - a data e hora da entrada e saída do porto;
Construção Civil
I - o valor da dedução de material;
II - o valor da dedução de subempreitada;
III - o nome da obra;
IV - o endereço da obra;
Os dados complementares serão enviados através de arquivo XML assinado que será
passado em um novo parâmetro no serviço de envio de lote. O procedimento de assinatura
desse XML é o mesmo dos demais. O nosso webservice de envio de lote possui dois
métodos:
public string EnviarLoteRPS(string loteXml)
public string EnviarLoteRPSComplementar(string loteXml, string pxmlDadosComplementares)
O primeiro será mantido para atender ao Modelo Conceitual da ABRASF e o segundo
foi criado para atender às regras específicas do município de Salvador. Conforme
o decreto todos os campos dos dados complementares são obrigatórios.
Seguem abaixo alguns links importantes:
1. Site da Sefaz-PMS
http://www.sefaz.salvador.ba.gov.br
2. Portal da NFS-e
https://nfse.sefaz.salvador.ba.gov.br
3. Site da ABRASF
http://www.abrasf.org.br
4. Site da ITI
http://www.iti.gov.br
5. Portal de homologação da NFS-e
https://nfsehml.sefaz.salvador.ba.gov.br
6. Web services de homologação da NFS-e (necessário certificado digital válido pela
ICP Brasil):
https://nfsehml.sefaz.salvador.ba.gov.br/envioloterps/envioloterps.svc
https://nfsehml.sefaz.salvador.ba.gov.br/ConsultaLoteRPS/ConsultaLoteRPS.svc
https://nfsehml.sefaz.salvador.ba.gov.br/ConsultaNfse/ConsultaNfse.svc
https://nfsehml.sefaz.salvador.ba.gov.br/ConsultaNfseRPS/ConsultaNfseRPS.svc
https://nfsehml.sefaz.salvador.ba.gov.br/ConsultaSituacaoLoteRPS/ConsultaSituacaoLoteRPS.svc
https://nfsehml.sefaz.salvador.ba.gov.br/ConsultaSituacaoNfse/ConsultaSituacaoNfse.svc
7. Web services de produção da NFS-e (necessário certificado digital válido pela
ICP Brasil):
https://nfse.sefaz.salvador.ba.gov.br/envioloterps/envioloterps.svc
https://nfse.sefaz.salvador.ba.gov.br/ConsultaLoteRPS/ConsultaLoteRPS.svc
https://nfse.sefaz.salvador.ba.gov.br/ConsultaNfse/ConsultaNfse.svc
https://nfse.sefaz.salvador.ba.gov.br/ConsultaNfseRPS/ConsultaNfseRPS.svc
https://nfse.sefaz.salvador.ba.gov.br/ConsultaSituacaoLoteRPS/ConsultaSituacaoLoteRPS.svc
https://nfse.sefaz.salvador.ba.gov.br/ConsultaSituacaoNfse/ConsultaSituacaoNfse.svc
O município de Salvador criou algumas particularidades para o tratamento da NFS-e.
Essas particularidades foram desenvolvidas como regras de negócio na aplicação,
de modo que não se alterou a estrutura definida no manual da ABRASF. São elas:
Tipos Simples
1. O tipo simples tsTipoRps aceita apenas valor igual a 1 (RPS). Os demais valores
(2 e 3) não podem ser usados por enquanto.
2. O tipo simples tsInscricaoMunicipal só aceita caracteres numéricos. O tamanho
do campo permanece o mesmo.
3. O tipo simples tsCnpj só aceita aceita caracteres numéricos. O tamanho do campo
permanece o mesmo.
4. O tipo simples tsCpf só aceita caracteres numéricos. O tamanho do campo permanece
o mesmo.
5. O tipo simples tsIndicacaoCpfCnpj não aceita opção 3 (Não informado).
6. O tipo simples tsDiscriminacao tem tamanho de 1200 caracteres.
Tipos Complexos
1. No tipo complexo tcIdentificacaoPrestador, o elemento InscricaoMunicipal (tsInscricaoMunicipal)
é obrigatório (ocorrência mínima e máxima igual a 1).
2. No tipo complexo tcIdentificacaoTomador, o elemento CpfCnpj (tcCpfCnpj) é obrigatório
(ocorrência mínima e máxima igual a 1).
3. No tipo complexo tcDadosTomador, o elemento RazaoSocial (tsRazaoSocial) é obrigatório
(ocorrência mínima e máxima igual a 1).
4. No tipo complexo tcInfRps, o atributo ID (tsIdTag) é obrigatório.
5. No tipo complexo tcRps, a assinatura (elemento Signature) é obrigatória (ocorrência
mínima e máxima igual a 1).
6. No tipo complexo tcInfNfse, o atributo ID (tsIdTag) é obrigatório.
7. No tipo complexo tcNfse, a assinatura (elemento Signature) é obrigatória (ocorrência
mínima e máxima igual a 1).
8. No tipo complexo tcInfSubstituicaoNfse, o atributo ID (tsIdTag) é obrigatório.
9. No tipo complexo tcSubstituicaoNfse, a assinatura (elemento Signature) é obrigatória
(ocorrência mínima e máxima igual a 1).
10. No tipo complexo tcLoteRps, o atributo ID (tsIdTag) é obrigatório.
11. No tipo complexo EnviarLoteRpsEnvio, o elemento LoteRps (tcLoteRps) é obrigatório
(ocorrência mínima e máxima igual a 1).
12. No tipo complexo EnviarLoteRpsEnvio, a assinatura (elemento Signature) é obrigatória
(ocorrência mínima e máxima igual a 1).
13. Os tipos complexos tcIdentificacaoNfse, tcInfPedidoCancelamento, tcPedidoCancelamento,
tcConfirmacaoCancelamento, tcCancelamentoNfse, CancelarNfseResposta e CancelarNfseEnvio
não são usados, pois o cancelamento da nota é feito através de processo administrativo.
14. No tipo complexo tcCompNfse, o elemento NfseCancelamento (tcCancelamentoNfse)
não é usado, pois o cancelamento da nota é feito através de processo administrativo.
Seguem abaixo trechos de código em C# referentes a algumas das implementações necessárias
para a NFS-e:
//Obter certificado pelo nome
X509Certificate2 _X509Cert = new X509Certificate2();
X509Store store = new X509Store("MY", StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection scollection = (X509Certificate2Collection)collection2.Find(X509FindType.FindBySubjectDistinguishedName,
Nome, false);
_X509Cert = scollection[0];
//Adicionar assinatura
//Adicionar tag KeyInfo
KeyInfoClause rsaKeyVal = new RSAKeyValue((RSA)userX509Cert.PrivateKey);
KeyInfo keyinfo = new KeyInfo();
//Adicionar tag X509SubjectName
KeyInfoX509Data x509data = new KeyInfoX509Data(userX509Cert);
x509data.AddSubjectName(userX509Cert.SubjectName.Name.ToString());
keyinfo.AddClause(x509data);
keyinfo.AddClause(rsaKeyVal);
...
SignedXml signedRpsXml = new SignedXml(xmlDoc);
signedRpsXml.SigningKey = userX509Cert.PrivateKey;
signedRpsXml.KeyInfo = keyinfo;
//Validar assinatura do XML
public bool ValidarAssinatura(string xml)
{
//Carrega o xml assinado
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml(xml);
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("Signature");
if (nodeList.Count == 0)
return false;
foreach (XmlNode node in nodeList)
{
SignedXml signedXmlNode = new SignedXml(xmlDoc);
signedXmlNode.LoadXml((XmlElement)node);
//Retorna para o usuário o resultado da validação da assiantura
if (!signedXmlNode.CheckSignature())
{
return false;
}
}
return true;
}
O Manual de Integração é um documento que possui o objetivo de orientar os prestadores
a realizar a comunicação com os serviços da SEFAZ-PMS para geração e consulta de
NFS-e.
Um tipo simples é aquele que representa apenas um único campo.
Um tipo complexo é aquele que representa um conjunto de campos, que podem ser agrupados
para representar uma entidade ou campos que possuem as mesmas características.
Essa tabela relaciona um conjunto de mensagens que poderão ser retornadas aos prestadores
caso o lote enviado não atenda à todas as validações previstas. Cada mensagem de
erro ou alerta representa uma validação no sistema. As mensagens dessa tabela podem
ser consultadas na funcionalidade Consulta de Mensagens.
Em caso de erro, o RPS deve ser corrigido e reenviado com o mesmo número, pois esse
número foi fornecido para o tomador do serviço e não pode ser alterado posteriormente.
Caso o número do RPS seja alterado o tomador não conseguirá consultar sua nota no
site da SEFAZ. O número do lote deve ser alterado, pois não será permitido envio
de lotes em duplicidade.
No envio do RPS, caso a tag RpsSubstituido esteja preenchida, a NFS-e que foi gerada
para o RPS substituído será cancelada e será gerada uma nova NFS-e conforme o novo
RPS.
Nada. Esse campo é opcional e o Município de Salvador não irá utilizá-lo.
Esse campo é o identificador da TAG XML, ele é utilizado para indicar qual TAG está
sendo assinada. Esse campo pode conter qualquer valor e é definido pelo prestador.
O identificador da TAG XML não pode possuir valores duplicados em um mesmo arquivo.
Nesse caso o XML deve conter obrigatoriamente a TAG TcDadosTomador, mesmo que ela
não contenha nenhuma sub TAG (TcIdentificacaoTomador, TsRazaoSocial, TcEndereco
ou TcContato).
Será retornado no XML da nota (TcInfNfse\tsCodigoVerificacao). Trata-se de um código
de verificação para consulta e validação da nota.
Em todas as consultas de nota é retornado o XML com as informações da nota, que
por sua vez possui todas as informações do RPS (TcInfNfse\tcIdentificacaoRps).
No menu Tecnologia - Downloads - Componente NfseUtil.DLL está disponível um componente
para assinatura, validação e envio de XML bem como um manual e exemplos de código.
Acesse o menu Iniciar - Executar, digite o comando mmc e pressione Enter.
A senha utilizada no portal da NFS-e expira a cada 180 dias. Nesse caso deve ser
cadastrada uma nova senha.
Para vincular o seu usuário do portal ao seu Certificado Digital você deve seguir os seguintes
passos:
- Selecionar opção Login no menu do portal;
- Clicar na aba Certificado e fazer a autenticação com a sua senha;
- Procurar pelo arquivo .CER gerado através do certificado (chave pública) e clicar em Continuar;
- Se os dados do certificado estiverem corretos clicar em Salvar;
- Quando o certificado expirar será necessário cadastrar o novo certificado, para isso basta seguir normalmente os passos 1 e 2. Basta confirmar e seguir normalmente do passo 3 em diante.
Após a vinculação, siga os seguintes passos para acessar o portal usando o seu Certificado Digital:
- Deve-se plugar o certificado na máquina;
- Selecionar opção Login no menu do portal;
- Selecionar opção "Acessar com Certificado Digital";
- Selecionar o certificado para autenticar e clicar em OK;
- Informar a senha do certificado e clicar em OK;
- Após esse procedimento, todas as funcionalidades com autenticação já podem ser acessadas.