Composição da NFC-e com erro de validação

Boa tarde, ao tentar emitir uma NFC-e no ambiente de homologação, ocorreu o seguinte erro:

{
“error”: {
“code”: “ValidationFailed”,
“message”: “Validation failed: ‘0.00’ violates pattern constraint of ‘0\.[0-9]{1}[1-9]{1}|0\.[1-9]{1}[0-9]{1}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?’.\r\nThe element ‘vOutro’ with value ‘0.00’ failed to parse.”,
“errors”: [
{
“code”: “SchemaValidationError”,
“message”: “‘0.00’ violates pattern constraint of ‘0\.[0-9]{1}[1-9]{1}|0\.[1-9]{1}[0-9]{1}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?’.\r\nThe element ‘vOutro’ with value ‘0.00’ failed to parse.”
}
]
}
}

para emitir uma NFC-e, é obrigatório ter algum valor neste campo ?
Já tentei passar como 0 e como nulo este valor, e estou usando VB.net

Boa tarde, @julio.

Como o campo é opcional, você deve removê-lo do JSON ao invés de informar o valor zerado.

Boa tarde, estou utilizando SDK C# em vb.net

Você já tentou simplesmente não preencher o campo? Poderia colar aqui o trecho do seu código?

Esta é a construção da classe:

Dim nfeSefazProd As New NfeSefazProd(cProd:=item.CodigoPersonalizado,
cEAN:=ValidaGTIN(item.EAN),
cBarra:=Nothing,
xProd:=item.DescricaoProduto,
nCM:=item.NCM,
nVE:=Nothing,
cEST:=Nothing,
indEscala:=Nothing,
cNPJFab:=Nothing,
cBenef:=Nothing,
eXTIPI:=Nothing,
cFOP:=item.CFOP,
uCom:=item.UnidadeVenda,
qCom:=item.Qtd,
vUnCom:=item.PrecoVenda,
vProd:=item.subTotal,
cEANTrib:=“SEM GTIN”,
cBarraTrib:=Nothing,
uTrib:=item.UndTributada,
qTrib:=item.QtdTributada,
vUnTrib:=item.ValorTributado,
vFrete:=Nothing,
vSeg:=Nothing,
vDesc:=Nothing,
vOutro:=If(item.SubTotalOutros <> 0, item.SubTotalOutros, Nothing),
indTot:=1,
dI:=Nothing,
detExport:=Nothing,
xPed:=Nothing,
nItemPed:=Nothing,
nFCI:=Nothing,
rastro:=Nothing,
infProdNFF:=Nothing,
infProdEmb:=Nothing,
veicProd:=Nothing,
med:=Nothing,
arma:=Nothing,
comb:=Nothing,
nRECOPI:=Nothing
)

como não é especificado em qual campo seria, aqui esta também no Totalizador:

Dim nfeSefazICMSTot As New NfeSefazICMSTot(vBC:=objnfe.iCMSTot.vBC,
vICMS:=objnfe.iCMSTot.vICMS,
vICMSDeson:=objnfe.iCMSTot.vICMSDeson,
vFCPUFDest:=Nothing,
vICMSUFDest:=Nothing,
vICMSUFRemet:=Nothing,
vFCP:=0,
vBCST:=objnfe.iCMSTot.vBCST,
vST:=objnfe.iCMSTot.vST,
vFCPST:=0,
vFCPSTRet:=0,
qBCMono:=Nothing,
vICMSMono:=Nothing,
qBCMonoReten:=Nothing,
vICMSMonoReten:=Nothing,
qBCMonoRet:=Nothing,
vICMSMonoRet:=Nothing,
vProd:=objnfe.iCMSTot.vProd,
vFrete:=objnfe.iCMSTot.vFrete,
vSeg:=objnfe.iCMSTot.vSeg,
vDesc:=objnfe.iCMSTot.vDesc,
vII:=objnfe.iCMSTot.vII,
vIPI:=objnfe.iCMSTot.vIPI,
vIPIDevol:=0,
vPIS:=objnfe.iCMSTot.vPIS,
vCOFINS:=objnfe.iCMSTot.vCOFINS,
vOutro:=If(objnfe.iCMSTot.vOutro <> 0, objnfe.iCMSTot.vOutro, Nothing),
vNF:=objnfe.iCMSTot.vNF,
vTotTrib:=objnfe.iCMSTot.vTotTrib
)

se algum valor é passado, a NFC-e é autorizada, caso isso não aconteça, o erro é retornado

@julio, Qual versão do SDK está usando? É a última?

A versão é a 2.24.0, acredito que seja a ultima.

Poderia verificar se o problema ocorre com a versão 2.22.0?

Acabei de verificar e o problema ocorreu também nesta versão.

Bom dia, alguma novidade ?

Bom dia, @julio.

vOutro:=If(item.SubTotalOutros <> 0, item.SubTotalOutros, Nothing),

Você poderia investigar se não está sendo enviado um valor diferente de zero, nem que seja alguma fração? O ideal seria inspecionar o JSON que está sendo enviado. Consegue fazer isso utilizando algum proxy de rede (Fiddler, Wireshark, etc)?


{
  "ambiente": "homologacao",
  "infNFe": {
    "versao": "4.00",
    "Id": null,
    "ide": {
      "cUF": 35,
      "cNF": null,
      "natOp": "venda",
      "mod": 65,
      "serie": 1,
      "nNF": 117,
      "dhEmi": "2024-02-20T08:56:02.1214875-03:00",
      "dhSaiEnt": null,
      "tpNF": 1,
      "idDest": 1,
      "cMunFG": "3538709",
      "tpImp": 4,
      "tpEmis": 1,
      "cDV": null,
      "tpAmb": 2,
      "finNFe": 1,
      "indFinal": 1,
      "indPres": 1,
      "indIntermed": null,
      "procEmi": 0,
      "verProc": "1.0",
      "dhCont": null,
      "xJust": null
    },
    "emit": {
      "CNPJ": "23161652000103",
      "CPF": null,
      "xNome": "Teste Company",
      "xFant": "MISTER CHEF HOSTMUNDO",
      "enderEmit": {
        "xLgr": null,
        "nro": null,
        "xCpl": null,
        "xBairro": null,
        "cMun": null,
        "xMun": null,
        "UF": null,
        "CEP": null,
        "cPais": null,
        "xPais": null,
        "fone": null
      },
      "IE": "535689686115",
      "IEST": null,
      "IM": null,
      "CNAE": null,
      "CRT": 1
    },
    "det": [
      {
        "nItem": 1,
        "prod": {
          "cProd": "179391",
          "cEAN": "SEM GTIN",
          "cBarra": null,
          "xProd": "SANDUÍCHE TESTE IFOOD",
          "NCM": "22011000",
          "CEST": null,
          "indEscala": null,
          "CNPJFab": null,
          "cBenef": null,
          "EXTIPI": null,
          "CFOP": "5102",
          "uCom": "UN",
          "qCom": 1.0,
          "vUnCom": 5.0,
          "vProd": 5.0,
          "cEANTrib": "SEM GTIN",
          "cBarraTrib": null,
          "uTrib": "UN",
          "qTrib": 1.0,
          "vUnTrib": 5.0,
          "vFrete": null,
          "vSeg": null,
          "vDesc": null,
          "vOutro": 0.0,
          "indTot": 1,
          "xPed": null,
          "nItemPed": null,
          "nFCI": null,
          "nRECOPI": null
        },
        "imposto": {
          "vTotTrib": null,
          "ICMS": {
            "ICMSSN102": {
              "orig": 0,
              "CSOSN": "102"
            }
          }
        },
        "infAdProd": null
      }
    ],
    "total": {
      "ICMSTot": {
        "vBC": 0.0,
        "vICMS": 0.0,
        "vICMSDeson": 0.0,
        "vFCPUFDest": null,
        "vICMSUFDest": null,
        "vICMSUFRemet": null,
        "vFCP": 0.0,
        "vBCST": 0.0,
        "vST": 0.0,
        "vFCPST": 0.0,
        "vFCPSTRet": 0.0,
        "qBCMono": null,
        "vICMSMono": null,
        "qBCMonoReten": null,
        "vICMSMonoReten": null,
        "qBCMonoRet": null,
        "vICMSMonoRet": null,
        "vProd": 5.0,
        "vFrete": 0.0,
        "vSeg": 0.0,
        "vDesc": 0.0,
        "vII": 0.0,
        "vIPI": 0.0,
        "vIPIDevol": 0.0,
        "vPIS": 0.0,
        "vCOFINS": 0.0,
        "vOutro": 0.0,
        "vNF": 5.0,
        "vTotTrib": 0.0
      }
    },
    "transp": {
      "modFrete": 9,
      "vagao": null,
      "balsa": null
    },
    "pag": {
      "detPag": [
        {
          "indPag": null,
          "tPag": "04",
          "xPag": null,
          "vPag": 5.0
        }
      ],
      "vTroco": 0.0
    }
  },
  "referencia": "182"
}

Bom dia,
este é o JSON quando serializo o objeto construído e que ocorre o erro.

O que ocorre se você setar simplesmente o vOutro para Nothing, e também se simplesmente não setar nada?

No vb.net, quando um integer é setado como Nothing, ele é automaticamente setado como 0 e não como Nothing.
Ex.: c# - Why can you assign Nothing to an Integer in VB.NET? - Stack Overflow

Também fiz uma tentativa de construir a classe sem o parâmetro vOutro:

Dim nfeSefazICMSTot As New NfeSefazICMSTot(vBC:=objnfe.iCMSTot.vBC,
                                           vICMS:=objnfe.iCMSTot.vICMS,
                                           vICMSDeson:=objnfe.iCMSTot.vICMSDeson,
                                           vFCPUFDest:=Nothing,
                                           vICMSUFDest:=Nothing,
                                           vICMSUFRemet:=Nothing,
                                           vFCP:=0,
                                           vBCST:=objnfe.iCMSTot.vBCST,
                                           vST:=objnfe.iCMSTot.vST,
                                           vFCPST:=0,
                                           vFCPSTRet:=0,
                                           qBCMono:=Nothing,
                                           vICMSMono:=Nothing,
                                           qBCMonoReten:=Nothing,
                                           vICMSMonoReten:=Nothing,
                                           qBCMonoRet:=Nothing,
                                           vICMSMonoRet:=Nothing,
                                           vProd:=objnfe.iCMSTot.vProd,
                                           vFrete:=objnfe.iCMSTot.vFrete,
                                           vSeg:=objnfe.iCMSTot.vSeg,
                                           vDesc:=objnfe.iCMSTot.vDesc,
                                           vII:=objnfe.iCMSTot.vII,
                                           vIPI:=objnfe.iCMSTot.vIPI,
                                           vIPIDevol:=0,
                                           vPIS:=objnfe.iCMSTot.vPIS,
                                           vCOFINS:=objnfe.iCMSTot.vCOFINS,
                                           vNF:=objnfe.iCMSTot.vNF,
                                           vTotTrib:=objnfe.iCMSTot.vTotTrib
                                           )

Porem, ocorreu esta exceção:

System.ArgumentNullException: 'Valor não pode ser nulo.
Arg_ParamName_Name'

Mas o tipo não é Integer, é um Integer Nullable. Ele aceita nulls.

Então na classe NfeSefazProd o valor do vOutro não tem característica (required) e é possivel atribuir o valor Nothing, porém na classe NfeSefazICMSTot a propriedade vOutro tem característica (required), logo, se tentamos setar como Nothing ele gera o erro acima

@julio

O erro é no campo vOutro da classe NfeSefazProd. Não pode conter zero.

O problema estava no

If(item.SubTotalOutros <> 0, item.SubTotalOutros, Nothing)

aparentemente existe algum bug, onde ele converte diretamento Nothing como 0, assim, no NfeSefazProd vOutro era setado como 0 e não como Nothing, o problema foi resolvido desta forma:

Dim vOutro As Decimal? = Nothing
If (item.ValorOutro <> 0) Then
    vOutro = item.ValorOutro
    objnfe.iCMSTot.vOutro += item.ValorOutro
End If

Dim nfeSefazProd As New NfeSefazProd(cProd:=item.CodigoPersonalizado,
                                     cEAN:=ValidaGTIN(item.EAN),
                                     cBarra:=Nothing,
                                     xProd:=item.DescricaoProduto,
                                     nCM:=item.NCM,
                                     nVE:=Nothing,
                                     cEST:=Nothing,
                                     indEscala:=Nothing,
                                     cNPJFab:=Nothing,
                                     cBenef:=Nothing,
                                     eXTIPI:=Nothing,
                                     cFOP:=item.CFOP,
                                     uCom:=item.UnidadeVenda,
                                     qCom:=item.Qtd,
                                     vUnCom:=item.PrecoVenda,
                                     vProd:=item.subTotal,
                                     cEANTrib:="SEM GTIN",
                                     cBarraTrib:=Nothing,
                                     uTrib:=item.UndTributada,
                                     qTrib:=item.QtdTributada,
                                     vUnTrib:=item.ValorTributado,
                                     vFrete:=Nothing,
                                     vSeg:=Nothing,
                                     vDesc:=Nothing,
                                     vOutro:=vOutro,
                                     indTot:=1,
                                     dI:=Nothing,
                                     detExport:=Nothing,
                                     xPed:=Nothing,
                                     nItemPed:=Nothing,
                                     nFCI:=Nothing,
                                     rastro:=Nothing,
                                     infProdNFF:=Nothing,
                                     infProdEmb:=Nothing,
                                     veicProd:=Nothing,
                                     med:=Nothing,
                                     arma:=Nothing,
                                     comb:=Nothing,
                                     nRECOPI:=Nothing
                                    )

Este tópico foi fechado automaticamente 24 horas depois da última resposta. Novas respostas não são mais permitidas.