Skip to content

feat: federal taxation settings UI, percentage_profile mode, and emission integration#80

Merged
vitormattos merged 21 commits intomainfrom
feat/federal-taxation-percentage-profile-mode
Mar 31, 2026
Merged

feat: federal taxation settings UI, percentage_profile mode, and emission integration#80
vitormattos merged 21 commits intomainfrom
feat/federal-taxation-percentage-profile-mode

Conversation

@vitormattos
Copy link
Copy Markdown
Member

Summary

Complete integration of federal taxation (tributação federal) into the NFS-e module settings and invoice emission.

Changes

Controllers

  • SettingsController: validate and persist all PIS/COFINS, IRRF, CSLL, CP, tributos percentage and tributacao_federal_mode settings
  • InvoiceController: mode-aware federal value calculation in DPS emission
    • per_invoice_amounts: use stored absolute amounts from settings
    • percentage_profile: calculate vBCPISCOFINS = invoiceAmount, vPIS and vCOFINS from stored aliquotas × invoiceAmount / 100
    • Set indicadorTributacao = 2 when any tributos_* percent setting is non-empty (contributor-estimated), otherwise 0

View

  • settings/edit.blade.php: full federal taxation tab with:
    • PIS/COFINS situação tributária and tipo retenção selects
    • Base cálculo, alíquota and valor PIS/COFINS inputs
    • IRRF, CSLL, CP retention fields
    • tributacao_federal_mode radio toggle
    • syncFederalMode() JS: hides valor fields in percentage_profile mode and shows tributos% rows instead
    • Tributos percentage profile rows (Perfil padrão + Simples Nacional)

Tests (TDD)

  • InvoiceControllerTest: percentage_profile mode calculation; indicadorTributacao=2 when tributos% set; source-inspection fix for Eloquent isolation test
  • SettingsControllerTest: full persistence coverage for all new federal fields
  • OperationalViewsExistenceTest: federal tab field IDs and input names
  • CompanyServiceRouteUsageTest: CRUD route registration

E2E/Integration

  • Playwright settings and emission specs
  • .env.e2e.example template (real .env.e2e is gitignored)
  • Behat integration feature update

Related

Depends on: LibreCodeCoop/nfse-php#13 (DpsData and XmlBuilder federal fields)

…ement

Signed-off-by: Vitor Mattos <vitor@php.rio>
Signed-off-by: Vitor Mattos <vitor@php.rio>
Signed-off-by: Vitor Mattos <vitor@php.rio>
…oint

Add validation and persistence for PIS/COFINS situacao tributaria, tipo
retencao, base calculo, aliquotas, valores, IRRF, CSLL, CP, and
tributos percentage profiles. Also persist tributacao_federal_mode radio
selection (per_invoice_amounts | percentage_profile).

Signed-off-by: Vitor Mattos <vitor@php.rio>
- federalPayloadValues now accepts invoiceAmount for mode-aware calculation
- In percentage_profile mode: baseCalculo=invoiceAmount, valorPis and
  valorCofins calculated from stored aliquotas * invoiceAmount / 100
- Compute indicadorTributacao: 2 when any tributos_* percent setting is
  non-empty, otherwise 0
- Pass indicadorTributacao to DpsData in both emit() and reemit()

Signed-off-by: Vitor Mattos <vitor@php.rio>
…isibility

- Add PIS/COFINS situacao tributaria and tipo retencao selects
- Add base calculo, aliquota and valor PIS/COFINS inputs
- Add IRRF, CSLL, CP retention fields
- Add tributacao_federal_mode radio (per_invoice_amounts/percentage_profile)
- Add syncFederalMode() JS to toggle BC/valor fields vs tributos% rows
- Add tributos percentage profile rows for Perfil padrao and Simples Nacional
- Attach HTML ids to toggle targets

Signed-off-by: Vitor Mattos <vitor@php.rio>
Signed-off-by: Vitor Mattos <vitor@php.rio>
…deral

Signed-off-by: Vitor Mattos <vitor@php.rio>
Signed-off-by: Vitor Mattos <vitor@php.rio>
…emission

Add tests for:
- percentage_profile mode calculates valorPis and valorCofins from
  aliquotas x invoiceAmount and sets baseCalculo = invoiceAmount
- indicadorTributacao is set to 2 when any tributos_* percent setting is
  non-empty, and 0 otherwise
- Fix testCompanyServiceSelectionSupport to use source inspection
  instead of runtime check (Eloquent not available in module vendor)

Signed-off-by: Vitor Mattos <vitor@php.rio>
Signed-off-by: Vitor Mattos <vitor@php.rio>
Signed-off-by: Vitor Mattos <vitor@php.rio>
…ration

Signed-off-by: Vitor Mattos <vitor@php.rio>
Signed-off-by: Vitor Mattos <vitor@php.rio>
…outes

Signed-off-by: Vitor Mattos <vitor@php.rio>
…rvice is unavailable

When company service selection is supported but no default service is
resolved, keep emission readiness by falling back to nfse.item_lista_servico
and nfse.codigo_tributacao_nacional settings.

Signed-off-by: Vitor Mattos <vitor@php.rio>
Update isolation test to assert fallback to nfse.codigo_tributacao_nacional
when default service national tax code is missing.

Signed-off-by: Vitor Mattos <vitor@php.rio>
@vitormattos vitormattos merged commit 3ac31d3 into main Mar 31, 2026
9 checks passed
@vitormattos vitormattos deleted the feat/federal-taxation-percentage-profile-mode branch March 31, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant