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

wmixvideo / nfe / #9462

23 Jul 2026 08:39PM UTC coverage: 50.977% (-0.8%) from 51.794%
#9462

push

web-flow
Refatoração de chaves para suportar CNPJ alfanumérico (NT 2026.004) (#1181)

* Javadoc Warnings invalid input: '<' e '&' literais

* Javadoc Warnings invalid input: '<' e '&' literais

* Refatoração de chaves para suportar CNPJ alfanumérico (NT 2026.004)

* Normaliza char para maiusculo na chave

O cálculo do DV usa valores[i - 1] - '0'. Se a chave vier com letras minúsculas (o que é aceito por alguns validadores de CNPJ na base), o DV calculado muda (ex.: 'a' - '0' != 'A' - '0'), gerando falsos negativos/positivos. Normalize o caractere para maiúsculo antes de converter para o valor numérico.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Diego Fincatto <58352+fincatto@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

12 of 14 new or added lines in 9 files covered. (85.71%)

757 existing lines in 44 files now uncovered.

15132 of 29684 relevant lines covered (50.98%)

0.51 hits per line

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

69.52
/src/main/java/com/fincatto/documentofiscal/nfe400/classes/nota/NFNotaInfoIdentificacao.java
1
package com.fincatto.documentofiscal.nfe400.classes.nota;
2

3
import com.fincatto.documentofiscal.DFAmbiente;
4
import com.fincatto.documentofiscal.DFBase;
5
import com.fincatto.documentofiscal.DFModelo;
6
import com.fincatto.documentofiscal.DFUnidadeFederativa;
7
import com.fincatto.documentofiscal.nfe.NFTipoEmissao;
8
import com.fincatto.documentofiscal.nfe400.classes.NFCredito;
9
import com.fincatto.documentofiscal.nfe400.classes.NFDebito;
10
import com.fincatto.documentofiscal.nfe400.classes.NFFinalidade;
11
import com.fincatto.documentofiscal.nfe400.classes.NFProcessoEmissor;
12
import com.fincatto.documentofiscal.nfe400.classes.NFTipo;
13
import com.fincatto.documentofiscal.nfe400.classes.NFTipoImpressao;
14
import com.fincatto.documentofiscal.validadores.DFIntegerValidador;
15
import com.fincatto.documentofiscal.validadores.DFListValidador;
16
import com.fincatto.documentofiscal.validadores.DFStringValidador;
17
import java.time.LocalDate;
18
import java.time.ZonedDateTime;
19
import java.util.List;
20
import org.apache.commons.lang3.StringUtils;
21
import org.simpleframework.xml.Element;
22
import org.simpleframework.xml.ElementList;
23

24
public class NFNotaInfoIdentificacao extends DFBase {
1✔
25
    private static final long serialVersionUID = -2568396066960865875L;
26

27
    @Element(name = "cUF")
28
    private DFUnidadeFederativa uf;
29

30
    @Element(name = "cNF")
31
    private String codigoRandomico;
32

33
    @Element(name = "natOp")
34
    private String naturezaOperacao;
35

36
    @Element(name = "mod")
37
    private DFModelo modelo;
38

39
    @Element(name = "serie")
40
    private String serie;
41

42
    @Element(name = "nNF")
43
    private String numeroNota;
44

45
    @Element(name = "dhEmi")
46
    private ZonedDateTime dataHoraEmissao;
47

48
    @Element(name = "dhSaiEnt", required = false)
49
    private ZonedDateTime dataHoraSaidaOuEntrada;
50

51
    @Element(name = "tpNF")
52
    private NFTipo tipo;
53

54
    @Element(name = "idDest")
55
    private NFIdentificadorLocalDestinoOperacao identificadorLocalDestinoOperacao;
56

57
    @Element(name = "cMunFG")
58
    private String codigoMunicipio; // B12
59
    
60
    @Element(required = false)
61
    private String cMunFGIBS; // B12a
62

63
    @Element(name = "tpImp")
64
    private NFTipoImpressao tipoImpressao;
65

66
    @Element(name = "tpEmis")
67
    private NFTipoEmissao tipoEmissao;
68

69
    @Element(name = "cDV")
70
    private Integer digitoVerificador;
71

72
    @Element(name = "tpAmb")
73
    private DFAmbiente ambiente;
74

75
    @Element(name = "finNFe")
76
    private NFFinalidade finalidade; // B25
77
    
78
    @Element(name = "tpNFDebito", required = false)    
79
    private NFDebito tpNFDebito; // B25.1
80
    
81
    @Element(name = "tpNFCredito",required = false)
82
    private NFCredito tpNFCredito; // B25.2
83

84
    @Element(name = "indFinal")
85
    private NFOperacaoConsumidorFinal operacaoConsumidorFinal; // B25a
86

87
    @Element(name = "indPres")
88
    private NFIndicadorPresencaComprador indicadorPresencaComprador; // B25b
89

90
    @Element(name = "indIntermed", required = false)
91
    private NFIndicadorIntermediador indIntermed; // B25c
92
    
93
    @Element(name = "procEmi")
94
    private NFProcessoEmissor programaEmissor;
95

96
    @Element(name = "verProc")
97
    private String versaoEmissor;
98

99
    @Element(name = "dhCont", required = false)
100
    private ZonedDateTime dataHoraContigencia;
101

102
    @Element(name = "xJust", required = false)
103
    private String justificativaEntradaContingencia;
104

105
    @ElementList(entry = "NFref", inline = true, required = false)
106
    private List<NFInfoReferenciada> referenciadas;
107
    
108
    @Element(name = "gCompraGov", required = false)
109
    private NFNotaInfoIdentificacaoCompraGov gCompraGov; // B31
110
    
111
    @Element(name = "gPagAntecipado", required = false)
112
    private NFNotaInfoIdentificacaoPagAntecipado gPagAntecipado; // BB01
113

114
    /**
115
     * B10a - Data da previsão de entrega ou disponibilização do bem
116
     */
117
    @Element(name = "dPrevEntrega", required = false)
118
    private LocalDate dataPrevistaEntrega;
119

120
    public void setUf(final DFUnidadeFederativa uf) {
121
        this.uf = uf;
1✔
122
    }
1✔
123

124
    public void setCodigoRandomico(final String codigoRandomico) {
125
        DFStringValidador.exatamente8(codigoRandomico, "Codigo Randomico");
1✔
126
        DFStringValidador.validaCodigoRandomico(codigoRandomico, "Codigo Randomico");
1✔
127
        if(StringUtils.isNotBlank(numeroNota) && StringUtils.equals(numeroNota.substring(1), codigoRandomico)){
1✔
128
            throw new IllegalStateException(String.format("N\u00FAmero da nota(%s) e c\u00F3digo(%s) n\u00E3o podem ser iguais", numeroNota.substring(1), codigoRandomico));
1✔
129
        }
130
        this.codigoRandomico = codigoRandomico;
1✔
131
    }
1✔
132

133
    public void setNaturezaOperacao(final String naturezaOperacao) {
134
        DFStringValidador.tamanho60(naturezaOperacao, "Natureza da Operacao");
1✔
135
        this.naturezaOperacao = naturezaOperacao;
1✔
136
    }
1✔
137

138
    public void setModelo(final DFModelo modelo) {
139
        this.modelo = modelo;
1✔
140
    }
1✔
141

142
    public void setSerie(final String serie) {
143
        DFStringValidador.validador(serie, "Serie", 3, false, true);
1✔
144
        this.serie = serie;
1✔
145
    }
1✔
146

147
    public void setNumeroNota(final String numeroNota) {
148
        DFStringValidador.tamanho9(numeroNota, "Numero da Nota");
1✔
149
        if(StringUtils.isNotBlank(codigoRandomico) && StringUtils.equals(numeroNota.substring(1), codigoRandomico)){
1✔
150
            throw new IllegalStateException(String.format("N\u00FAmero da nota(%s) e c\u00F3digo(%s) n\u00E3o podem ser iguais", numeroNota.substring(1), codigoRandomico));
1✔
151
        }
152
        this.numeroNota = numeroNota;
1✔
153
    }
1✔
154

155
    public void setDataHoraEmissao(final ZonedDateTime dataEmissao) {
156
        this.dataHoraEmissao = dataEmissao;
1✔
157
    }
1✔
158

159
    public void setDataHoraSaidaOuEntrada(final ZonedDateTime dataHoraSaidaOuEntrada) {
160
        this.dataHoraSaidaOuEntrada = dataHoraSaidaOuEntrada;
1✔
161
    }
1✔
162

163
    public void setTipo(final NFTipo tipo) {
164
        this.tipo = tipo;
1✔
165
    }
1✔
166

167
    public void setCodigoMunicipio(final String codigoMunicipio) {
168
        DFStringValidador.exatamente7N(codigoMunicipio, "Codigo Municipio");
1✔
169
        this.codigoMunicipio = codigoMunicipio;
1✔
170
    }
1✔
171

172
    public void setCMunFGIBS(String cMunFGIBS) {
UNCOV
173
       this.cMunFGIBS = cMunFGIBS;
×
UNCOV
174
    }
×
175

176
    public void setReferenciadas(final List<NFInfoReferenciada> referenciadas) {
177
        DFListValidador.tamanho500(referenciadas, "Referenciadas");
1✔
178
        this.referenciadas = referenciadas;
1✔
179
    }
1✔
180

181
    public NFNotaInfoIdentificacaoCompraGov getGCompraGov() {
UNCOV
182
        return gCompraGov;
×
183
    }
184

185
    public NFNotaInfoIdentificacaoPagAntecipado getGPagAntecipado() {
UNCOV
186
       return gPagAntecipado;
×
187
    }
188
    
189
    public void setTipoImpressao(final NFTipoImpressao tipoImpressao) {
190
        this.tipoImpressao = tipoImpressao;
1✔
191
    }
1✔
192

193
    public void setTipoEmissao(final NFTipoEmissao tipoEmissao) {
194
        this.tipoEmissao = tipoEmissao;
1✔
195
    }
1✔
196

197
    public void setDigitoVerificador(final Integer digitoVerificador) {
198
        DFIntegerValidador.exatamente1(digitoVerificador, "DV");
1✔
199
        this.digitoVerificador = digitoVerificador;
1✔
200
    }
1✔
201

202
    public void setAmbiente(final DFAmbiente ambiente) {
203
        this.ambiente = ambiente;
1✔
204
    }
1✔
205

206
    public void setFinalidade(final NFFinalidade finalidade) {
207
        this.finalidade = finalidade;
1✔
208
    }
1✔
209

210
    public NFDebito getTpNFDebito() {
UNCOV
211
       return tpNFDebito;
×
212
    }
213

214
    public NFCredito getTpNFCredito() {
UNCOV
215
        return tpNFCredito;
×
216
    }
217

218
    public void setProgramaEmissor(final NFProcessoEmissor programaEmissor) {
219
        this.programaEmissor = programaEmissor;
1✔
220
    }
1✔
221

222
    public void setVersaoEmissor(final String versaoEmissor) {
223
        DFStringValidador.tamanho20(versaoEmissor, "Versao Emissor");
1✔
224
        this.versaoEmissor = versaoEmissor;
1✔
225
    }
1✔
226

227
    public void setDataHoraContigencia(final ZonedDateTime dataHoraContigencia) {
228
        this.dataHoraContigencia = dataHoraContigencia;
1✔
229
    }
1✔
230

231
    public void setJustificativaEntradaContingencia(final String justificativaEntradaContingencia) {
232
        DFStringValidador.tamanho15a256(justificativaEntradaContingencia, "Justificativa Entrada Contingencia");
1✔
233
        this.justificativaEntradaContingencia = justificativaEntradaContingencia;
1✔
234
    }
1✔
235

236
    public void setIdentificadorLocalDestinoOperacao(final NFIdentificadorLocalDestinoOperacao identificadorLocalDestinoOperacao) {
237
        this.identificadorLocalDestinoOperacao = identificadorLocalDestinoOperacao;
1✔
238
    }
1✔
239

240
    public void setOperacaoConsumidorFinal(final NFOperacaoConsumidorFinal operacaoConsumidorFinal) {
241
        this.operacaoConsumidorFinal = operacaoConsumidorFinal;
1✔
242
    }
1✔
243

244
    public void setIndicadorPresencaComprador(final NFIndicadorPresencaComprador indicadorPresencaComprador) {
245
        this.indicadorPresencaComprador = indicadorPresencaComprador;
1✔
246
    }
1✔
247

248
        public void setIndIntermed(final NFIndicadorIntermediador indIntermed) {
249
                this.indIntermed = indIntermed;
1✔
250
        }
1✔
251
        
252
    public DFUnidadeFederativa getUf() {
253
        return this.uf;
1✔
254
    }
255

256
    public String getCodigoRandomico() {
257
        return this.codigoRandomico;
1✔
258
    }
259

260
    public String getNaturezaOperacao() {
UNCOV
261
        return this.naturezaOperacao;
×
262
    }
263

264
    public DFModelo getModelo() {
265
        return this.modelo;
1✔
266
    }
267

268
    public String getSerie() {
269
        return this.serie;
1✔
270
    }
271

272
    public String getNumeroNota() {
273
        return this.numeroNota;
1✔
274
    }
275

276
    public ZonedDateTime getDataHoraEmissao() {
277
        return this.dataHoraEmissao;
1✔
278
    }
279

280
    public ZonedDateTime getDataHoraSaidaOuEntrada() {
UNCOV
281
        return this.dataHoraSaidaOuEntrada;
×
282
    }
283

284
    public NFTipo getTipo() {
285
        return this.tipo;
1✔
286
    }
287

288
    public NFIdentificadorLocalDestinoOperacao getIdentificadorLocalDestinoOperacao() {
289
        return this.identificadorLocalDestinoOperacao;
1✔
290
    }
291

292
    public String getCodigoMunicipio() {
UNCOV
293
        return this.codigoMunicipio;
×
294
    }
295

296
    public String getCMunFGIBS() {
UNCOV
297
        return cMunFGIBS;
×
298
    }
299
    
300
    public NFTipoImpressao getTipoImpressao() {
UNCOV
301
        return this.tipoImpressao;
×
302
    }
303

304
    public NFTipoEmissao getTipoEmissao() {
305
        return this.tipoEmissao;
1✔
306
    }
307

308
    public Integer getDigitoVerificador() {
UNCOV
309
        return this.digitoVerificador;
×
310
    }
311

312
    public DFAmbiente getAmbiente() {
UNCOV
313
        return this.ambiente;
×
314
    }
315

316
    public NFFinalidade getFinalidade() {
UNCOV
317
        return this.finalidade;
×
318
    }
319

320
    public void setTpNFDebito(NFDebito tpNFDebito) {
UNCOV
321
        this.tpNFDebito = tpNFDebito;
×
UNCOV
322
    }
×
323
    
324
    public void setTpNFCredito(NFCredito tpNFCredito) {
UNCOV
325
        this.tpNFCredito = tpNFCredito;
×
UNCOV
326
    }
×
327
    
328
    public NFOperacaoConsumidorFinal getOperacaoConsumidorFinal() {
329
        return this.operacaoConsumidorFinal;
1✔
330
    }
331

332
    public NFIndicadorPresencaComprador getIndicadorPresencaComprador() {
UNCOV
333
        return this.indicadorPresencaComprador;
×
334
    }
335
    
336
    public NFIndicadorIntermediador getIndIntermed() {
UNCOV
337
                return indIntermed;
×
338
        }
339

340
    public NFProcessoEmissor getProgramaEmissor() {
UNCOV
341
        return this.programaEmissor;
×
342
    }
343

344
    public String getVersaoEmissor() {
UNCOV
345
        return this.versaoEmissor;
×
346
    }
347

348
    public ZonedDateTime getDataHoraContigencia() {
UNCOV
349
        return this.dataHoraContigencia;
×
350
    }
351

352
    public String getJustificativaEntradaContingencia() {
UNCOV
353
        return this.justificativaEntradaContingencia;
×
354
    }
355

356
    public List<NFInfoReferenciada> getReferenciadas() {
UNCOV
357
        return this.referenciadas;
×
358
    }
359
    
360
    public void setGCompraGov(NFNotaInfoIdentificacaoCompraGov gCompraGov) {
UNCOV
361
       this.gCompraGov = gCompraGov;
×
UNCOV
362
    }
×
363
    
364
    public void setGPagAntecipado(NFNotaInfoIdentificacaoPagAntecipado gPagAntecipado) {
UNCOV
365
        this.gPagAntecipado = gPagAntecipado;
×
UNCOV
366
    }
×
367

368
    public LocalDate getDataPrevistaEntrega() {
UNCOV
369
        return dataPrevistaEntrega;
×
370
    }
371

372
    public void setDataPrevistaEntrega(LocalDate dataPrevistaEntrega) {
UNCOV
373
        this.dataPrevistaEntrega = dataPrevistaEntrega;
×
UNCOV
374
    }
×
375
        
376
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc