• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wmixvideo / nfe / #9348

07 Jul 2026 02:20PM UTC coverage: 50.838% (+23.8%) from 26.996%
#9348

push

web-flow
Nt2020.005 (#1175)

* Implementação de serviço de recepção síncrono do MDF-e (MDFeRecepcaoSinc). Serviços Assíncronos serão desativados na data de 30 de Junho de 2024 conforme versa a NT 2024.001.

* Revert "Implementação de serviço de recepção síncrono do MDF-e (MDFeRecepcaoSinc). Serviços Assíncronos serão desativados na data de 30 de Junho de 2024 conforme versa a NT 2024.001."

This reverts commit d597f6919.

* Atualização dos schemas e campos conforme NT2023.004.

* Correção da Tag DFeReferenciado e adicionado validação para chave de acesso.

* Corrigindo a estrutura da Classe TCIBS - faltava o field vIBS.

Adiciondo static nas inner class para possibilitar a desserialização do xml do CT-e.

* Correção do set que deve ser um BigDecimal.

* Adequa campos nDI, nAdicao, nSeqAdic e nDraw à NT 2020.005 v1.21

Ajustes no grupo I01 (Declaração de Importação) do NFe 4.00 conforme
Nota Técnica 2020.005 v1.21 (seções 2.1.2, 2.1.8 e 3.2 do leiaute):

- nDI (I19): tamanho máximo alterado de 12 para 15 caracteres.
- nAdicao (I26): campo passa de obrigatório (1-1) para opcional (0-1),
  já que não deve ser preenchido no caso de DUImp.
- nSeqAdic (I27): tamanho máximo alterado de 3 para 5 dígitos.
- nDraw (I29a / I51 - detExport): campo deixa de ser numérico e passa
  a ser alfanumérico, com tamanho máximo de 20 caracteres (antes,
  numérico com até 11 dígitos).

Classes alteradas:
- NFNotaInfoItemProdutoDeclaracaoImportacao (nDI)
- NFNotaInfoItemProdutoDeclaracaoImportacaoAdicao (nAdicao, nSeqAdic, nDraw)
- NFNotaInfoItemDetalheExportacao (nDraw)
- DFIntegerValidador (novo método tamanho5)

Testes unitários correspondentes atualizados para refletir os novos
limites e a mudança de tipo do campo nDraw (BigInteger -> String).

---------

Co-authored-by: ediva <ediva@emsnote5>
Co-authored-by: Walter Portugal <walter@softlandsistemas.com.br>

10 of 10 new or added lines in 5 files covered. (100.0%)

2949 existing lines in 402 files now uncovered.

14927 of 29362 relevant lines covered (50.84%)

0.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/com/fincatto/documentofiscal/cte300/parsers/CTChaveParser.java
1
package com.fincatto.documentofiscal.cte300.parsers;
2

3
import com.fincatto.documentofiscal.DFModelo;
4
import com.fincatto.documentofiscal.DFUnidadeFederativa;
5
import com.fincatto.documentofiscal.cte.CTTipoEmissao;
6

7
import org.apache.commons.lang3.StringUtils;
8

9
import java.time.LocalDate;
10

11
public class CTChaveParser {
12

13
    private final String chave;
14

15
    public CTChaveParser(final String chave) {
×
16
        this.chave = StringUtils.stripToEmpty(chave).replaceAll("\\D", "");
×
17
        if (this.chave.length() != 44) {
×
UNCOV
18
            throw new IllegalArgumentException(String.format("A chave deve ter exatos 44 caracteres numericos: %s", chave));
×
19
        }
UNCOV
20
    }
×
21

22
    public String getChave() {
UNCOV
23
        return chave;
×
24
    }
25

26
    public DFUnidadeFederativa getNFUnidadeFederativa() {
UNCOV
27
        return DFUnidadeFederativa.valueOfCodigo(this.chave.substring(0, 2));
×
28
    }
29

30
    public LocalDate getDataEmissao() {
UNCOV
31
        return LocalDate.of(this.getDataEmissaoAno(), this.getDataEmissaoMes(), 1);
×
32
    }
33

34
    private int getDataEmissaoMes() {
UNCOV
35
        return Integer.parseInt(this.chave.substring(4, 6));
×
36
    }
37

38
    private int getDataEmissaoAno() {
UNCOV
39
        return 2000 + Integer.parseInt(this.chave.substring(2, 4));
×
40
    }
41

42
    public String getCnpjEmitente() {
UNCOV
43
        return this.chave.substring(6, 20);
×
44
    }
45

46
    public DFModelo getModelo() {
UNCOV
47
        return DFModelo.valueOfCodigo(this.chave.substring(20, 22));
×
48
    }
49

50
    public String getSerie() {
UNCOV
51
        return this.chave.substring(22, 25);
×
52
    }
53

54
    public String getNumero() {
UNCOV
55
        return this.chave.substring(25, 34);
×
56
    }
57

58
    public CTTipoEmissao getFormaEmissao() {
UNCOV
59
        return CTTipoEmissao.valueOfCodigo(this.chave.substring(34, 35));
×
60
    }
61

62
    public String getCodigoNumerico() {
UNCOV
63
        return this.chave.substring(35, 43);
×
64
    }
65

66
    public String getDV() {
UNCOV
67
        return this.chave.substring(43, 44);
×
68
    }
69

70
    public boolean isEmitidaContingenciaSCAN() {
UNCOV
71
        return this.getSerie().matches("9[0-9]{2}");
×
72
    }
73

74
    public boolean isEmitidaContingenciaSCVSP() {
UNCOV
75
        return this.chave.matches("\\d{34}6\\d{9}");
×
76
    }
77

78
    public boolean isEmitidaContingenciaSCVRS() {
UNCOV
79
        return this.chave.matches("\\d{34}7\\d{9}");
×
80
    }
81

82
    public String getFormatado() {
UNCOV
83
        return this.chave.replaceFirst("(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d{4})", "$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11");
×
84
    }
85
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc