From bc20226bc27f6cba14934af8887c25c5525010cb Mon Sep 17 00:00:00 2001 From: robmachado Date: Mon, 12 Feb 2024 12:05:27 -0300 Subject: [PATCH] ajustes Credito Presumido NT 2019.001 v1.61 --- docs/Make.md | 31 ++++++++++++++++++-- src/Make.php | 80 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 81 insertions(+), 30 deletions(-) diff --git a/docs/Make.md b/docs/Make.md index 12798d12..017c0341 100755 --- a/docs/Make.md +++ b/docs/Make.md @@ -383,6 +383,26 @@ $std->nFCI; $nfe->tagprod($std); ``` +### function tagCreditoPresumidoProd($std): void +Node opcional com dados de Crédito Presumido, são permitidos até 4 registros por item + +| Parâmetro | Tipo | Descrição | +| :--- | :---: |:-----------------------------------------------------------------------| +|item|inteiro| Número do item da NFe | +|cCredPresumido|string|Código de Benefício Fiscal de Crédito Presumido na UF aplicado ao item | +|pCredPresumido|numerico|Percentual do Crédito Presumido | +|vCredPresumido|numerico|Valor do Crédito Presumido | + +```php +$std = new \stdClass(); +$std->item = 1; +$std->cCredPresumido = '2222211234'; +$std->pCredPresumido = '4'; +$std->vCredPresumido = '4'; + +$make->tagCreditoPresumidoProd($std); +``` + ### function taginfAdProd($std):DOMElement Node de informações adicionais do produto @@ -460,6 +480,7 @@ $std->tpViaTransp; $std->vAFRMM; $std->tpIntermedio; $std->CNPJ; +$std->CPF; //NT 2023.004 v1.00 $std->UFTerceiro; $std->cExportador; @@ -746,7 +767,9 @@ $std->adRemICMSRet; //NT 2023.001-v1.10 $std->vICMSMonoRet; //NT 2023.001-v1.10 $std->vICMSMonoDif; //NT 2023.001-v1.10 $std->vICMSMonoRet; //NT 2023.001-v1.10 - +$std->adRemICMSRet; +$std->cBenefRBC; //NT 2019.001 v1.61 +$std->indDeduzDeson; //NT 2023.004 v1.00 $nfe->tagICMS($std); ``` @@ -1337,13 +1360,17 @@ Node com o detalhamento da forma de pagamento **OBRIGATÓRIO para NFCe e NFe lay | $std | stdClass | contêm os dados dos campos, nomeados conforme manual | ```php $std = new stdClass(); +$std->indPag = '0'; //0= Pagamento à Vista 1= Pagamento à Prazo $std->tPag = '03'; $std->vPag = 200.00; //Obs: deve ser informado o valor pago pelo cliente $std->CNPJ = '12345678901234'; $std->tBand = '01'; $std->cAut = '3333333'; $std->tpIntegra = 1; //incluso na NT 2015/002 -$std->indPag = '0'; //0= Pagamento à Vista 1= Pagamento à Prazo +$std->CNPJPag; //NT 2023.004 v1.00 +$std->UFPag; //NT 2023.004 v1.00 +$std->CNPJReceb; //NT 2023.004 v1.00 +$std->idTermPag; //NT 2023.004 v1.00 $nfe->tagdetPag($std); ``` diff --git a/src/Make.php b/src/Make.php index e5855b46..1952209c 100755 --- a/src/Make.php +++ b/src/Make.php @@ -173,6 +173,10 @@ class Make * @var array of DOMElements */ protected $aProd = []; + /** + * @var array + */ + protected $aProdCreditoPresumido = []; /** * @var array of DOMElements */ @@ -1736,6 +1740,27 @@ public function taginfAdProd(stdClass $std): DOMElement return $infAdProd; } + /** + * Detalhamento do crédito presumido do item da NFe + * Grupo opcional para informações do Crédito Presumido. Obs.: A exigência do preenchimento das informações + * do crédito presumido fica a critério de cada UF + * tag NFe/infNFe/det[]/prod/[cCredPresumido, pCredPresumido, vCredPresumido] + * NT 2019.001 v1.61 + * @param stdClass $std + * @return void + */ + public function tagCreditoPresumidoProd(stdClass $std) + { + $possible = ['item', 'cCredPresumido', 'pCredPresumido', 'vCredPresumido']; + $std = $this->equilizeParameters($std, $possible); + $this->aProdCreditoPresumido[] = [ + 'item' => $std->item, + 'cCredPresumido' => $std->cCredPresumido, + 'pCredPresumido' => $this->conditionalNumberFormatting($std->pCredPresumido, 4), + 'vCredPresumido' => $this->conditionalNumberFormatting($std->vCredPresumido, 2) + ]; + } + /** * Detalhamento de Produtos e Serviços I01 pai H01 * tag NFe/infNFe/det[]/prod @@ -1770,10 +1795,7 @@ public function tagprod(stdClass $std): DOMElement 'indTot', 'xPed', 'nItemPed', - 'nFCI', - 'cCredPresumido', - 'pCredPresumido', - 'vCredPresumido' + 'nFCI' ]; $std = $this->equilizeParameters($std, $possible); //totalizador @@ -1851,30 +1873,6 @@ public function tagprod(stdClass $std): DOMElement false, $identificador . "[item $std->item] Código de Benefício Fiscal utilizado pela UF" ); - //NT 2019.001 v1.60 - $this->dom->addChild( - $prod, - "cCredPresumido", - $std->cCredPresumido ?? null, - false, - $identificador . "[item $std->item] Código de Benefício Fiscal de Crédito Presumido na UF aplicado ao item" - ); - //NT 2019.001 v1.60 - $this->dom->addChild( - $prod, - "pCredPresumido", - $this->conditionalNumberFormatting($std->pCredPresumido, 4), - false, - $identificador . "[item $std->item] Percentual do Crédito Presumido" - ); - //NT 2019.001 v1.60 - $this->dom->addChild( - $prod, - "vCredPresumido", - $this->conditionalNumberFormatting($std->vCredPresumido, 2), - false, - $identificador . "[item $std->item] Valor do Crédito Presumido" - ); $this->dom->addChild( $prod, "EXTIPI", @@ -7860,6 +7858,32 @@ protected function buildDet() } } } + //insere credito presumido + $it = []; + foreach ($this->aProdCreditoPresumido as $cp) { + $scp = (object) $cp; + $prod = $this->aProd[$scp->item]; + $cBenef = $prod->getElementsByTagName("cBenef")->item(0); + if (empty($cBenef)) { + break; + } + if (!empty($prod->getElementsByTagName("EXTIPI")->item(0))) { + $node = $prod->getElementsByTagName("EXTIPI")->item(0); + } else { + $node = $prod->getElementsByTagName("CFOP")->item(0); + } + $it[$scp->item]++; + if ($it[$scp->item] > 4) { + $this->errors[] = "Item {$scp->item} não pode ter mais de 4 registros de Credito Presumido"; + continue; + } + $ccp = $this->dom->createElement('cCredPresumido', $scp->cCredPresumido); + $pcp = $this->dom->createElement('pCredPresumido', $scp->pCredPresumido); + $vcp = $this->dom->createElement('vCredPresumido', $scp->vCredPresumido); + $prod->insertBefore($ccp, $node); + $prod->insertBefore($pcp, $node); + $prod->insertBefore($vcp, $node); + } //insere DI foreach ($this->aDI as $nItem => $aDI) { $prod = $this->aProd[$nItem];