Complex classes like Evento often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Evento, and based on these observations, apply Extract Interface, too.
| 1 | <?php | ||
| 37 | class Evento extends Retorno | ||
|  | |||
| 38 | { | ||
| 39 | |||
| 40 | const VERSAO = '1.00'; | ||
| 41 | |||
| 42 | const TIPO_CANCELAMENTO = '110111'; | ||
| 43 | |||
| 44 | private $id; | ||
| 45 | private $orgao; | ||
| 46 | private $identificador; | ||
| 47 | private $chave; | ||
| 48 | private $data; | ||
| 49 | private $tipo; | ||
| 50 | private $sequencia; | ||
| 51 | private $descricao; | ||
| 52 | private $numero; | ||
| 53 | private $justificativa; | ||
| 54 | private $email; | ||
| 55 | private $modelo; | ||
| 56 | private $informacao; | ||
| 57 | |||
| 58 | 6 | public function __construct($evento = array()) | |
| 62 | |||
| 63 | /** | ||
| 64 | * Identificador da TAG a ser assinada, a regra de formação do Id é: "ID" + | ||
| 65 | * tpEvento + chave da NF-e + nSeqEvento | ||
| 66 | */ | ||
| 67 | 5 | public function getID($normalize = false) | |
| 68 |     { | ||
| 69 | 5 |         if (!$normalize) { | |
| 70 | 2 | return $this->id; | |
| 71 | } | ||
| 72 | 4 | return 'ID'.$this->id; | |
| 73 | } | ||
| 74 | |||
| 75 | 6 | public function setID($id) | |
| 80 | |||
| 81 | /** | ||
| 82 | * Código do órgão de recepção do Evento. Utilizar a Tabela do IBGE | ||
| 83 | * extendida, utilizar 91 para identificar o Ambiente Nacional | ||
| 84 | */ | ||
| 85 | 4 | public function getOrgao($normalize = false) | |
| 86 |     { | ||
| 87 | 4 |         if (!$normalize || is_numeric($this->orgao)) { | |
| 88 | 2 | return $this->orgao; | |
| 89 | } | ||
| 90 | |||
| 91 | 4 | $db = SEFAZ::getInstance()->getConfiguracao()->getBanco(); | |
| 92 | 4 | return $db->getCodigoOrgao($this->orgao); | |
| 93 | } | ||
| 94 | |||
| 95 | 6 | public function setOrgao($orgao) | |
| 100 | |||
| 101 | /** | ||
| 102 | * Identificação do autor do evento | ||
| 103 | */ | ||
| 104 | 4 | public function getIdentificador($normalize = false) | |
| 105 |     { | ||
| 106 | 4 |         if (!$normalize) { | |
| 107 | 4 | return $this->identificador; | |
| 108 | } | ||
| 109 | 4 | return $this->identificador; | |
| 110 | } | ||
| 111 | |||
| 112 | 6 | public function setIdentificador($identificador) | |
| 117 | |||
| 118 | /** | ||
| 119 | * Chave de Acesso da NF-e vinculada ao evento | ||
| 120 | */ | ||
| 121 | 4 | public function getChave($normalize = false) | |
| 122 |     { | ||
| 123 | 4 |         if (!$normalize) { | |
| 124 | 2 | return $this->chave; | |
| 125 | } | ||
| 126 | 4 | return $this->chave; | |
| 127 | } | ||
| 128 | |||
| 129 | 6 | public function setChave($chave) | |
| 134 | |||
| 135 | /** | ||
| 136 | * Data e Hora do Evento, formato UTC (AAAA-MM-DDThh:mm:ssTZD, onde TZD = | ||
| 137 | * +hh:mm ou -hh:mm) | ||
| 138 | */ | ||
| 139 | 4 | public function getData($normalize = false) | |
| 140 |     { | ||
| 141 | 4 |         if (!$normalize) { | |
| 142 | 1 | return $this->data; | |
| 143 | } | ||
| 144 | 4 | return Util::toDateTime($this->data); | |
| 145 | } | ||
| 146 | |||
| 147 | 6 | public function setData($data) | |
| 148 |     { | ||
| 149 | 6 |         if (!is_numeric($data)) { | |
| 150 | 6 | $data = strtotime($data); | |
| 151 | 6 | } | |
| 152 | 6 | $this->data = $data; | |
| 153 | 6 | return $this; | |
| 154 | } | ||
| 155 | |||
| 156 | /** | ||
| 157 | * Tipo do Evento | ||
| 158 | */ | ||
| 159 | 4 | public function getTipo($normalize = false) | |
| 160 |     { | ||
| 161 | 4 |         if (!$normalize) { | |
| 162 | 1 | return $this->tipo; | |
| 163 | } | ||
| 164 | 4 | return $this->tipo; | |
| 165 | } | ||
| 166 | |||
| 167 | 6 | public function setTipo($tipo) | |
| 172 | |||
| 173 | /** | ||
| 174 | * Seqüencial do evento para o mesmo tipo de evento. Para maioria dos | ||
| 175 | * eventos será 1, nos casos em que possa existir mais de um evento, como é | ||
| 176 | * o caso da carta de correção, o autor do evento deve numerar de forma | ||
| 177 | * seqüencial. | ||
| 178 | */ | ||
| 179 | 4 | public function getSequencia($normalize = false) | |
| 180 |     { | ||
| 181 | 4 |         if (!$normalize) { | |
| 182 | 1 | return $this->sequencia; | |
| 183 | } | ||
| 184 | 4 | return $this->sequencia; | |
| 185 | } | ||
| 186 | |||
| 187 | 6 | public function setSequencia($sequencia) | |
| 192 | |||
| 193 | /** | ||
| 194 | * Descrição do Evento | ||
| 195 | */ | ||
| 196 | 4 | public function getDescricao($normalize = false) | |
| 197 |     { | ||
| 198 | 4 |         if (!$normalize) { | |
| 199 | 1 | return $this->descricao; | |
| 200 | } | ||
| 201 | 4 | return $this->descricao; | |
| 202 | } | ||
| 203 | |||
| 204 | 6 | public function setDescricao($descricao) | |
| 209 | |||
| 210 | /** | ||
| 211 | * Número do Protocolo de Status da NF-e. 1 posição (1 – Secretaria de | ||
| 212 | * Fazenda Estadual 2 – Receita Federal); 2 posições ano; 10 seqüencial no | ||
| 213 | * ano. | ||
| 214 | */ | ||
| 215 | 4 | public function getNumero($normalize = false) | |
| 216 |     { | ||
| 217 | 4 |         if (!$normalize) { | |
| 218 | 1 | return $this->numero; | |
| 219 | } | ||
| 220 | 4 | return $this->numero; | |
| 221 | } | ||
| 222 | |||
| 223 | 6 | public function setNumero($numero) | |
| 228 | |||
| 229 | /** | ||
| 230 | * Justificativa do cancelamento | ||
| 231 | */ | ||
| 232 | 4 | public function getJustificativa($normalize = false) | |
| 233 |     { | ||
| 234 | 4 |         if (!$normalize) { | |
| 235 | 1 | return $this->justificativa; | |
| 236 | } | ||
| 237 | 4 | return $this->justificativa; | |
| 238 | } | ||
| 239 | |||
| 240 | 6 | public function setJustificativa($justificativa) | |
| 245 | |||
| 246 | /** | ||
| 247 | * email do destinatário | ||
| 248 | */ | ||
| 249 | 2 | public function getEmail($normalize = false) | |
| 250 |     { | ||
| 251 | 2 |         if (!$normalize) { | |
| 252 | 2 | return $this->email; | |
| 253 | } | ||
| 254 | return $this->email; | ||
| 255 | } | ||
| 256 | |||
| 257 | 6 | public function setEmail($email) | |
| 262 | |||
| 263 | /** | ||
| 264 | * Código do modelo do Documento Fiscal. 55 = NF-e; 65 = NFC-e. | ||
| 265 | * @param boolean $normalize informa se o modelo deve estar no formato do XML | ||
| 266 | * @return mixed modelo do Envio | ||
| 267 | */ | ||
| 268 | 3 | public function getModelo($normalize = false) | |
| 269 |     { | ||
| 270 | 3 |         if (!$normalize) { | |
| 271 | 3 | return $this->modelo; | |
| 272 | } | ||
| 273 |         switch ($this->modelo) { | ||
| 274 | case Nota::MODELO_NFE: | ||
| 275 | return '55'; | ||
| 276 | case Nota::MODELO_NFCE: | ||
| 277 | return '65'; | ||
| 278 | } | ||
| 279 | return $this->modelo; | ||
| 280 | } | ||
| 281 | |||
| 282 | /** | ||
| 283 | * Altera o valor do Modelo para o informado no parâmetro | ||
| 284 | * @param mixed $modelo novo valor para Modelo | ||
| 285 | * @return Envio A própria instância da classe | ||
| 286 | */ | ||
| 287 | 6 | public function setModelo($modelo) | |
| 300 | |||
| 301 | /** | ||
| 302 | * Resposta de informação do evento | ||
| 303 | */ | ||
| 304 | 3 | public function getInformacao() | |
| 305 |     { | ||
| 306 | 3 | return $this->informacao; | |
| 307 | } | ||
| 308 | |||
| 309 | 6 | public function setInformacao($informacao) | |
| 314 | |||
| 315 | /** | ||
| 316 | * Informa se a identificação é um CNPJ | ||
| 317 | */ | ||
| 318 | 4 | public function isCNPJ() | |
| 319 |     { | ||
| 320 | 4 | return strlen($this->getIdentificador()) == 14; | |
| 321 | } | ||
| 322 | |||
| 323 | /** | ||
| 324 | * Informa se o lote já foi processado e já tem um protocolo | ||
| 325 | */ | ||
| 326 | 3 | public function isProcessado() | |
| 327 |     { | ||
| 328 | 3 | return $this->getStatus() == '128'; | |
| 330 | |||
| 331 | /** | ||
| 332 | * Informa se a nota foi cancelada com sucesso | ||
| 333 | */ | ||
| 334 | 1 | public function isCancelado() | |
| 338 | |||
| 339 | 1 | public function toArray($recursive = false) | |
| 357 | |||
| 358 | 6 | public function fromArray($evento = array()) | |
| 433 | |||
| 434 | /** | ||
| 435 | * Gera o ID, a regra de formação do Id é: "ID" + | ||
| 436 | * tpEvento + chave da NF-e + nSeqEvento | ||
| 437 | */ | ||
| 438 | 4 | public function gerarID() | |
| 448 | |||
| 449 | 4 | public function getNode($name = null) | |
| 493 | |||
| 494 | 2 | public function getReturnNode() | |
| 538 | |||
| 539 | 3 | public function loadNode($element, $name = null) | |
| 573 | |||
| 574 | 3 | private function getConteudo($dom) | |
| 594 | |||
| 595 | 3 | public function envia($dom) | |
| 613 | |||
| 614 | /** | ||
| 615 | * Adiciona a informação no XML do evento | ||
| 616 | */ | ||
| 617 | 3 | public function addInformacao($dom) | |
| 647 | |||
| 648 | /** | ||
| 649 | * Assina o XML com a assinatura eletrônica do tipo A1 | ||
| 650 | */ | ||
| 651 | 4 | public function assinar($dom = null) | |
| 667 | |||
| 668 | /** | ||
| 669 | * Valida o documento após assinar | ||
| 670 | */ | ||
| 671 | 4 | public function validar($dom) | |
| 694 | } | ||
| 695 | 
The class complexity is the sum of the complexity of all methods. A very high value is usually an indication that your class does not follow the single reponsibility principle and does more than one job.
Some resources for further reading:
You can also find more detailed suggestions for refactoring in the “Code” section of your repository.