Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
17 | class C176 extends Element implements ElementInterface |
||
18 | { |
||
19 | const REG = 'C176'; |
||
20 | const LEVEL = 4; |
||
21 | const PARENT = 'C170'; |
||
22 | |||
23 | protected $parameters = [ |
||
24 | 'COD_MOD_ULT_E' => [ |
||
25 | 'type' => 'string', |
||
26 | 'regex' => '^(01|55)$', |
||
27 | 'required' => false, |
||
28 | 'info' => 'Código do modelo do documento fiscal relativa a última entrada', |
||
29 | 'format' => '' |
||
30 | ], |
||
31 | 'NUM_DOC_ULT_E' => [ |
||
32 | 'type' => 'numeric', |
||
33 | 'regex' => '^(\d{0,9})$', |
||
34 | 'required' => false, |
||
35 | 'info' => 'Número do documento fiscal relativa a última entrada', |
||
36 | 'format' => '' |
||
37 | ], |
||
38 | 'SER_ULT_E' => [ |
||
39 | 'type' => 'string', |
||
40 | 'regex' => '^.{0,3}$', |
||
41 | 'required' => false, |
||
42 | 'info' => 'Série do documento fiscal relativa a última entrada', |
||
43 | 'format' => '' |
||
44 | ], |
||
45 | 'DT_ULT_E' => [ |
||
46 | 'type' => 'string', |
||
47 | 'regex' => '^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])([12]\d{3})$', |
||
48 | 'required' => false, |
||
49 | 'info' => 'Data relativa a última entrada da mercadoria', |
||
50 | 'format' => '' |
||
51 | ], |
||
52 | 'COD_PART_ULT_E' => [ |
||
53 | 'type' => 'string', |
||
54 | 'regex' => '^.{0,60}$', |
||
55 | 'required' => false, |
||
56 | 'info' => 'Código do participante (do emitente do documento relativa a última entrada)', |
||
57 | 'format' => '' |
||
58 | ], |
||
59 | 'QUANT_ULT_E' => [ |
||
60 | 'type' => 'numeric', |
||
61 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
62 | 'required' => false, |
||
63 | 'info' => 'Quantidade do item relativa a última entrada', |
||
64 | 'format' => '15v3' |
||
65 | ], |
||
66 | 'VL_UNIT_ULT_E' => [ |
||
67 | 'type' => 'numeric', |
||
68 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
69 | 'required' => false, |
||
70 | 'info' => 'Valor unitário da mercadoria constante na NF relativa a última entrada.', |
||
71 | 'format' => '15v2' |
||
72 | ], |
||
73 | 'VL_UNIT_BC_ST' => [ |
||
74 | 'type' => 'numeric', |
||
75 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
76 | 'required' => false, |
||
77 | 'info' => 'Valor unitário da base de cálculo do imposto pago por substituição.', |
||
78 | 'format' => '15v2' |
||
79 | ], |
||
80 | 'CHAVE_NFE_ULT_E' => [ |
||
81 | 'type' => 'numeric', |
||
82 | 'regex' => '^([0-9]{44})?$', |
||
83 | 'required' => false, |
||
84 | 'info' => 'Número completo da chave da NFe relativo à última entrada', |
||
85 | 'format' => '' |
||
86 | ], |
||
87 | 'NUM_ITEM_ULT_E' => [ |
||
88 | 'type' => 'numeric', |
||
89 | 'regex' => '^(\d{0,3})$', |
||
90 | 'required' => false, |
||
91 | 'info' => 'Número sequencial do item na NF entrada', |
||
92 | 'format' => '' |
||
93 | ], |
||
94 | 'VL_UNIT_BC_ICMS_ULT_E' => [ |
||
95 | 'type' => 'numeric', |
||
96 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
97 | 'required' => false, |
||
98 | 'info' => 'Valor unitário da base de cálculo da operação própria do remetente |
||
99 | sob o regime comum de tributação', |
||
100 | 'format' => '15v2' |
||
101 | ], |
||
102 | 'ALIQ_ICMS_ULT_E' => [ |
||
103 | 'type' => 'numeric', |
||
104 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
105 | 'required' => false, |
||
106 | 'info' => 'Alíquota do ICMS aplicável à última entrada da mercadoria', |
||
107 | 'format' => '15v2' |
||
108 | ], |
||
109 | 'VL_UNIT_LIMITE_BC_ICMS_ULT_E' => [ |
||
110 | 'type' => 'numeric', |
||
111 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
112 | 'required' => false, |
||
113 | 'info' => 'Valor unitário da base de cálculo do ICMS relativo à última entrada da mercadoria', |
||
114 | 'format' => '15v2' |
||
115 | ], |
||
116 | 'VL_UNIT_ICMS_ULT_E' => [ |
||
117 | 'type' => 'numeric', |
||
118 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
119 | 'required' => false, |
||
120 | 'info' => 'Valor unitário do crédito de ICMS sobre operações próprias do remetente', |
||
121 | 'format' => '15v2' |
||
122 | ], |
||
123 | 'ALIQ_ST_ULT_E' => [ |
||
124 | 'type' => 'numeric', |
||
125 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
126 | 'required' => false, |
||
127 | 'info' => 'Alíquota do ICMS ST relativa à última entrada da mercadoria', |
||
128 | 'format' => '15v2' |
||
129 | ], |
||
130 | 'VL_UNIT_RES' => [ |
||
131 | 'type' => 'numeric', |
||
132 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
133 | 'required' => false, |
||
134 | 'info' => 'Valor unitário do ressarcimento (parcial ou completo) de ICMS decorrente da quebra da ST', |
||
135 | 'format' => '15v2' |
||
136 | ], |
||
137 | 'COD_RESP_RET' => [ |
||
138 | 'type' => 'numeric', |
||
139 | 'regex' => '^([1-3]{1})$', |
||
140 | 'required' => false, |
||
141 | 'info' => 'Código que indica o responsável pela retenção do ICMS-ST:', |
||
142 | 'format' => '' |
||
143 | ], |
||
144 | 'COD_MOT_RES' => [ |
||
145 | 'type' => 'numeric', |
||
146 | 'regex' => '^([1-6]{1}|9)$', |
||
147 | 'required' => false, |
||
148 | 'info' => 'Código do motivo do ressarcimento', |
||
149 | 'format' => '' |
||
150 | ], |
||
151 | 'CHAVE_NFE_RET' => [ |
||
152 | 'type' => 'numeric', |
||
153 | 'regex' => '^([0-9]{44})?$', |
||
154 | 'required' => false, |
||
155 | 'info' => 'Número completo da chave da NF-e emitida pelo substituto', |
||
156 | 'format' => '' |
||
157 | ], |
||
158 | 'COD_PART_NFE_RET' => [ |
||
159 | 'type' => 'string', |
||
160 | 'regex' => '^.{0,60}$', |
||
161 | 'required' => false, |
||
162 | 'info' => 'Código do participante do emitente da NF-e em que houve a retenção do ICMS-ST', |
||
163 | 'format' => '' |
||
164 | ], |
||
165 | 'SER_NFE_RET' => [ |
||
166 | 'type' => 'string', |
||
167 | 'regex' => '^.{0,3}$', |
||
168 | 'required' => false, |
||
169 | 'info' => 'Série da NF-e em que houve a retenção do ICMS- ST', |
||
170 | 'format' => '' |
||
171 | ], |
||
172 | 'NUM_NFE_RET' => [ |
||
173 | 'type' => 'numeric', |
||
174 | 'regex' => '^(\d{0,9})$', |
||
175 | 'required' => false, |
||
176 | 'info' => 'Número da NF-e em que houve a retenção do ICMS-ST', |
||
177 | 'format' => '' |
||
178 | ], |
||
179 | 'ITEM_NFE_RET' => [ |
||
180 | 'type' => 'numeric', |
||
181 | 'regex' => '^(\d{0,3})$', |
||
182 | 'required' => false, |
||
183 | 'info' => 'Número sequencial do item na NF-e em que houve a retenção do ICMS-ST', |
||
184 | 'format' => '' |
||
185 | ], |
||
186 | 'COD_DA' => [ |
||
187 | 'type' => 'string', |
||
188 | 'regex' => '^(0|1)$', |
||
189 | 'required' => false, |
||
190 | 'info' => 'Código do modelo do documento de arrecadação', |
||
191 | 'format' => '' |
||
192 | ], |
||
193 | 'NUM_DA' => [ |
||
194 | 'type' => 'string', |
||
195 | 'regex' => '^(.*)$', |
||
196 | 'required' => false, |
||
197 | 'info' => 'Número do documento de arrecadação estadual, se houver', |
||
198 | 'format' => '' |
||
199 | ], |
||
200 | 'VL_UNIT_RES_FCP_ST' => [ |
||
201 | 'type' => 'numeric', |
||
202 | 'regex' => '^\d+(\.\d*)?|\.\d+$', |
||
203 | 'required' => false, |
||
204 | 'info' => 'Valor unitário do ressarcimento (parcial ou completo) de FCP decorrente da quebra da ST', |
||
205 | 'format' => '15v2' |
||
206 | ], |
||
207 | ]; |
||
208 | |||
209 | /** |
||
210 | * Constructor |
||
211 | * @param \stdClass $std |
||
212 | */ |
||
213 | public function __construct(\stdClass $std) |
||
219 | |||
220 | public function postValidation() |
||
296 | } |
||
297 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.