nfephp-org / nfephp

PROJETO DEPRECATED use sped-nfe
https://github.com/nfephp-org/sped-nfe
Other
693 stars 686 forks source link

Problema com as tags do tipo de cálculo para PIS e COFINS e para CST 99 #908

Closed desenvolvedorindie closed 7 years ago

desenvolvedorindie commented 7 years ago

Olá,

Descobri um problema na validação pelo schema PL_008i2 para PIS e COFINS e para CST 99 do XML gerado pelo MakeNFE.

No método tagPIS:

$this->dom->addChild($pisItem, 'CST', $cst, true, "[item $nItem] Código de Situação Tributária do PIS");
$this->dom->addChild($pisItem, 'vBC', $vBC, false, "[item $nItem] Valor da Base de Cálculo do PIS");
$this->dom->addChild($pisItem, 'pPIS', $pPIS, false, "[item $nItem] Alíquota do PIS (em percentual)");
$this->dom->addChild($pisItem, 'qBCProd', $qBCProd, false, "[item $nItem] Quantidade Vendida");
$this->dom->addChild($pisItem, 'vAliqProd', $vAliqProd, false, "[item $nItem] Alíquota do PIS (em reais)");
$this->dom->addChild($pisItem, 'vPIS', $vPIS, true, "[item $nItem] Valor do PIS");

No método zTagCOFINSoutr:

$this->dom->addChild($confinsoutr, "CST", $cst, true, "Código de Situação Tributária da COFINS");
$this->dom->addChild($confinsoutr, "vBC", $vBC, false, "Valor da Base de Cálculo da COFINS");
$this->dom->addChild($confinsoutr, "pCOFINS", $pCOFINS, false, "Alíquota da COFINS (em percentual)");
$this->dom->addChild($confinsoutr, "qBCProd", $qBCProd, false, "Quantidade Vendida");
$this->dom->addChild($confinsoutr, "vAliqProd", $vAliqProd, false, "Alíquota da COFINS (em reais)");
$this->dom->addChild($confinsoutr, "vCOFINS", $vCOFINS, true, "Valor da COFINS");

O problema é que se eu verificar no XSD os elementos dos grupos de tags (vBC, pCOFINS) e (qBCProd, vAliqProd) são excludente, isso é

<xs:choice>
    <xs:sequence>
        <xs:element name="vBC" type="TDec_1302">
            <xs:annotation>
                <xs:documentation>Valor da BC do PIS</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="pPIS" type="TDec_0302a04">
           <xs:annotation>
                <xs:documentation>Alíquota do PIS (em percentual)</xs:documentation>
           </xs:annotation>
        </xs:element>
    </xs:sequence>
    <xs:sequence>
         <xs:element name="qBCProd" type="TDec_1204v">
             <xs:annotation>
                 <xs:documentation>Quantidade Vendida (NT2011/004) </xs:documentation>
             </xs:annotation>
         </xs:element>
         <xs:element name="vAliqProd" type="TDec_1104v">
             <xs:annotation>
                 <xs:documentation>Alíquota do PIS (em reais) (NT2011/004)</xs:documentation>
             </xs:annotation>
        </xs:element>
     </xs:sequence>
 </xs:choice>

` Referência do PIS: https://github.com/nfephp-org/nfephp/blob/master/schemes/NFe/PL_008i2/leiauteNFe_v3.10.xsd#L3548

Deveria ter uma verificação se algum desses são diferentes de null para colocar ou um primeiro ou segundo grupo. Ou talvez um parâmetro a mais para dizer o tipo de cálculo Percentual ('P') ou Valor ('V') aos métodos tagCOFINSST e tagPIS com valor padrão 'P' por exemplo

Qual seria a melhor opção?

robmachado commented 7 years ago

Isso já foi discutido anteriormente num hangout. Não só existe esse caso mas muitos outros semelhantes !! O que foi definido é que a API não faria "VALIDAÇÕES" desse tipo, ou seja essa é uma responsabilidade do sistema emitente (do ERP) e não da classe construtora do XML, justamente tendo em vista que pode ser validada com o XSD e posteriormente na própria SEFAZ. Nas novas versões menos e menos validações serão encontradas.

Porém ainda podem haver BUGS como foi o caso do PIS que ainda essa semana eu corrigi, no caso era um problema na classe Convert que continha um erro que sobre escrevia um campo obrigatório, e outros onde o campo era opcional no XML e na classe Make estava como obrigatório. Não sei se é esse o caso, mas se for ficaria feliz com um pull request.

desenvolvedorindie commented 7 years ago

Verifiquei que essas tags estão marcada com não obrigatória e não forçar a criação no addChild