Commit 1ac4ca34a2ff30bdca2f8a1c5afa2df25dd80a9d

Authored by Guilherme Andrade Del Cantoni
1 parent fb0705da

Correção de bug de loop infinito em recebimento de processo pelo mesmo sistema de envio

Showing 1 changed file with 192 additions and 216 deletions   Show diff stats
rn/PendenciasTramiteRN.php
1 <?php 1 <?php
  2 +
2 require_once dirname(__FILE__) . '/../../../SEI.php'; 3 require_once dirname(__FILE__) . '/../../../SEI.php';
3 4
4 error_reporting(E_ALL); 5 error_reporting(E_ALL);
@@ -6,247 +7,222 @@ error_reporting(E_ALL); @@ -6,247 +7,222 @@ error_reporting(E_ALL);
6 //TODO: Modificar nome da classe e método para outro mais apropriado 7 //TODO: Modificar nome da classe e método para outro mais apropriado
7 class PendenciasTramiteRN extends InfraRN { 8 class PendenciasTramiteRN extends InfraRN {
8 9
9 - private static $instance = null; 10 + private static $instance = null;
  11 + private $strEnderecoServicoPendencias = null;
  12 + private $strLocalizacaoCertificadoDigital = null;
  13 + private $strSenhaCertificadoDigital = null;
10 14
11 - private $strEnderecoServicoPendencias = null;  
12 - private $strLocalizacaoCertificadoDigital = null;  
13 - private $strSenhaCertificadoDigital = null; 15 + protected function inicializarObjInfraIBanco(){
  16 + return BancoSEI::getInstance();
  17 + }
14 18
15 - protected function inicializarObjInfraIBanco(){  
16 - return BancoSEI::getInstance();  
17 - } 19 + public static function getInstance() {
  20 + if (self::$instance == null) {
  21 + self::$instance = new PendenciasTramiteRN(ConfiguracaoSEI::getInstance(), SessaoSEI::getInstance(), BancoSEI::getInstance(), LogSEI::getInstance());
  22 + }
  23 +
  24 + return self::$instance;
  25 + }
18 26
19 - public static function getInstance() {  
20 - if (self::$instance == null) {  
21 - self::$instance = new PendenciasTramiteRN(ConfiguracaoSEI::getInstance(), SessaoSEI::getInstance(), BancoSEI::getInstance(), LogSEI::getInstance());  
22 - }  
23 - return self::$instance;  
24 - } 27 + public function __construct() {
25 28
26 - public function __construct() {  
27 -  
28 - $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco());  
29 - $this->strLocalizacaoCertificadoDigital = $objInfraParametro->getValor('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL');  
30 -  
31 - $this->strEnderecoServicoPendencias = $objInfraParametro->getValor('PEN_ENDERECO_WEBSERVICE_PENDENCIAS');  
32 - //TODO: Urgente - Remover senha do certificado de autenticação dos serviços do PEN da tabela de parâmetros  
33 - $this->strSenhaCertificadoDigital = $objInfraParametro->getValor('PEN_SENHA_CERTIFICADO_DIGITAL');  
34 -  
35 - if (InfraString::isBolVazia($this->strEnderecoServicoPendencias)) {  
36 - throw new InfraException('Endereço do serviço de pendências de trâmite do Processo Eletrônico Nacional (PEN) não informado.');  
37 - } 29 + $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco());
  30 + $this->strLocalizacaoCertificadoDigital = $objInfraParametro->getValor('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL');
  31 + $this->strEnderecoServicoPendencias = $objInfraParametro->getValor('PEN_ENDERECO_WEBSERVICE_PENDENCIAS');
  32 + //TODO: Urgente - Remover senha do certificado de autenticação dos serviços do PEN da tabela de parâmetros
  33 + $this->strSenhaCertificadoDigital = $objInfraParametro->getValor('PEN_SENHA_CERTIFICADO_DIGITAL');
38 34
39 - if (!@file_get_contents($this->strLocalizacaoCertificadoDigital)) {  
40 - throw new InfraException("Certificado digital de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não encontrado.");  
41 - }  
42 -  
43 - if (InfraString::isBolVazia($this->strSenhaCertificadoDigital)) {  
44 - throw new InfraException('Dados de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não informados.');  
45 - }  
46 - }  
47 -  
48 - public function monitorarPendencias() {  
49 - try{  
50 - ini_set('max_execution_time','0');  
51 - ini_set('memory_limit','-1');  
52 -  
53 - InfraDebug::getInstance()->setBolLigado(true);  
54 - InfraDebug::getInstance()->setBolDebugInfra(false);  
55 - InfraDebug::getInstance()->setBolEcho(false);  
56 - InfraDebug::getInstance()->limpar();  
57 -  
58 - $objInfraParametro = new InfraParametro(BancoSEI::getInstance());  
59 - SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objInfraParametro->getValor('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'));  
60 -  
61 - $numSeg = InfraUtil::verificarTempoProcessamento();  
62 - InfraDebug::getInstance()->gravar('MONITORANDO OS TRÂMITES PENDENTES ENVIADOS PARA O ÓRGÃO (PEN)');  
63 - echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de monitoramento de pendências de trâmites de processos...\n";  
64 -  
65 - try{  
66 -  
67 - $numIdTramiteRecebido = 0;  
68 - $numQuantidadeErroTrâmite = 0;  
69 - $arrQuantidadeErrosTramite = array();  
70 - // $arrTramites = array();  
71 -  
72 - //TODO: Tratar quantidade de erros o sistema consecutivos para um tramite de processo  
73 - //Alcançado está quantidade, uma pendência posterior deverá ser obtida do barramento  
74 - while (true) {  
75 - $objPendenciaDTO = $this->obterPendenciasTramite($numIdTramiteRecebido);  
76 -  
77 - if(isset($objPendenciaDTO)) {  
78 -  
79 - if($numIdTramiteRecebido != $objPendenciaDTO->getNumIdentificacaoTramite()) {  
80 -  
81 - $numIdTramiteRecebido = $objPendenciaDTO->getNumIdentificacaoTramite();  
82 -  
83 - // if(!isset($arrTramites[$numIdTramiteRecebido])){  
84 - // $arrTramites[$numIdTramiteRecebido] = true;  
85 - $this->enviarPendenciaFilaProcessamento($objPendenciaDTO);  
86 - //}  
87 -  
88 - }  
89 - }  
90 - sleep(5); 35 + if (InfraString::isBolVazia($this->strEnderecoServicoPendencias)) {
  36 + throw new InfraException('Endereço do serviço de pendências de trâmite do Processo Eletrônico Nacional (PEN) não informado.');
91 } 37 }
92 - }  
93 -  
94 - //TODO: Urgente: Tratar erro específico de timeout e refazer a requisição  
95 - catch(Exception $e) {  
96 - $strAssunto = 'Erro monitorando pendências.';  
97 - $strErro = InfraException::inspecionar($e);  
98 - LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro);  
99 - }  
100 -  
101 - $numSeg = InfraUtil::verificarTempoProcessamento($numSeg);  
102 - InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s');  
103 - InfraDebug::getInstance()->gravar('FIM');  
104 -  
105 - LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug());  
106 -  
107 - }  
108 - catch(Exception $e) {  
109 - InfraDebug::getInstance()->setBolLigado(false);  
110 - InfraDebug::getInstance()->setBolDebugInfra(false);  
111 - InfraDebug::getInstance()->setBolEcho(false);  
112 - throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.',$e);  
113 - }  
114 - }  
115 -  
116 - private function configurarRequisicao()  
117 - {  
118 - $curl = curl_init($this->strEnderecoServicoPendencias);  
119 - curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias);  
120 - curl_setopt($curl, CURLOPT_HEADER, 0);  
121 - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  
122 - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);  
123 - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  
124 - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  
125 - curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalizacaoCertificadoDigital);  
126 - curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strSenhaCertificadoDigital);  
127 - //curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,30);  
128 - curl_setopt($curl, CURLOPT_TIMEOUT, 60); //timeout in seconds  
129 - return $curl;  
130 - }  
131 -  
132 - private function obterPendenciasTramite($parNumIdTramiteRecebido)  
133 - {  
134 - $resultado = null;  
135 - $curl = $this->configurarRequisicao();  
136 -  
137 38
138 - try{  
139 -  
140 - if(isset($parNumIdTramiteRecebido)) {  
141 - curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias . "?idTramiteDaPendenciaRecebido=" . $parNumIdTramiteRecebido);  
142 - }  
143 - //error_log("obterPendenciasTramite: curl " . $this->strEnderecoServicoPendencias . " --key " . $this->strLocalizacaoCertificadoDigital . " --cert " . $this->strLocalizacaoCertificadoDigital . " --pass 1234 --insecure", 0); 39 + if (!@file_get_contents($this->strLocalizacaoCertificadoDigital)) {
  40 + throw new InfraException("Certificado digital de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não encontrado.");
  41 + }
144 42
  43 + if (InfraString::isBolVazia($this->strSenhaCertificadoDigital)) {
  44 + throw new InfraException('Dados de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não informados.');
  45 + }
  46 + }
145 47
146 - //A seguinte requisição irá aguardar a notificação do PEN sobre uma nova pendência  
147 - //ou até o lançamento da exceção de timeout definido pela infraestrutura da solução  
148 - //Ambos os comportamentos são esperados para a requisição abaixo.  
149 - $strResultadoJSON = curl_exec($curl);  
150 -  
151 - //error_log("obterPendenciasTramite: curl: " . print_r(curl_getinfo($curl), true), 0);  
152 - //error_log("obterPendenciasTramite: strResultadoJSON: " . print_r($strResultadoJSON, true), 0);  
153 -  
154 - if(curl_errno($curl)) {  
155 - if (curl_errno($curl) != 28)  
156 - throw new InfraException("Erro na requisição do serviço de monitoramento de pendências. Curl: " . curl_errno($curl));  
157 - }  
158 -  
159 - if(!InfraString::isBolVazia($strResultadoJSON)) {  
160 - $strResultadoJSON = json_decode($strResultadoJSON);  
161 -  
162 - if(isset($strResultadoJSON) && $strResultadoJSON->encontrou) {  
163 - $objPendenciaDTO = new PendenciaDTO();  
164 - $objPendenciaDTO->setNumIdentificacaoTramite($strResultadoJSON->IDT);  
165 - $objPendenciaDTO->setStrStatus($strResultadoJSON->status);  
166 - $resultado = $objPendenciaDTO; 48 + public function monitorarPendencias() {
  49 + try{
  50 + ini_set('max_execution_time','0');
  51 + ini_set('memory_limit','-1');
  52 +
  53 + InfraDebug::getInstance()->setBolLigado(true);
  54 + InfraDebug::getInstance()->setBolDebugInfra(true);
  55 + InfraDebug::getInstance()->setBolEcho(true);
  56 + InfraDebug::getInstance()->limpar();
  57 +
  58 + $objInfraParametro = new InfraParametro(BancoSEI::getInstance());
  59 + SessaoSEI::getInstance(false)->simularLogin('SEI', null, null, $objInfraParametro->getValor('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO'));
  60 +
  61 + $numSeg = InfraUtil::verificarTempoProcessamento();
  62 + InfraDebug::getInstance()->gravar('MONITORANDO OS TRÂMITES PENDENTES ENVIADOS PARA O ÓRGÃO (PEN)');
  63 + echo "[".date("d/m/Y H:i:s")."] Iniciando serviço de monitoramento de pendências de trâmites de processos...\n";
  64 +
  65 + try{
  66 + $numIdTramiteRecebido = 0;
  67 + $strStatusTramiteRecebido = '';
  68 + $numQuantidadeErroTrâmite = 0;
  69 + $arrQuantidadeErrosTramite = array();
  70 +
  71 + //TODO: Tratar quantidade de erros o sistema consecutivos para um tramite de processo
  72 + //Alcançado está quantidade, uma pendência posterior deverá ser obtida do barramento
  73 + while (true) {
  74 + $objPendenciaDTO = $this->obterPendenciasTramite($numIdTramiteRecebido);
  75 + if(isset($objPendenciaDTO)) {
  76 + if($numIdTramiteRecebido != $objPendenciaDTO->getNumIdentificacaoTramite() ||
  77 + $strStatusTramiteRecebido != $objPendenciaDTO->getStrStatus()) {
  78 + $numIdTramiteRecebido = $objPendenciaDTO->getNumIdentificacaoTramite();
  79 + $strStatusTramiteRecebido = $objPendenciaDTO->getStrStatus();
  80 + $this->enviarPendenciaFilaProcessamento($objPendenciaDTO);
  81 + }
  82 + }
  83 + sleep(5);
  84 + }
  85 + }
  86 + //TODO: Urgente: Tratar erro específico de timeout e refazer a requisição
  87 + catch(Exception $e) {
  88 + $strAssunto = 'Erro monitorando pendências.';
  89 + $strErro = InfraException::inspecionar($e);
  90 + LogSEI::getInstance()->gravar($strAssunto."\n\n".$strErro);
  91 + }
  92 +
  93 + $numSeg = InfraUtil::verificarTempoProcessamento($numSeg);
  94 + InfraDebug::getInstance()->gravar('TEMPO TOTAL DE EXECUCAO: '.$numSeg.' s');
  95 + InfraDebug::getInstance()->gravar('FIM');
  96 + LogSEI::getInstance()->gravar(InfraDebug::getInstance()->getStrDebug());
  97 +
  98 + }
  99 + catch(Exception $e) {
  100 + InfraDebug::getInstance()->setBolLigado(false);
  101 + InfraDebug::getInstance()->setBolDebugInfra(false);
  102 + InfraDebug::getInstance()->setBolEcho(false);
  103 + throw new InfraException('Erro processando pendências de integração com o PEN - Processo Eletrônico Nacional.',$e);
167 } 104 }
168 - }  
169 } 105 }
170 - catch(Exception $e){  
171 - curl_close($curl);  
172 - throw $e;  
173 - }  
174 -  
175 - curl_close($curl);  
176 - return $resultado;  
177 - }  
178 -  
179 - private function enviarPendenciaFilaProcessamento($objPendencia)  
180 - {  
181 - if(isset($objPendencia)) {  
182 -  
183 - $client = new GearmanClient();  
184 - $client->addServer('localhost', 4730);  
185 - //$client->setCreatedCallback("create_change");  
186 - //$client->setDataCallback("data_change");  
187 - //$client->setStatusCallback("status_change");  
188 - //$client->setCompleteCallback("complete_change");  
189 - //$client->setFailCallback("fail_change");  
190 -  
191 - $strWorkload = strval($objPendencia->getNumIdentificacaoTramite());  
192 -  
193 - switch ($objPendencia->getStrStatus()) {  
194 -  
195 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO:  
196 - $client->addTaskBackground('enviarComponenteDigital', $strWorkload, null);  
197 - break;  
198 106
199 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE:  
200 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO:  
201 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO:  
202 -  
203 - $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco());  
204 - $numTentativas = $objInfraParametro->getValor(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);  
205 - $numCont = 0;  
206 - // Executa sempre + 1 além do configurado no parâmetro para executar  
207 - // a recusa  
208 - while($numCont <= $numTentativas) {  
209 -  
210 - $client->addTaskBackground('receberProcedimento', $strWorkload, null);  
211 - $numCont++; 107 + private function configurarRequisicao()
  108 + {
  109 + $curl = curl_init($this->strEnderecoServicoPendencias);
  110 + curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias);
  111 + curl_setopt($curl, CURLOPT_HEADER, 0);
  112 + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  113 + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  114 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  115 + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  116 + curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalizacaoCertificadoDigital);
  117 + curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strSenhaCertificadoDigital);
  118 + curl_setopt($curl, CURLOPT_TIMEOUT, 60); //timeout in seconds
  119 + return $curl;
  120 + }
  121 +
  122 + private function obterPendenciasTramite($parNumIdTramiteRecebido)
  123 + {
  124 + $resultado = null;
  125 + $curl = $this->configurarRequisicao();
  126 +
  127 + try{
  128 + if(isset($parNumIdTramiteRecebido)) {
  129 + curl_setopt($curl, CURLOPT_URL, $this->strEnderecoServicoPendencias . "?idTramiteDaPendenciaRecebida=" . $parNumIdTramiteRecebido);
212 } 130 }
213 - break;  
214 131
  132 + //A seguinte requisição irá aguardar a notificação do PEN sobre uma nova pendência
  133 + //ou até o lançamento da exceção de timeout definido pela infraestrutura da solução
  134 + //Ambos os comportamentos são esperados para a requisição abaixo.
  135 + $strResultadoJSON = curl_exec($curl);
  136 +
  137 + if(curl_errno($curl)) {
  138 + if (curl_errno($curl) != 28)
  139 + throw new InfraException("Erro na requisição do serviço de monitoramento de pendências. Curl: " . curl_errno($curl));
  140 + }
215 141
216 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO:  
217 -  
218 - $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco());  
219 - $numTentativas = $objInfraParametro->getValor(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);  
220 - $numCont = 0; 142 + if(!InfraString::isBolVazia($strResultadoJSON)) {
  143 + $strResultadoJSON = json_decode($strResultadoJSON);
221 144
222 - while($numCont < $numTentativas) {  
223 -  
224 - $client->addTaskBackground('receberReciboTramite', $strWorkload, null);  
225 - $numCont++; 145 + if(isset($strResultadoJSON) && $strResultadoJSON->encontrou) {
  146 + $objPendenciaDTO = new PendenciaDTO();
  147 + $objPendenciaDTO->setNumIdentificacaoTramite($strResultadoJSON->IDT);
  148 + $objPendenciaDTO->setStrStatus($strResultadoJSON->status);
  149 + $resultado = $objPendenciaDTO;
  150 + }
226 } 151 }
227 - break; 152 + }
  153 + catch(Exception $e){
  154 + curl_close($curl);
  155 + throw $e;
  156 + }
228 157
229 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE:  
230 - break; 158 + curl_close($curl);
  159 + return $resultado;
  160 + }
231 161
232 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO: 162 + private function enviarPendenciaFilaProcessamento($objPendencia)
  163 + {
  164 + if(isset($objPendencia)) {
  165 +
  166 + $client = new GearmanClient();
  167 + $client->addServer('localhost', 4730);
  168 + //$client->setCreatedCallback("create_change");
  169 + //$client->setDataCallback("data_change");
  170 + //$client->setStatusCallback("status_change");
  171 + //$client->setCompleteCallback("complete_change");
  172 + //$client->setFailCallback("fail_change");
  173 +
  174 + $strWorkload = strval($objPendencia->getNumIdentificacaoTramite());
  175 +
  176 + switch ($objPendencia->getStrStatus()) {
  177 +
  178 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO:
  179 + $client->addTaskBackground('enviarComponenteDigital', $strWorkload, null);
  180 + break;
  181 +
  182 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE:
  183 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO:
  184 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO:
  185 + $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco());
  186 + $numTentativas = $objInfraParametro->getValor(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);
  187 + $numCont = 0;
  188 + // Executa sempre + 1 além do configurado no parâmetro para executar a recusa
  189 + while($numCont <= $numTentativas) {
  190 + $client->addTaskBackground('receberProcedimento', $strWorkload, null);
  191 + $numCont++;
  192 + }
  193 + break;
  194 +
  195 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO:
  196 + $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco());
  197 + $numTentativas = $objInfraParametro->getValor(PenTramiteProcessadoRN::PARAM_NUMERO_TENTATIVAS, false);
  198 + $numCont = 0;
  199 +
  200 + while($numCont < $numTentativas) {
  201 + $client->addTaskBackground('receberReciboTramite', $strWorkload, null);
  202 + $numCont++;
  203 + }
  204 + break;
  205 +
  206 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE:
233 break; 207 break;
234 208
235 - case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO:  
236 - $client->addTaskBackground("receberTramitesRecusados", $strWorkload, null);; 209 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO:
237 break; 210 break;
238 211
239 - default: 212 + case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO:
  213 + $client->addTaskBackground("receberTramitesRecusados", $strWorkload, null);;
  214 + break;
240 215
241 - //TODO: Alterar lógica para não deixar de processar demais pendências retornadas pelo PEN  
242 - throw new Exception('Situação do trâmite não pode ser identificada.');  
243 - break;  
244 - } 216 + default:
  217 + //TODO: Alterar lógica para não deixar de processar demais pendências retornadas pelo PEN
  218 + throw new Exception('Situação do trâmite não pode ser identificada.');
  219 + break;
  220 + }
245 221
246 - $client->runTasks();  
247 - }  
248 - } 222 + $client->runTasks();
  223 + }
  224 + }
249 } 225 }
250 226
251 SessaoSEI::getInstance(false); 227 SessaoSEI::getInstance(false);
252 -PendenciasTramiteRN::getInstance()->monitorarPendencias();  
253 \ No newline at end of file 228 \ No newline at end of file
  229 +PendenciasTramiteRN::getInstance()->monitorarPendencias();