@@ -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