10077 - Item de serviço para NFS-e para fonecedor Betha
Problema: Cliente necessita enviar mais de um item de serviço na RPS e NFS-e (Nota Fiscal Eletrônica de Serviço) para prefeituras que são atendidas pelo fornecedor Betha. Atualmente, o ERP está concatenando todos os serviços na TAG <Descriminacao> do arquivo XML gerado, fazendo com que somente um item de serviço seja gerado na NFS-e na Prefitura.
Observação: foi verificado que mesmo ativando o identificador de regras GER-000GERSDE1 no ERP e alterando a forma de integração de NFS-e no SDE para Senior (parâmetro Padrão do arquivo de integração (Entrada) do SDE), a prefeitura não aceitou envio de vários itens de serviço para a NFS-e.
Quando ocorre / onde se aplica: emissão de NFS-e para cidades que possuem como fornecedor a Betha Sistemas.
Solução: Solução 10077: a Betha Sistemas possui um modo específico para recebimento de mais de um item de serviço dentro de somente uma tag, a tag <Discriminacao>. Para isso, o identificador de regras GER-000ABRASF1 deve ser ativado e uma regra deve ser vinculada à este IR para manipular o arquivo XML da NFS-e. O campo <Discriminacao> deve seguir o padrão indicado no print em anexo.
Seguem procedimentos:
1. Ativar o identificador VEN-140NEESP01 para que desabilite a geração da string CDATA.
2. Ativar o indentificado GER-000ABRASF1 e criar regra de forma a concatenar os serviços junto com as seguintes chaves:
{[[Descricao=xxxxxxxxx Servico 1 xxxxxxxxx][Quantidade=1][ValorUnitario=100000.0000][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]][[Descricao=xxxxxxxxxx Servico 2 xxxxxxx][Quantidade=1][ValorUnitario=200000.0000][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]]}
Importante ressaltar que os valores devem ser enviados inteiros e as decimais separadas por . (pontos) ao inves da , (virgula). Embora a prefeitura devolva o XML com , (virgula) ela processa apenas com .(ponto).
Outro ponto importante, o identificador [ValorUnitario] deve ser informado o valor bruto de cada serviço.
Exemplo da regra:
RetiraAcentuacao(vDesSer1);
RetiraAcentuacao(vDesSer2);
RetiraAcentuacao(vDesSer3);
RetiraAcentuacao(vDesSer4);
RetiraAcentuacao(vDesSer5);
RetiraAcentuacao(vDesSer6);
ConverteMascara(1,nVlrBru1,aVlrBru1,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru2,aVlrBru2,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru3,aVlrBru3,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru4,aVlrBru4,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru5,aVlrBru5,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru6,aVlrBru6,ZZZZZZZZZ9,9999);
TrocaString(aVlrBru1, ,, ., aVlrBru1);
TrocaString(aVlrBru2, ,, ., aVlrBru2);
TrocaString(aVlrBru3, ,, ., aVlrBru3);
TrocaString(aVlrBru4, ,, ., aVlrBru4);
TrocaString(aVlrBru5, ,, ., aVlrBru5);
TrocaString(aVlrBru6, ,, ., aVlrBru6);
ConverteMascara(1,nQtdFat1,aQtdFat1,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat2,aQtdFat2,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat3,aQtdFat3,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat4,aQtdFat4,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat5,aQtdFat5,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat6,aQtdFat6,ZZZZZZZZ9);
LimpaEspacos(aVlrBru1);
LimpaEspacos(aVlrBru2);
LimpaEspacos(aVlrBru3);
LimpaEspacos(aVlrBru4);
LimpaEspacos(aVlrBru5);
LimpaEspacos(aVlrBru6);
LimpaEspacos(aQtdFat1);
LimpaEspacos(aQtdFat2);
LimpaEspacos(aQtdFat3);
LimpaEspacos(aQtdFat4);
LimpaEspacos(aQtdFat5);
LimpaEspacos(aQtdFat6);
Se (VUltSer = 1)
VDesSer1 = VDesSer1 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 2)
VDesSer2 = VDesSer2 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 3)
VDesSer3 = VDesSer3 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 4)
VDesSer4 = VDesSer4 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 5)
VDesSer5 = VDesSer5 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 6)
VDesSer6 = VDesSer6 + - Obs: + VObs + - + VDesPar;
Se (VDesSer1 <> ){
VDesSer1 = [Descricao= + VDesSer1 + ];
VDesSer1 = VDesSer1 + [Quantidade= + aQtdFat1 + ];
VDesSer1 = VDesSer1 + [ValorUnitario= + aVlrBru1 + ];
VDesSer1 = VDesSer1 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer1 = [ + VDesSer1 + ];
}
Se (VDesSer2 <> ){
VDesSer2 = [Descricao= + VDesSer2 + ];
VDesSer2 = VDesSer2 + [Quantidade= + aQtdFat2 + ];
VDesSer2 = VDesSer2 + [ValorUnitario= + aVlrBru2 + ];
VDesSer2 = VDesSer2 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer2 = [ + VDesSer2 + ];
}
Se (VDesSer3 <> ){
VDesSer3 = [Descricao= + VDesSer3 + ];
VDesSer3 = VDesSer3 + [Quantidade= + aQtdFat3 + ];
VDesSer3 = VDesSer3 + [ValorUnitario= + aVlrBru3 + ];
VDesSer3 = VDesSer3 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer3 = [ + VDesSer3 + ];
}
Se (VDesSer4 <> ){
VDesSer4 = [Descricao= + VDesSer4 + ];
VDesSer4 = VDesSer4 + [Quantidade= + aQtdFat4 + ];
VDesSer4 = VDesSer4 + [ValorUnitario= + aVlrBru4 + ];
VDesSer4 = VDesSer4 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer4 = [ + VDesSer4 + ];
}
Se (VDesSer5 <> ){
VDesSer5 = [Descricao= + VDesSer5 + ];
VDesSer5 = VDesSer5 + [Quantidade= + aQtdFat5 + ];
VDesSer5 = VDesSer5 + [ValorUnitario= + aVlrBru5 + ];
VDesSer5 = VDesSer5 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer5 = [ + VDesSer5 + ];
}
Se (VDesSer6 <> ){
VDesSer6 = [Descricao= + VDesSer6 + ];
VDesSer6 = VDesSer6 + [Quantidade= + aQtdFat6 + ];
VDesSer6 = VDesSer6 + [ValorUnitario= + aVlrBru6 + ];
VDesSer6 = VDesSer6 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer6 = [ + VDesSer6 + ];
}
VSIntDesSer = { + VDesSer1 + VDesSer2 + VDesSer3 + VDesSer4 + VDesSer5 + VDesSer6 + };
Observação: foi verificado que mesmo ativando o identificador de regras GER-000GERSDE1 no ERP e alterando a forma de integração de NFS-e no SDE para Senior (parâmetro Padrão do arquivo de integração (Entrada) do SDE), a prefeitura não aceitou envio de vários itens de serviço para a NFS-e.
Quando ocorre / onde se aplica: emissão de NFS-e para cidades que possuem como fornecedor a Betha Sistemas.
Solução: Solução 10077: a Betha Sistemas possui um modo específico para recebimento de mais de um item de serviço dentro de somente uma tag, a tag <Discriminacao>. Para isso, o identificador de regras GER-000ABRASF1 deve ser ativado e uma regra deve ser vinculada à este IR para manipular o arquivo XML da NFS-e. O campo <Discriminacao> deve seguir o padrão indicado no print em anexo.
Seguem procedimentos:
1. Ativar o identificador VEN-140NEESP01 para que desabilite a geração da string CDATA.
2. Ativar o indentificado GER-000ABRASF1 e criar regra de forma a concatenar os serviços junto com as seguintes chaves:
{[[Descricao=xxxxxxxxx Servico 1 xxxxxxxxx][Quantidade=1][ValorUnitario=100000.0000][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]][[Descricao=xxxxxxxxxx Servico 2 xxxxxxx][Quantidade=1][ValorUnitario=200000.0000][Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0]]}
Importante ressaltar que os valores devem ser enviados inteiros e as decimais separadas por . (pontos) ao inves da , (virgula). Embora a prefeitura devolva o XML com , (virgula) ela processa apenas com .(ponto).
Outro ponto importante, o identificador [ValorUnitario] deve ser informado o valor bruto de cada serviço.
Exemplo da regra:
RetiraAcentuacao(vDesSer1);
RetiraAcentuacao(vDesSer2);
RetiraAcentuacao(vDesSer3);
RetiraAcentuacao(vDesSer4);
RetiraAcentuacao(vDesSer5);
RetiraAcentuacao(vDesSer6);
ConverteMascara(1,nVlrBru1,aVlrBru1,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru2,aVlrBru2,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru3,aVlrBru3,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru4,aVlrBru4,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru5,aVlrBru5,ZZZZZZZZZ9,9999);
ConverteMascara(1,nVlrBru6,aVlrBru6,ZZZZZZZZZ9,9999);
TrocaString(aVlrBru1, ,, ., aVlrBru1);
TrocaString(aVlrBru2, ,, ., aVlrBru2);
TrocaString(aVlrBru3, ,, ., aVlrBru3);
TrocaString(aVlrBru4, ,, ., aVlrBru4);
TrocaString(aVlrBru5, ,, ., aVlrBru5);
TrocaString(aVlrBru6, ,, ., aVlrBru6);
ConverteMascara(1,nQtdFat1,aQtdFat1,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat2,aQtdFat2,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat3,aQtdFat3,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat4,aQtdFat4,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat5,aQtdFat5,ZZZZZZZZ9);
ConverteMascara(1,nQtdFat6,aQtdFat6,ZZZZZZZZ9);
LimpaEspacos(aVlrBru1);
LimpaEspacos(aVlrBru2);
LimpaEspacos(aVlrBru3);
LimpaEspacos(aVlrBru4);
LimpaEspacos(aVlrBru5);
LimpaEspacos(aVlrBru6);
LimpaEspacos(aQtdFat1);
LimpaEspacos(aQtdFat2);
LimpaEspacos(aQtdFat3);
LimpaEspacos(aQtdFat4);
LimpaEspacos(aQtdFat5);
LimpaEspacos(aQtdFat6);
Se (VUltSer = 1)
VDesSer1 = VDesSer1 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 2)
VDesSer2 = VDesSer2 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 3)
VDesSer3 = VDesSer3 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 4)
VDesSer4 = VDesSer4 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 5)
VDesSer5 = VDesSer5 + - Obs: + VObs + - + VDesPar;
Se (VUltSer = 6)
VDesSer6 = VDesSer6 + - Obs: + VObs + - + VDesPar;
Se (VDesSer1 <> ){
VDesSer1 = [Descricao= + VDesSer1 + ];
VDesSer1 = VDesSer1 + [Quantidade= + aQtdFat1 + ];
VDesSer1 = VDesSer1 + [ValorUnitario= + aVlrBru1 + ];
VDesSer1 = VDesSer1 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer1 = [ + VDesSer1 + ];
}
Se (VDesSer2 <> ){
VDesSer2 = [Descricao= + VDesSer2 + ];
VDesSer2 = VDesSer2 + [Quantidade= + aQtdFat2 + ];
VDesSer2 = VDesSer2 + [ValorUnitario= + aVlrBru2 + ];
VDesSer2 = VDesSer2 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer2 = [ + VDesSer2 + ];
}
Se (VDesSer3 <> ){
VDesSer3 = [Descricao= + VDesSer3 + ];
VDesSer3 = VDesSer3 + [Quantidade= + aQtdFat3 + ];
VDesSer3 = VDesSer3 + [ValorUnitario= + aVlrBru3 + ];
VDesSer3 = VDesSer3 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer3 = [ + VDesSer3 + ];
}
Se (VDesSer4 <> ){
VDesSer4 = [Descricao= + VDesSer4 + ];
VDesSer4 = VDesSer4 + [Quantidade= + aQtdFat4 + ];
VDesSer4 = VDesSer4 + [ValorUnitario= + aVlrBru4 + ];
VDesSer4 = VDesSer4 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer4 = [ + VDesSer4 + ];
}
Se (VDesSer5 <> ){
VDesSer5 = [Descricao= + VDesSer5 + ];
VDesSer5 = VDesSer5 + [Quantidade= + aQtdFat5 + ];
VDesSer5 = VDesSer5 + [ValorUnitario= + aVlrBru5 + ];
VDesSer5 = VDesSer5 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer5 = [ + VDesSer5 + ];
}
Se (VDesSer6 <> ){
VDesSer6 = [Descricao= + VDesSer6 + ];
VDesSer6 = VDesSer6 + [Quantidade= + aQtdFat6 + ];
VDesSer6 = VDesSer6 + [ValorUnitario= + aVlrBru6 + ];
VDesSer6 = VDesSer6 + [Deducoes=0][DescontoCondicionado=0][DescontoIncondicionado=0];
VDesSer6 = [ + VDesSer6 + ];
}
VSIntDesSer = { + VDesSer1 + VDesSer2 + VDesSer3 + VDesSer4 + VDesSer5 + VDesSer6 + };