Skip to content

Commit 255a791

Browse files
committed
fix(xml): map ctribnac from national tax code
Signed-off-by: Vitor Mattos <vitor@php.rio>
1 parent a7da8a3 commit 255a791

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/Xml/XmlBuilder.php

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function buildDps(DpsData $dps): string
4747
$serv = $doc->createElement('serv');
4848

4949
$itemListaServico = $doc->createElement('cServ');
50-
$itemListaServico->appendChild($doc->createElement('cTribNac', $dps->itemListaServico));
50+
$itemListaServico->appendChild($doc->createElement('cTribNac', $dps->codigoTributacaoNacional));
5151
$serv->appendChild($itemListaServico);
5252

5353
$serv->appendChild($doc->createElement('xDescServ', htmlspecialchars($dps->discriminacao, ENT_XML1)));
@@ -61,7 +61,7 @@ public function buildDps(DpsData $dps): string
6161
// Values
6262
$valores = $doc->createElement('valores');
6363
$valores->appendChild($doc->createElement('vServ', $dps->valorServico));
64-
$valores->appendChild($this->buildTrib($doc, $dps));
64+
$valores->appendChild($this->buildTotTrib($doc, $dps));
6565
$infDps->appendChild($valores);
6666

6767
// Regime especial de tributação (optional)
@@ -72,13 +72,25 @@ public function buildDps(DpsData $dps): string
7272
return $doc->saveXML() ?: '';
7373
}
7474

75-
private function buildTrib(\DOMDocument $doc, DpsData $dps): \DOMElement
75+
private function buildTotTrib(\DOMDocument $doc, DpsData $dps): \DOMElement
7676
{
77-
$trib = $doc->createElement('tribMun');
78-
$trib->appendChild($doc->createElement('tribISSQN', $dps->issRetido ? '2' : '1'));
79-
$trib->appendChild($doc->createElement('pAliq', $dps->aliquota));
77+
$totTrib = $doc->createElement('totTrib');
8078

81-
return $trib;
79+
// tribMun contains ISS and conditional pAliq
80+
$tribMun = $doc->createElement('tribMun');
81+
$tribMun->appendChild($doc->createElement('tribISSQN', $dps->issRetido ? '2' : '1'));
82+
83+
// E0617: For não optante (opSimpNac=1), pAliq must NOT be present
84+
if ($dps->opcaoSimplesNacional !== 1) {
85+
$tribMun->appendChild($doc->createElement('pAliq', $dps->aliquota));
86+
}
87+
88+
$totTrib->appendChild($tribMun);
89+
90+
// E0715: indTotTrib is ALWAYS included to avoid schema validation errors
91+
$totTrib->appendChild($doc->createElement('indTotTrib', (string) $dps->indicadorTributacao));
92+
93+
return $totTrib;
8294
}
8395

8496
private function buildToma(\DOMDocument $doc, DpsData $dps): \DOMElement

0 commit comments

Comments
 (0)