From 0fa80481c4be9bf782d461f0774c85d05016b782 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:10:10 -0300 Subject: [PATCH 01/25] feat: modificar a estrutura atual para funcionamento de bibliotecas externas do PHP no projeto --- Makefile | 6 ++---- src/composer.json | 0 src/composer.phar | 0 .../funcional/assets/config/composer.json | 18 ++++++++++++++++++ tests_sei4/funcional/docker-compose.yml | 6 ++++++ .../funcional/assets/config/composer.json | 18 ++++++++++++++++++ tests_sei41/funcional/docker-compose.yml | 6 ++++++ .../funcional/assets/config/composer.json | 18 ++++++++++++++++++ tests_super/funcional/docker-compose.yml | 6 ++++++ 9 files changed, 74 insertions(+), 4 deletions(-) create mode 100755 src/composer.json create mode 100755 src/composer.phar create mode 100644 tests_sei4/funcional/assets/config/composer.json create mode 100644 tests_sei41/funcional/assets/config/composer.json create mode 100644 tests_super/funcional/assets/config/composer.json diff --git a/Makefile b/Makefile index 2d692f38a..bec22240b 100755 --- a/Makefile +++ b/Makefile @@ -144,6 +144,8 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org1-http chown -R root:root /etc/cron.d/ $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sei $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sip + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install --no-dev' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install --no-dev' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" @@ -153,10 +155,6 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org2-http chmod 0644 /etc/cron.d/sip $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org2-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org2-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" - - @if [ -e tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.php ]; then rm tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.php; fi; - @cp tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.exemplo.php tests_$(sistema)/funcional/assets/config/ConfiguracaoModPEN.php - @echo "\nArquivo 'ConfiguracaoModPEN.php' restaurado conforme 'ConfiguracaoModPEN.exemplo.php'.\n"; wget -nc -i $(PEN_TEST_FUNC)/assets/arquivos/test_files_index.txt -P $(PEN_TEST_FUNC)/.tmp cp $(PEN_TEST_FUNC)/.tmp/* /tmp diff --git a/src/composer.json b/src/composer.json new file mode 100755 index 000000000..e69de29bb diff --git a/src/composer.phar b/src/composer.phar new file mode 100755 index 000000000..e69de29bb diff --git a/tests_sei4/funcional/assets/config/composer.json b/tests_sei4/funcional/assets/config/composer.json new file mode 100644 index 000000000..b1507ec37 --- /dev/null +++ b/tests_sei4/funcional/assets/config/composer.json @@ -0,0 +1,18 @@ +{ + "config": { + "platform": { + "php": "7.3.12" + } + }, + + + "require-dev": { + "phpunit/phpunit": "8.*", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit-selenium": "*", + "besimple/soap": "*", + "brandonwamboldt/utilphp": "1.1.*", + "brianium/paratest": "4.*", + "guzzlehttp/guzzle": "^7.0" + } +} \ No newline at end of file diff --git a/tests_sei4/funcional/docker-compose.yml b/tests_sei4/funcional/docker-compose.yml index 959cf6378..54a67abcd 100755 --- a/tests_sei4/funcional/docker-compose.yml +++ b/tests_sei4/funcional/docker-compose.yml @@ -151,6 +151,9 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG1_HOSTNAME}:${ORG1_PORT} @@ -210,6 +213,9 @@ services: - ./assets/config/ConfiguracaoSEI.php:/opt/sei/config/ConfiguracaoSEI.php:ro - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG2_HOSTNAME}:${ORG2_PORT} diff --git a/tests_sei41/funcional/assets/config/composer.json b/tests_sei41/funcional/assets/config/composer.json new file mode 100644 index 000000000..b1507ec37 --- /dev/null +++ b/tests_sei41/funcional/assets/config/composer.json @@ -0,0 +1,18 @@ +{ + "config": { + "platform": { + "php": "7.3.12" + } + }, + + + "require-dev": { + "phpunit/phpunit": "8.*", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit-selenium": "*", + "besimple/soap": "*", + "brandonwamboldt/utilphp": "1.1.*", + "brianium/paratest": "4.*", + "guzzlehttp/guzzle": "^7.0" + } +} \ No newline at end of file diff --git a/tests_sei41/funcional/docker-compose.yml b/tests_sei41/funcional/docker-compose.yml index bdd44ccb9..89b0c51ad 100755 --- a/tests_sei41/funcional/docker-compose.yml +++ b/tests_sei41/funcional/docker-compose.yml @@ -149,6 +149,9 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG1_HOSTNAME}:${ORG1_PORT} @@ -206,6 +209,9 @@ services: - ./assets/config/ConfiguracaoSEI.php:/opt/sei/config/ConfiguracaoSEI.php:ro - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG2_HOSTNAME}:${ORG2_PORT} diff --git a/tests_super/funcional/assets/config/composer.json b/tests_super/funcional/assets/config/composer.json new file mode 100644 index 000000000..b1507ec37 --- /dev/null +++ b/tests_super/funcional/assets/config/composer.json @@ -0,0 +1,18 @@ +{ + "config": { + "platform": { + "php": "7.3.12" + } + }, + + + "require-dev": { + "phpunit/phpunit": "8.*", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit-selenium": "*", + "besimple/soap": "*", + "brandonwamboldt/utilphp": "1.1.*", + "brianium/paratest": "4.*", + "guzzlehttp/guzzle": "^7.0" + } +} \ No newline at end of file diff --git a/tests_super/funcional/docker-compose.yml b/tests_super/funcional/docker-compose.yml index 5fc9419f5..b09161200 100755 --- a/tests_super/funcional/docker-compose.yml +++ b/tests_super/funcional/docker-compose.yml @@ -149,6 +149,9 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG1_HOSTNAME}:${ORG1_PORT} @@ -206,6 +209,9 @@ services: - ./assets/config/ConfiguracaoSEI.php:/opt/sei/config/ConfiguracaoSEI.php:ro - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar + - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 - HOST_URL=http://${ORG2_HOSTNAME}:${ORG2_PORT} From 584280e017af6a333e7675654dba7c778bf97bc6 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:28:04 -0300 Subject: [PATCH 02/25] =?UTF-8?q?feat:=20alterar=20url=5Fbase=20API=20para?= =?UTF-8?q?=20vers=C3=B5es=20sei4,=20sei41,=20sei=5Fsuper=20e=20Remover=20?= =?UTF-8?q?arquivo=20de=20ConfiguracaoModPEN.exemplo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ConfiguracaoModPEN.exemplo.php | 99 ------------------- .../assets/config/ConfiguracaoModPEN.php | 6 +- .../config/ConfiguracaoModPEN.exemplo.php | 99 ------------------- .../assets/config/ConfiguracaoModPEN.php | 6 +- .../config/ConfiguracaoModPEN.exemplo.php | 99 ------------------- .../assets/config/ConfiguracaoModPEN.php | 21 +++- 6 files changed, 23 insertions(+), 307 deletions(-) delete mode 100644 tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php delete mode 100644 tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php delete mode 100644 tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php mode change 100755 => 100644 tests_super/funcional/assets/config/ConfiguracaoModPEN.php diff --git a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php b/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php deleted file mode 100644 index 8934a1108..000000000 --- a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.exemplo.php +++ /dev/null @@ -1,99 +0,0 @@ - array( - // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", - - // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN - // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.pendencias.processoeletronico.gov.br/ - // - Produção: https://pendencias.conectagov.processoeletronico.gov.br/ - "WebServicePendencias" => "", - - // Localização completa do certificado digital utilizado para autenticação nos serviços do Barramento de Serviços do PEN - // e assinar os recibos de envio/conclusão dos trâmites de processo - // Necessário que o arquivo de certificado esteja localizado dentro da pasta de configurações do módulo: - // Ex: /sei/config/mod-pen/certificado.pem - "LocalizacaoCertificado" => getenv('CERTIFICADO'), - - // Senha do certificado digital necessário para a aplicação descriptografar a chave privada - "SenhaCertificado" => getenv('CERTIFICADO_SENHA'), - - // Quantidade de tentativas de requisção dos serviços do Barramento PEN antes que um erro possa ser lançado pela aplicação - // Necessário para aumentar a resiliência da integração em contextos de instabilidade de rede. - // Valor padrão: 3 - "NumeroTentativasErro" => 3, - - // Localização do servidor Gearman de gerenciamento de fila de processamento de tarefas do Barramento PEN - // As mensagem recebidas são organizadas em filas de tarefas e distribuídas entre os nós da aplicação para - // processamento paralelo. Caso este parâmetro não seja configurado ou o servidor este indisponível, o processamento será - // feito diretamente pelo sistema na periodicidade definida pelo agendamento da tarefa PENAgendamento::receberProcessos - // "Gearman" => array( - // "Servidor" => "", - // "Porta" => "", //Padrão: 4730 - // ) - - "ControleURL" => array( - "atual"=>"servidor.gov.br", - "antigos"=>array( - "[servidor_php]", - "[servidor_php2]", - ) - ), - - // Configuração padrão do Envio Parcial - "EnviarApenasComponentesDigitaisPendentes" => false - // "EnviarApenasComponentesDigitaisPendentes" => array( - // "1" => array( // 1 = Poder Executivo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ), - // "21" => array( // 2 = Poder Legislativo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ) - // ) - - ) - ); - } -} \ No newline at end of file diff --git a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php b/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php index 2d86f9cc6..fc4c5768f 100755 --- a/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php +++ b/tests_sei4/funcional/assets/config/ConfiguracaoModPEN.php @@ -36,9 +36,9 @@ public function getArrConfiguracoes() "PEN" => array( // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", + // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/ + // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/rest/v3/ + "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/", // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema diff --git a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php b/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php deleted file mode 100644 index 8934a1108..000000000 --- a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.exemplo.php +++ /dev/null @@ -1,99 +0,0 @@ - array( - // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", - - // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN - // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.pendencias.processoeletronico.gov.br/ - // - Produção: https://pendencias.conectagov.processoeletronico.gov.br/ - "WebServicePendencias" => "", - - // Localização completa do certificado digital utilizado para autenticação nos serviços do Barramento de Serviços do PEN - // e assinar os recibos de envio/conclusão dos trâmites de processo - // Necessário que o arquivo de certificado esteja localizado dentro da pasta de configurações do módulo: - // Ex: /sei/config/mod-pen/certificado.pem - "LocalizacaoCertificado" => getenv('CERTIFICADO'), - - // Senha do certificado digital necessário para a aplicação descriptografar a chave privada - "SenhaCertificado" => getenv('CERTIFICADO_SENHA'), - - // Quantidade de tentativas de requisção dos serviços do Barramento PEN antes que um erro possa ser lançado pela aplicação - // Necessário para aumentar a resiliência da integração em contextos de instabilidade de rede. - // Valor padrão: 3 - "NumeroTentativasErro" => 3, - - // Localização do servidor Gearman de gerenciamento de fila de processamento de tarefas do Barramento PEN - // As mensagem recebidas são organizadas em filas de tarefas e distribuídas entre os nós da aplicação para - // processamento paralelo. Caso este parâmetro não seja configurado ou o servidor este indisponível, o processamento será - // feito diretamente pelo sistema na periodicidade definida pelo agendamento da tarefa PENAgendamento::receberProcessos - // "Gearman" => array( - // "Servidor" => "", - // "Porta" => "", //Padrão: 4730 - // ) - - "ControleURL" => array( - "atual"=>"servidor.gov.br", - "antigos"=>array( - "[servidor_php]", - "[servidor_php2]", - ) - ), - - // Configuração padrão do Envio Parcial - "EnviarApenasComponentesDigitaisPendentes" => false - // "EnviarApenasComponentesDigitaisPendentes" => array( - // "1" => array( // 1 = Poder Executivo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ), - // "21" => array( // 2 = Poder Legislativo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ) - // ) - - ) - ); - } -} \ No newline at end of file diff --git a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php b/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php index 042c57061..d3ceafb68 100755 --- a/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php +++ b/tests_sei41/funcional/assets/config/ConfiguracaoModPEN.php @@ -36,9 +36,9 @@ public function getArrConfiguracoes() "PEN" => array( // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", + // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/ + // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/rest/v3/ + "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/", // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema diff --git a/tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php b/tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php deleted file mode 100644 index 8934a1108..000000000 --- a/tests_super/funcional/assets/config/ConfiguracaoModPEN.exemplo.php +++ /dev/null @@ -1,99 +0,0 @@ - array( - // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", - - // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN - // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema - // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.pendencias.processoeletronico.gov.br/ - // - Produção: https://pendencias.conectagov.processoeletronico.gov.br/ - "WebServicePendencias" => "", - - // Localização completa do certificado digital utilizado para autenticação nos serviços do Barramento de Serviços do PEN - // e assinar os recibos de envio/conclusão dos trâmites de processo - // Necessário que o arquivo de certificado esteja localizado dentro da pasta de configurações do módulo: - // Ex: /sei/config/mod-pen/certificado.pem - "LocalizacaoCertificado" => getenv('CERTIFICADO'), - - // Senha do certificado digital necessário para a aplicação descriptografar a chave privada - "SenhaCertificado" => getenv('CERTIFICADO_SENHA'), - - // Quantidade de tentativas de requisção dos serviços do Barramento PEN antes que um erro possa ser lançado pela aplicação - // Necessário para aumentar a resiliência da integração em contextos de instabilidade de rede. - // Valor padrão: 3 - "NumeroTentativasErro" => 3, - - // Localização do servidor Gearman de gerenciamento de fila de processamento de tarefas do Barramento PEN - // As mensagem recebidas são organizadas em filas de tarefas e distribuídas entre os nós da aplicação para - // processamento paralelo. Caso este parâmetro não seja configurado ou o servidor este indisponível, o processamento será - // feito diretamente pelo sistema na periodicidade definida pelo agendamento da tarefa PENAgendamento::receberProcessos - // "Gearman" => array( - // "Servidor" => "", - // "Porta" => "", //Padrão: 4730 - // ) - - "ControleURL" => array( - "atual"=>"servidor.gov.br", - "antigos"=>array( - "[servidor_php]", - "[servidor_php2]", - ) - ), - - // Configuração padrão do Envio Parcial - "EnviarApenasComponentesDigitaisPendentes" => false - // "EnviarApenasComponentesDigitaisPendentes" => array( - // "1" => array( // 1 = Poder Executivo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ), - // "21" => array( // 2 = Poder Legislativo Federal - // "123456", // Id de estrutura de unidade X do Poder Executivo Federal - // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal - // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal - // ) - // ) - - ) - ); - } -} \ No newline at end of file diff --git a/tests_super/funcional/assets/config/ConfiguracaoModPEN.php b/tests_super/funcional/assets/config/ConfiguracaoModPEN.php old mode 100755 new mode 100644 index 2d86f9cc6..5898b5adf --- a/tests_super/funcional/assets/config/ConfiguracaoModPEN.php +++ b/tests_super/funcional/assets/config/ConfiguracaoModPEN.php @@ -36,9 +36,9 @@ public function getArrConfiguracoes() "PEN" => array( // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", + // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/ + // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/rest/v3/ + "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/", // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema @@ -80,7 +80,20 @@ public function getArrConfiguracoes() // Configuração padrão do Envio Parcial "EnviarApenasComponentesDigitaisPendentes" => false + // "EnviarApenasComponentesDigitaisPendentes" => array( + // "1" => array( // 1 = Poder Executivo Federal + // "123456", // Id de estrutura de unidade X do Poder Executivo Federal + // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal + // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal + // ), + // "21" => array( // 2 = Poder Legislativo Federal + // "123456", // Id de estrutura de unidade X do Poder Executivo Federal + // "234567", // Id de estrutura de unidade Y do Poder Executivo Federal + // "345678" // Id de estrutura de unidade Z do Poder Executivo Federal + // ) + // ) + ) ); } -} +} \ No newline at end of file From edf17c798909287562360bf031ff1a878c3ddd3f Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:35:24 -0300 Subject: [PATCH 03/25] =?UTF-8?q?feat:=20alterar=20o=20m=C3=A9todos=20da?= =?UTF-8?q?=20classe=20expedirProcedimento=20para=20funcionamento=20corret?= =?UTF-8?q?o=20com=20REST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ExpedirProcedimentoRN.php | 607 ++++++++++++++++++------------- 1 file changed, 355 insertions(+), 252 deletions(-) diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index 5f889b7c9..a870858e6 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -122,17 +122,17 @@ private function gravarLogDebug($parStrMensagem, $parNumIdentacao = 0, $parBolLo protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpedirProcedimentoDTO) { - $numIdTramite = 0; + $numIdTramite = 0; try { - //Valida Permissão - SessaoSEI::getInstance()->validarAuditarPermissao('pen_procedimento_expedir', __METHOD__, $objExpedirProcedimentoDTO); - $dblIdProcedimento = $objExpedirProcedimentoDTO->getDblIdProcedimento(); + //Valida Permissão + SessaoSEI::getInstance()->validarAuditarPermissao('pen_procedimento_expedir', __METHOD__, $objExpedirProcedimentoDTO); + $dblIdProcedimento = $objExpedirProcedimentoDTO->getDblIdProcedimento(); - $objPenBlocoProcessoRN = new PenBlocoProcessoRN(); - $bolSinProcessamentoEmBloco = $objExpedirProcedimentoDTO->getBolSinProcessamentoEmBloco(); - $numIdBloco = $objExpedirProcedimentoDTO->getNumIdBloco(); - $numIdAtividade = $objExpedirProcedimentoDTO->getNumIdAtividade(); - $numIdUnidade = $objExpedirProcedimentoDTO->getNumIdUnidade(); + $objPenBlocoProcessoRN = new PenBlocoProcessoRN(); + $bolSinProcessamentoEmBloco = $objExpedirProcedimentoDTO->getBolSinProcessamentoEmBloco(); + $numIdBloco = $objExpedirProcedimentoDTO->getNumIdBloco(); + $numIdAtividade = $objExpedirProcedimentoDTO->getNumIdAtividade(); + $numIdUnidade = $objExpedirProcedimentoDTO->getNumIdUnidade(); if(!$bolSinProcessamentoEmBloco){ $this->barraProgresso->exibir(); @@ -201,10 +201,10 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $objCabecalho = $this->construirCabecalho($objExpedirProcedimentoDTO, $strNumeroRegistro, $dblIdProcedimento); //Construção do processo para envio - $objProcesso = $this->construirProcesso($dblIdProcedimento, $objExpedirProcedimentoDTO->getArrIdProcessoApensado(), $objMetadadosProcessoTramiteAnterior); + $arrProcesso = $this->construirProcessoREST($dblIdProcedimento, $objExpedirProcedimentoDTO->getArrIdProcessoApensado(), $objMetadadosProcessoTramiteAnterior); //Obtém o tamanho total da barra de progreso - $nrTamanhoTotalBarraProgresso = $this->obterTamanhoTotalDaBarraDeProgresso($objProcesso); + $nrTamanhoTotalBarraProgresso = $this->obterTamanhoTotalDaBarraDeProgressoREST($arrProcesso); if(!$bolSinProcessamentoEmBloco){ //Atribui o tamanho máximo da barra de progresso @@ -223,23 +223,26 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $this->objProcessoEletronicoRN->cancelarTramite($objTramiteInconsistente->IDT); } - $param = new stdClass(); - $param->novoTramiteDeProcesso = new stdClass(); - $param->novoTramiteDeProcesso->cabecalho = $objCabecalho; - $param->novoTramiteDeProcesso->processo = $objProcesso; - $param->dblIdProcedimento = $dblIdProcedimento; - $novoTramite = $this->objProcessoEletronicoRN->enviarProcesso($param); + $param = [ + 'novoTramiteDeProcesso' => [ + 'cabecalho' => $objCabecalho, + 'processo' => $arrProcesso + ], + 'dblIdProcedimento' => $dblIdProcedimento + ]; + + $novoTramite = $this->objProcessoEletronicoRN->enviarProcessoREST($param); - $numIdTramite = $novoTramite->dadosTramiteDeProcessoCriado->IDT; + $numIdTramite = $novoTramite['IDT']; $this->lancarEventoEnvioMetadados($numIdTramite); $this->atualizarPenProtocolo($dblIdProcedimento); - if (isset($novoTramite->dadosTramiteDeProcessoCriado)) { - $objTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $this->objProcedimentoAndamentoRN->setOpts($objTramite->NRE, $objTramite->IDT, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO), $dblIdProcedimento); + if (isset($novoTramite)) { + $objTramite = $novoTramite; + $this->objProcedimentoAndamentoRN->setOpts($objTramite['NRE'], $objTramite['IDT'], ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO), $dblIdProcedimento); - try { + try { $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Envio do metadados do processo', 'S')); if($bolSinProcessamentoEmBloco){ @@ -248,27 +251,27 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); $idAtividadeExpedicao = $numIdAtividade; }else{ - $idAtividadeExpedicao = $this->bloquearProcedimentoExpedicao($objExpedirProcedimentoDTO, $objProcesso->idProcedimentoSEI); + $idAtividadeExpedicao = $this->bloquearProcedimentoExpedicao($objExpedirProcedimentoDTO, $arrProcesso['idProcedimentoSEI']); } $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso( - $objProcesso->idProcedimentoSEI, - $objTramite->NRE, - $objTramite->IDT, + $arrProcesso['idProcedimentoSEI'], + $objTramite['NRE'], + $objTramite['IDT'], ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO, - $objTramite->dataHoraDeRegistroDoTramite, + $objTramite['dataHoraDeRegistroDoTramite'], $objExpedirProcedimentoDTO->getNumIdRepositorioOrigem(), $objExpedirProcedimentoDTO->getNumIdUnidadeOrigem(), $objExpedirProcedimentoDTO->getNumIdRepositorioDestino(), $objExpedirProcedimentoDTO->getNumIdUnidadeDestino(), - $objProcesso, - $objTramite->ticketParaEnvioDeComponentesDigitais, - $objTramite->componentesDigitaisSolicitados, + $arrProcesso, + $objTramite['ticketParaEnvioDeComponentesDigitais'], + $objTramite['processosComComponentesDigitaisSolicitados'], $bolSinProcessamentoEmBloco, $numIdUnidade); - $this->objProcessoEletronicoRN->cadastrarTramitePendente($objTramite->IDT, $idAtividadeExpedicao); + $this->objProcessoEletronicoRN->cadastrarTramitePendente($objTramite['IDT'], $idAtividadeExpedicao); //TODO: Erro no BARRAMENTO: Processo no pode ser enviado se possuir 2 documentos iguais(mesmo hash) //TODO: Melhoria no barramento de servios. O mtodo solicitar metadados no deixa claro quais os componentes digitais que @@ -277,7 +280,7 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe //componentes precisam ser baixados, semelhante ao que ocorre no enviarProcesso onde o barramento informa quais os componentes //que precisam ser enviados - $this->enviarComponentesDigitais($objTramite->NRE, $objTramite->IDT, $objProcesso->protocolo, $bolSinProcessamentoEmBloco); + $this->enviarComponentesDigitais($objTramite['NRE'], $objTramite['IDT'], $arrProcesso['protocolo'], $bolSinProcessamentoEmBloco); //TODO: Ao enviar o processo e seus documentos, necessrio bloquear os documentos para alterao //pois eles j foram visualizados @@ -300,30 +303,30 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Concluído envio dos componentes do processo', 'S')); - $this->receberReciboDeEnvio($objTramite->IDT); + $this->receberReciboDeEnvio($objTramite['IDT']); $this->gravarLogDebug(sprintf('Trâmite do processo %s foi concluído', $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado()), 2); $numTempoTotalRecebimento = round(microtime(true) - $numTempoInicialRecebimento, 2); $this->gravarLogDebug("Finalizado o envio de protocolo número " . $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado() . " (Tempo total: {$numTempoTotalRecebimento}s)", 0, true); - } - catch (\Exception $e) { - //Realiza o desbloqueio do processo - try{ $this->desbloquearProcessoExpedicao($objProcesso->idProcedimentoSEI); } catch (Exception $ex) { } - - //Realiza o cancelamento do tramite - try{ - if($numIdTramite != 0){ - $this->objProcessoEletronicoRN->cancelarTramite($numIdTramite); - } - } catch (InfraException $ex) { } + } + catch (\Exception $e) { + //Realiza o desbloqueio do processo + try{ $this->desbloquearProcessoExpedicao($arrProcesso['idProcedimentoSEI']); } catch (Exception $ex) { } + + //Realiza o cancelamento do tramite + try{ + if($numIdTramite != 0){ + $this->objProcessoEletronicoRN->cancelarTramite($numIdTramite); + } + } catch (InfraException $ex) { } - $this->registrarAndamentoExpedicaoAbortada($objProcesso->idProcedimentoSEI); + $this->registrarAndamentoExpedicaoAbortada($arrProcesso['idProcedimentoSEI']); $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Concluído envio dos componentes do processo', 'N')); throw $e; + } } - } } catch (\Exception $e) { $this->gravarLogDebug("Erro processando envio de processo: $e", 0, true); @@ -383,33 +386,34 @@ private function consultarMetadadosPEN($parDblIdProcedimento) * @param $parObjProcesso * @return float|int $totalBarraProgresso */ - private function obterTamanhoTotalDaBarraDeProgresso($parObjProcesso) { - $nrTamanhoMegasMaximo = ProcessoEletronicoRN::obterTamanhoBlocoTransferencia(); - $nrTamanhoBytesMaximo = ($nrTamanhoMegasMaximo * pow(1024, 2)); //Qtd de MB definido como parametro + private function obterTamanhoTotalDaBarraDeProgressoREST($parObjProcesso) { - $totalBarraProgresso = 2; - $this->contadorDaBarraDeProgresso = 2; - $arrHashIndexados = array(); - foreach ($parObjProcesso->documento as $objDoc) - { - $arrComponentesDigitais = is_array($objDoc->componenteDigital) ? $objDoc->componenteDigital : array($objDoc->componenteDigital); + $nrTamanhoMegasMaximo = ProcessoEletronicoRN::obterTamanhoBlocoTransferencia(); + $nrTamanhoBytesMaximo = ($nrTamanhoMegasMaximo * pow(1024, 2)); //Qtd de MB definido como parametro + + $totalBarraProgresso = 2; + $this->contadorDaBarraDeProgresso = 2; + $arrHashIndexados = array(); + foreach ($parObjProcesso['documentos'] as $objDoc) + { + $arrComponentesDigitais = is_array($objDoc['componentesDigitais']) ? $objDoc['componentesDigitais'] : array($objDoc['componentesDigitais']); foreach ($arrComponentesDigitais as $objComponenteDigital) { - $strHashComponente = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); + $strHashComponente = ProcessoEletronicoRN::getHashFromMetaDadosREST($objComponenteDigital['hash']); if(!in_array($strHashComponente, $arrHashIndexados)){ - $arrHashIndexados[] = $strHashComponente; - $nrTamanhoComponente = $objComponenteDigital->tamanhoEmBytes; + $arrHashIndexados[] = $strHashComponente; + $nrTamanhoComponente = $objComponenteDigital['tamanhoEmBytes']; if($nrTamanhoComponente > $nrTamanhoBytesMaximo){ $qtdPartes = ceil($nrTamanhoComponente / $nrTamanhoBytesMaximo); $totalBarraProgresso += $qtdPartes; continue; } - $totalBarraProgresso++; + $totalBarraProgresso++; } } } - return $totalBarraProgresso; + return $totalBarraProgresso; } public function listarRepositoriosDeEstruturas() @@ -488,41 +492,53 @@ private function enviarApenasComponentesDigitaisPendentes($numIdRepositorioDesti return false; } - private function construirProcesso($dblIdProcedimento, $arrIdProcessoApensado = null, $parObjMetadadosTramiteAnterior = null) - { + public function construirProcessoREST($dblIdProcedimento, $arrIdProcessoApensado = null, $parObjMetadadosTramiteAnterior = null) + { if(!isset($dblIdProcedimento)){ throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); } + $objProcedimentoDTO = $this->consultarProcedimento($dblIdProcedimento); $objPenRelHipoteseLegalRN = new PenRelHipoteseLegalEnvioRN(); - $objProcesso = new stdClass(); - $objProcesso->staTipoProtocolo = ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO; - $objProcesso->protocolo = mb_convert_encoding($objProcedimentoDTO->getStrProtocoloProcedimentoFormatado(), 'UTF-8', 'ISO-8859-1'); - $objProcesso->nivelDeSigilo = $this->obterNivelSigiloPEN($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo()); - $objProcesso->processoDeNegocio = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrNomeTipoProcedimento(), 100), 'UTF-8', 'ISO-8859-1'); - $objProcesso->descricao = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrDescricaoProtocolo(), 100), 'UTF-8', 'ISO-8859-1'); - $objProcesso->dataHoraDeProducao = $this->objProcessoEletronicoRN->converterDataWebService($objProcedimentoDTO->getDtaGeracaoProtocolo()); - if($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo() == ProtocoloRN::$NA_RESTRITO){ - $objProcesso->hipoteseLegal = new stdClass(); - $objProcesso->hipoteseLegal->identificacao = $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($objProcedimentoDTO->getNumIdHipoteseLegalProtocolo()); - } - - $this->atribuirProdutorProcesso($objProcesso, $objProcedimentoDTO->getNumIdUsuarioGeradorProtocolo(), $objProcedimentoDTO->getNumIdUnidadeGeradoraProtocolo()); - $this->atribuirDataHoraDeRegistro($objProcesso, $objProcedimentoDTO->getDblIdProcedimento()); - $this->atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior); - $this->atribuirDadosInteressados($objProcesso, $dblIdProcedimento); - $this->adicionarProcessosApensados($objProcesso, $arrIdProcessoApensado); - $this->atribuirDadosHistorico($objProcesso, $dblIdProcedimento); - - $objProcesso->idProcedimentoSEI = $dblIdProcedimento; + $objProcesso = [ + 'staTipoProtocolo' => ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO, + 'protocolo' => mb_convert_encoding($objProcedimentoDTO->getStrProtocoloProcedimentoFormatado(), 'UTF-8', 'ISO-8859-1'), + 'nivelDeSigilo' => $this->obterNivelSigiloPEN($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo()), + 'processoDeNegocio' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrNomeTipoProcedimento(), 100), 'UTF-8', 'ISO-8859-1'), + 'descricao' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objProcedimentoDTO->getStrDescricaoProtocolo(), 100), 'UTF-8', 'ISO-8859-1' ), + 'dataHoraDeProducao' => $this->objProcessoEletronicoRN->converterDataWebService($objProcedimentoDTO->getDtaGeracaoProtocolo()) + ]; + + + + if ($objProcedimentoDTO->getStrStaNivelAcessoLocalProtocolo() == ProtocoloRN::$NA_RESTRITO) { + $objProcesso['hipoteseLegal'] = [ + 'identificacao' => $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($objProcedimentoDTO->getNumIdHipoteseLegalProtocolo()) + ]; + } + + $objProcesso = $this->atribuirProdutorProcessoREST($objProcesso, $objProcedimentoDTO->getNumIdUsuarioGeradorProtocolo(), $objProcedimentoDTO->getNumIdUnidadeGeradoraProtocolo()); + + $objProcesso = $this->atribuirDataHoraDeRegistroREST($objProcesso, $objProcedimentoDTO->getDblIdProcedimento()); + + $objProcesso = $this->atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior); + + $objProcesso = $this->atribuirDadosInteressadosREST($objProcesso, $dblIdProcedimento); + + $objProcesso = $this->adicionarProcessosApensadosREST($objProcesso, $arrIdProcessoApensado); + + $objProcesso = $this->atribuirDadosHistoricoREST($objProcesso, $dblIdProcedimento); + + $objProcesso['idProcedimentoSEI'] = $dblIdProcedimento; return $objProcesso; } + //TODO: Implementar mapeamento de atividades que sero enviadas para barramento (semelhante Protocolo Integrado) - private function atribuirDadosHistorico($objProcesso, $dblIdProcedimento) - { + private function atribuirDadosHistoricoREST($objProcesso, $dblIdProcedimento) + { $objProcedimentoHistoricoDTO = new ProcedimentoHistoricoDTO(); $objProcedimentoHistoricoDTO->setDblIdProcedimento($dblIdProcedimento); $objProcedimentoHistoricoDTO->setStrStaHistorico(ProcedimentoRN::$TH_TOTAL); @@ -533,27 +549,31 @@ private function atribuirDadosHistorico($objProcesso, $dblIdProcedimento) $arrObjAtividadeDTO = $objProcedimentoDTO->getArrObjAtividadeDTO(); if($arrObjAtividadeDTO == null || count($arrObjAtividadeDTO) == 0) { - throw new InfraException("Não foi possível obter andamentos do processo {$objProcesso->protocolo}"); + throw new InfraException("Não foi possível obter andamentos do processo {$objProcesso['protocolo']}"); } $arrObjOperacao = array(); foreach ($arrObjAtividadeDTO as $objAtividadeDTO) { - $objOperacao = new stdClass(); - $objOperacao->dataHoraOperacao = $this->objProcessoEletronicoRN->converterDataWebService($objAtividadeDTO->getDthAbertura()); - $objOperacao->unidadeOperacao = $objAtividadeDTO->getStrDescricaoUnidade()?mb_convert_encoding($objAtividadeDTO->getStrDescricaoUnidade(), 'UTF-8', 'ISO-8859-1'):"NA"; - $objOperacao->operacao = $objAtividadeDTO->getStrNomeTarefa()?$this->objProcessoEletronicoRN->reduzirCampoTexto(strip_tags(mb_convert_encoding($objAtividadeDTO->getStrNomeTarefa(), 'UTF-8', 'ISO-8859-1')), 1000):"NA"; - $objOperacao->usuario = $objAtividadeDTO->getStrNomeUsuarioOrigem()?mb_convert_encoding($objAtividadeDTO->getStrNomeUsuarioOrigem(), 'UTF-8', 'ISO-8859-1'):"NA"; + $objOperacao = [ + 'dataHoraOperacao' => $this->objProcessoEletronicoRN->converterDataWebService($objAtividadeDTO->getDthAbertura()), + 'unidadeOperacao' => $objAtividadeDTO->getStrDescricaoUnidade() ? mb_convert_encoding($objAtividadeDTO->getStrDescricaoUnidade(), 'UTF-8', 'ISO-8859-1') : "NA", + 'operacao' => $objAtividadeDTO->getStrNomeTarefa() ? $this->objProcessoEletronicoRN->reduzirCampoTexto(strip_tags(mb_convert_encoding($objAtividadeDTO->getStrNomeTarefa(), 'UTF-8', 'ISO-8859-1')), 1000) : "NA", + 'usuario' => $objAtividadeDTO->getStrNomeUsuarioOrigem() ? mb_convert_encoding($objAtividadeDTO->getStrNomeUsuarioOrigem(), 'UTF-8', 'ISO-8859-1') : "NA" + ]; + $arrObjOperacao[] = $objOperacao; } - usort($arrObjOperacao, function($obj1, $obj2){ - $dt1=new DateTime($obj1->dataHoraOperacao); - $dt2=new DateTime($obj2->dataHoraOperacao); - return $dt1>$dt2; + usort($arrObjOperacao, function($obj1, $obj2) { + $dt1 = new DateTime($obj1['dataHoraOperacao']); + $dt2 = new DateTime($obj2['dataHoraOperacao']); + return $dt1 > $dt2; }); - $objProcesso->historico = $arrObjOperacao; + $objProcesso['historico'] = $arrObjOperacao; + + return $objProcesso; } /** @@ -748,14 +768,14 @@ public static function receberRecusaProcedimento($motivo, $unidade_destino, $idP } } - private function atribuirDataHoraDeRegistro($objContexto, $dblIdProcedimento, $dblIdDocumento = null) - { - //Validar parâmetro $objContexto + private function atribuirDataHoraDeRegistroREST($objContexto, $dblIdProcedimento, $dblIdDocumento = null) + { + //Validar parâmetro $objContexto if(!isset($objContexto)) { throw new InfraException('Parâmetro $objContexto não informado.'); } - //Validar parâmetro $dbIdProcedimento + //Validar parâmetro $dbIdProcedimento if(!isset($dblIdProcedimento)) { throw new InfraException('Parâmetro $dbIdProcedimento não informado.'); } @@ -777,57 +797,71 @@ private function atribuirDataHoraDeRegistro($objContexto, $dblIdProcedimento, $d $arrObjAtividadeDTOHistorico = $objProcedimentoDTOHistorico->getArrObjAtividadeDTO(); if(isset($arrObjAtividadeDTOHistorico) && count($arrObjAtividadeDTOHistorico) == 1){ - $objContexto->dataHoraDeRegistro = $this->objProcessoEletronicoRN->converterDataWebService($arrObjAtividadeDTOHistorico[0]->getDthAbertura()); + $objContexto['dataHoraDeRegistro'] = $this->objProcessoEletronicoRN->converterDataWebService($arrObjAtividadeDTOHistorico[0]->getDthAbertura()); } - } - private function atribuirProdutorProcesso($objProcesso, $dblIdProcedimento, $numIdUnidadeGeradora) + return $objContexto; + } + + private function atribuirProdutorProcessoREST($objProcesso, $dblIdProcedimento, $numIdUnidadeGeradora) { if(!isset($objProcesso)){ throw new InfraException('Parâmetro $objProcesso não informado.'); } - $objProcesso->produtor = new stdClass(); $objUsuarioProdutor = $this->consultarUsuario($dblIdProcedimento); - if(isset($objUsuarioProdutor)) { - //Dados do produtor do processo - $objProcesso->produtor->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUsuarioProdutor->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'); - //TODO: Obter tipo de pessoa física dos contatos do SEI - $objProcesso->produtor->numeroDeIdentificacao = $objUsuarioProdutor->getDblCpfContato(); - $objProcesso->produtor->tipo = self::STA_TIPO_PESSOA_FISICA; - //TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) + if (isset($objUsuarioProdutor)) { + // Dados do produtor do processo + $objProcesso['produtor'] = [ + 'nome' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUsuarioProdutor->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'), + 'tipo' => self::STA_TIPO_PESSOA_FISICA + ]; + + if ($objUsuarioProdutor->getDblCpfContato()) { + $objProcesso['produtor']['numeroDeIdentificacao'] = $objUsuarioProdutor->getDblCpfContato(); + } + // TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) } - + $objUnidadeGeradora = $this->consultarUnidade($dblIdProcedimento); - if(isset($objUnidadeGeradora)){ - $objProcesso->produtor->unidade = new stdClass(); - $objProcesso->produtor->unidade->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUnidadeGeradora->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'); - $objProcesso->produtor->unidade->tipo = self::STA_TIPO_PESSOA_ORGAOPUBLICO; - //TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) + if (isset($objUnidadeGeradora)) { + $objProcesso['produtor']['unidade'] = [ + 'nome' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($objUnidadeGeradora->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'), + 'tipo' => self::STA_TIPO_PESSOA_ORGAOPUBLICO + ]; + // TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) } + + return $objProcesso; } - private function atribuirDadosInteressados($objProcesso, $dblIdProcedimento) - { - if(!isset($objProcesso)){ + + private function atribuirDadosInteressadosREST($objProcesso, $dblIdProcedimento) + { + if (!isset($objProcesso)) { throw new InfraException('Parâmetro $objProcesso não informado.'); } - + $arrParticipantesDTO = $this->listarInteressados($dblIdProcedimento); - - if(isset($arrParticipantesDTO) && count($arrParticipantesDTO) > 0){ - $objProcesso->interessado = array(); - + + if (isset($arrParticipantesDTO) && count($arrParticipantesDTO) > 0) { + $objProcesso['interessados'] = array(); + foreach ($arrParticipantesDTO as $participanteDTO) { - $interessado = new stdClass(); - $interessado->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($participanteDTO->getStrNomeContato(), 150), 'UTF-8', 'ISO-8859-1'); - $objProcesso->interessado[] = $interessado; + $interessado = [ + 'nome' => mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($participanteDTO->getStrNomeContato(), 150), 'UTF-8', 'ISO-8859-1') + ]; + $objProcesso['interessados'][] = $interessado; } - } + } + + return $objProcesso; } - private function atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior) + private function atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parObjMetadadosTramiteAnterior) { + + if(!isset($objProcesso)) { throw new InfraException('Parâmetro $objProcesso não informado.'); } @@ -848,112 +882,120 @@ private function atribuirDocumentos($objProcesso, $dblIdProcedimento, $parObjMet $arrObjCompIndexadoPorIdDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjComponentesDigitaisDTO, 'IdDocumento'); } } - - $objProcesso->documento = array(); + + $objProcesso['documentos'] = array(); foreach ($arrDocumentosRelacionados as $ordem => $objDocumentosRelacionados) { $documentoDTO = $objDocumentosRelacionados["Documento"]; $staAssociacao = $objDocumentosRelacionados["StaAssociacao"]; - $documento = new stdClass(); $objPenRelHipoteseLegalRN = new PenRelHipoteseLegalEnvioRN(); //Considera o número/nome do documento externo para descrição do documento $boolDocumentoRecebidoComNumero = $documentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO && $documentoDTO->getStrNumero() != null; $strDescricaoDocumento = ($boolDocumentoRecebidoComNumero) ? $documentoDTO->getStrNumero() : "***"; - $documento->ordem = $ordem + 1; - $documento->descricao = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strDescricaoDocumento, 100), 'UTF-8', 'ISO-8859-1'); - $documento->retirado = ($documentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_DOCUMENTO_CANCELADO) ? true : false; - $documento->nivelDeSigilo = $this->obterNivelSigiloPEN($documentoDTO->getStrStaNivelAcessoLocalProtocolo()); + $documento = []; // Inicializando $documento como um array + $documento['ordem'] = $ordem + 1; + $documento['descricao'] = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strDescricaoDocumento, 100), 'UTF-8', 'ISO-8859-1'); + + + $documento['retirado'] = ($documentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_DOCUMENTO_CANCELADO) ? true : false; + $documento['nivelDeSigilo'] = $this->obterNivelSigiloPEN($documentoDTO->getStrStaNivelAcessoLocalProtocolo()); + //Verifica se o documento faz parte de outro processo devido à sua anexação ou à sua movimentação - if($staAssociacao != RelProtocoloProtocoloRN::$TA_DOCUMENTO_MOVIDO){ - if($documentoDTO->getStrProtocoloProcedimentoFormatado() != $objProcesso->protocolo){ + if($staAssociacao != RelProtocoloProtocoloRN::$TA_DOCUMENTO_MOVIDO) { + if ($documentoDTO->getStrProtocoloProcedimentoFormatado() != $objProcesso['protocolo']) { // Caso o documento não tenha sido movido, seu protocolo é diferente devido à sua anexação à outro processo - $documento->protocoloDoProcessoAnexado = $documentoDTO->getStrProtocoloProcedimentoFormatado(); - $documento->idProcedimentoAnexadoSEI = $documentoDTO->getDblIdProcedimento(); + $documento['protocoloDoProcessoAnexado'] = $documentoDTO->getStrProtocoloProcedimentoFormatado(); + $documento['idProcedimentoAnexadoSEI'] = $documentoDTO->getDblIdProcedimento(); + } } else { // Em caso de documento movido, ele será tratado como cancelado para trâmites externos - $documento->retirado = true; + $documento['retirado'] = true; } - if($documentoDTO->getStrStaNivelAcessoLocalProtocolo() == ProtocoloRN::$NA_RESTRITO){ - $documento->hipoteseLegal = new stdClass(); - $documento->hipoteseLegal->identificacao = $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($documentoDTO->getNumIdHipoteseLegalProtocolo()); + $documento['hipoteseLegal'] = array(); // Inicializando a chave 'hipoteseLegal' como um array + $documento['hipoteseLegal']['identificacao'] = $objPenRelHipoteseLegalRN->getIdHipoteseLegalPEN($documentoDTO->getNumIdHipoteseLegalProtocolo()); //TODO: Adicionar nome da hipótese legal atribuida ao documento } - $documento->dataHoraDeProducao = $this->objProcessoEletronicoRN->converterDataWebService($documentoDTO->getDtaGeracaoProtocolo()); - $documento->produtor = new stdClass(); + $documento['dataHoraDeProducao'] = $this->objProcessoEletronicoRN->converterDataWebService($documentoDTO->getDtaGeracaoProtocolo()); + $documento['dataHoraDeRegistro'] = $this->objProcessoEletronicoRN->converterDataWebService($documentoDTO->getDtaGeracaoProtocolo()); + $documento['produtor'] = array(); // Inicializando a chave 'produtor' como um array $usuarioDTO = $this->consultarUsuario($documentoDTO->getNumIdUsuarioGeradorProtocolo()); if(isset($usuarioDTO)) { - $documento->produtor->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($usuarioDTO->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'); - $documento->produtor->numeroDeIdentificacao = $usuarioDTO->getDblCpfContato(); - //TODO: Obter tipo de pessoa fsica dos contextos/contatos do SEI - $documento->produtor->tipo = self::STA_TIPO_PESSOA_FISICA; - ; + $documento['produtor']['nome'] = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($usuarioDTO->getStrNome(), 150), 'UTF-8', 'ISO-8859-1'); + $documento['produtor']['numeroDeIdentificacao'] = $usuarioDTO->getDblCpfContato(); + // TODO: Obter tipo de pessoa física dos contextos/contatos do SEI + $documento['produtor']['tipo'] = self::STA_TIPO_PESSOA_FISICA; + } - $unidadeDTO = $this->consultarUnidade($documentoDTO->getNumIdUnidadeResponsavel()); if(isset($unidadeDTO)) { - $documento->produtor->unidade = new stdClass(); - $documento->produtor->unidade->nome = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($unidadeDTO->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'); - $documento->produtor->unidade->tipo = self::STA_TIPO_PESSOA_ORGAOPUBLICO; + $documento['produtor']['unidade'] = []; // Inicializando a chave 'unidade' como um array + $documento['produtor']['unidade']['nome'] = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($unidadeDTO->getStrDescricao(), 150), 'UTF-8', 'ISO-8859-1'); + $documento['produtor']['unidade']['tipo'] = self::STA_TIPO_PESSOA_ORGAOPUBLICO; + //TODO: Informar dados da estrutura organizacional (estruturaOrganizacional) } - if(array_key_exists($documentoDTO->getDblIdDocumento(), $arrObjCompIndexadoPorIdDocumentoDTO)){ $objComponenteDigitalDTO = $arrObjCompIndexadoPorIdDocumentoDTO[$documentoDTO->getDblIdDocumento()]; if(!empty($objComponenteDigitalDTO->getNumOrdemDocumentoReferenciado())){ - $documento->ordemDoDocumentoReferenciado = $objComponenteDigitalDTO->getNumOrdemDocumentoReferenciado(); + $documento['ordemDoDocumentoReferenciado'] = $objComponenteDigitalDTO->getNumOrdemDocumentoReferenciado(); } } - - $documento->produtor->numeroDeIdentificacao = $documentoDTO->getStrProtocoloDocumentoFormatado(); - $this->atribuirDataHoraDeRegistro($documento, $documentoDTO->getDblIdProcedimento(), $documentoDTO->getDblIdDocumento()); - $this->atribuirEspecieDocumental($documento, $documentoDTO, $parObjMetadadosTramiteAnterior); - - $this->atribuirNumeracaoDocumento($documento, $documentoDTO); - if($documento->retirado === true){ + $documento['produtor']['numeroDeIdentificacao'] = $documentoDTO->getStrProtocoloDocumentoFormatado(); + $this->atribuirDataHoraDeRegistroREST($documento, $documentoDTO->getDblIdProcedimento(), $documentoDTO->getDblIdDocumento()); + $documento = $this->atribuirEspecieDocumentalREST($documento, $documentoDTO, $parObjMetadadosTramiteAnterior); + $documento = $this->atribuirNumeracaoDocumentoREST($documento, $documentoDTO); + + if($documento['retirado'] === true) { $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->retTodos(); $objComponenteDigitalDTO->setDblIdDocumento($documentoDTO->getDblIdDocumento()); $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); - + if($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0){ $arrobjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); $componenteDigital = $arrobjComponenteDigitalDTO[0]; - $documento->componenteDigital = new stdClass(); - $documento->componenteDigital->ordem = 1; - $documento->componenteDigital->nome = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); - $documento->componenteDigital->hash = new SoapVar("{$componenteDigital->getStrHashConteudo()}", XSD_ANYXML); - $documento->componenteDigital->tamanhoEmBytes = $componenteDigital->getNumTamanho(); - $documento->componenteDigital->mimeType = $componenteDigital->getStrMimeType(); - $documento->componenteDigital->tipoDeConteudo = $componenteDigital->getStrTipoConteudo(); - $documento->componenteDigital->idAnexo = $componenteDigital->getNumIdAnexo(); - $documento->componenteDigital = $this->atribuirDadosAssinaturaDigital($documentoDTO, $documento->componenteDigital, $componenteDigital->getStrHashConteudo()); + $documento['componentesDigitais'] = []; // Inicializando 'componentesDigitais' como um array + $documento['componentesDigitais']['ordem'] = 1; + $documento['componentesDigitais']['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); + $documento['componentesDigitais']['hash'] = [ + 'algoritmo' => $componenteDigital->getStrAlgoritmoHash(), + 'conteudo' => $componenteDigital->getStrHashConteudo() + ]; + + $documento['componentesDigitais']['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); + $documento['componentesDigitais']['mimeType'] = $componenteDigital->getStrMimeType(); + $documento['componentesDigitais']['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); + $documento['componentesDigitais']['idAnexo'] = $componenteDigital->getNumIdAnexo(); + $documento['componentesDigitais'] = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); + if($componenteDigital->getStrMimeType() == 'outro'){ - $documento->componenteDigital->dadosComplementaresDoTipoDeArquivo = 'outro'; + $documento['componentesDigitais']['dadosComplementaresDoTipoDeArquivo'] = 'outro'; } }else{ - $this->atribuirComponentesDigitais($documento, $documentoDTO, $dblIdProcedimento); + $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); } }else{ - $this->atribuirComponentesDigitais($documento, $documentoDTO, $dblIdProcedimento); + $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); } - // TODO: Necessário tratar informações abaixo //- protocoloDoDocumentoAnexado //- protocoloDoProcessoAnexado //- protocoloAnterior //- historico - $documento->idDocumentoSEI = $documentoDTO->getDblIdDocumento(); - $objProcesso->documento[] = $documento; + $documento['idDocumentoSEI'] = $documentoDTO->getDblIdDocumento(); + $objProcesso['documentos'][] = $documento; } + return $objProcesso; } + public function atribuirComponentesDigitaisRetirados($documentoDTO){ } @@ -970,9 +1012,9 @@ public function atribuirComponentesDigitaisRetirados($documentoDTO){ * @return int Código da espécie documental * */ - private function atribuirEspecieDocumental($parMetaDocumento, $parDocumentoDTO, $parObjMetadadosTramiteAnterior) - { - //Validação dos parâmetros da função + private function atribuirEspecieDocumentalREST($parMetaDocumento, $parDocumentoDTO, $parObjMetadadosTramiteAnterior) + { + //Validação dos parâmetros da função if(!isset($parDocumentoDTO)){ throw new InfraException('Parâmetro $parDocumentoDTO não informado.'); } @@ -980,41 +1022,38 @@ private function atribuirEspecieDocumental($parMetaDocumento, $parDocumentoDTO, if(!isset($parMetaDocumento)){ throw new InfraException('Parâmetro $parMetaDocumento não informado.'); } - $numCodigoEspecie = null; $strNomeEspecieProdutor = null; $dblIdProcedimento = $parDocumentoDTO->getDblIdProcedimento(); $dblIdDocumento = $parDocumentoDTO->getDblIdDocumento(); - //Inicialmente, busca espécie documental atribuida pelo produtor em trâmite realizado anteriormente + //Inicialmente, busca espécie documental atribuida pelo produtor em trâmite realizado anteriormente $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->retNumCodigoEspecie(); $objComponenteDigitalDTO->retStrNomeEspecieProdutor(); - // Verifica se o documento é de um processo anexado ou não e busca no - // campo correto - if(isset($parMetaDocumento->idProcedimentoAnexadoSEI)){ + // Verifica se o documento é de um processo anexado ou não e busca no + // campo correto + if(isset($parMetaDocumento['idProcedimentoAnexadoSEI'])){ $objComponenteDigitalDTO->setDblIdProcedimentoAnexado($dblIdProcedimento); } else{ $objComponenteDigitalDTO->setDblIdProcedimento($dblIdProcedimento); } - $objComponenteDigitalDTO->setDblIdDocumento($dblIdDocumento); $objComponenteDigitalDTO->setNumMaxRegistrosRetorno(1); $objComponenteDigitalDTO->setOrd('IdTramite', InfraDTO::$TIPO_ORDENACAO_DESC); - $objComponenteDigitalBD = new ComponenteDigitalBD($this->inicializarObjInfraIBanco()); + $objComponenteDigitalBD = new ComponenteDigitalBD(BancoSEI::getInstance()); $objComponenteDigitalDTO = $objComponenteDigitalBD->consultar($objComponenteDigitalDTO); if($objComponenteDigitalDTO != null){ $numCodigoEspecie = $objComponenteDigitalDTO->getNumCodigoEspecie(); $strNomeEspecieProdutor = mb_convert_encoding($objComponenteDigitalDTO->getStrNomeEspecieProdutor(), 'UTF-8', 'ISO-8859-1'); } - - //Caso a informação sobre mapeamento esteja nulo, necessário buscar tal informação no Barramento - //A lista de documentos recuperada do trâmite anterior será indexada pela sua ordem no protocolo e - //a espécie documental e o nome do produtor serão obtidos para atribuição ao documento + //Caso a informação sobre mapeamento esteja nulo, necessário buscar tal informação no Barramento + //A lista de documentos recuperada do trâmite anterior será indexada pela sua ordem no protocolo e + //a espécie documental e o nome do produtor serão obtidos para atribuição ao documento if($objComponenteDigitalDTO != null && $numCodigoEspecie == null) { if(isset($parObjMetadadosTramiteAnterior)){ $arrObjMetaDocumentosTramiteAnterior = array(); @@ -1036,22 +1075,23 @@ private function atribuirEspecieDocumental($parMetaDocumento, $parDocumentoDTO, } //Atribui espécie documental definida pelo produtor do documento e registrado no PEN, caso exista - if(count($arrMetaDocumentosAnteriorIndexado) > 0 && array_key_exists($parMetaDocumento->ordem, $arrMetaDocumentosAnteriorIndexado)){ - $numCodigoEspecie = $arrMetaDocumentosAnteriorIndexado[$parMetaDocumento->ordem]->especie->codigo; - $strNomeEspecieProdutor = mb_convert_encoding($arrMetaDocumentosAnteriorIndexado[$parMetaDocumento->ordem]->especie->nomeNoProdutor, 'UTF-8', 'ISO-8859-1'); + if(count($arrMetaDocumentosAnteriorIndexado) > 0 && array_key_exists($parMetaDocumento['ordem'], $arrMetaDocumentosAnteriorIndexado)){ + $numCodigoEspecie = $arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie->codigo; + $strNomeEspecieProdutor = mb_convert_encoding($arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie->nomeNoProdutor, 'UTF-8', 'ISO-8859-1'); } } } - - //Aplica o mapeamento de espécies definida pelo administrador para os novos documentos + //Aplica o mapeamento de espécies definida pelo administrador para os novos documentos if($numCodigoEspecie == null) { $numCodigoEspecie = $this->obterEspecieMapeada($parDocumentoDTO->getNumIdSerie()); $strNomeEspecieProdutor = mb_convert_encoding($parDocumentoDTO->getStrNomeSerie(), 'UTF-8', 'ISO-8859-1'); } - $parMetaDocumento->especie = new stdClass(); - $parMetaDocumento->especie->codigo = $numCodigoEspecie; - $parMetaDocumento->especie->nomeNoProdutor = $strNomeEspecieProdutor; + $parMetaDocumento['especie'] = array( + 'codigo' => $numCodigoEspecie, + 'nomeNoProdutor' => $strNomeEspecieProdutor + ); + return $parMetaDocumento; } @@ -1104,8 +1144,8 @@ private function atribuirAssinaturaEletronica($objComponenteDigital, AssinaturaD } } - private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDocumentoDTO, $dblIdProcedimento = null) - { + private function atribuirComponentesDigitaisREST($objDocumento, DocumentoDTO $objDocumentoDTO, $dblIdProcedimento = null) + { if(!isset($objDocumento)){ throw new InfraException('Parâmetro $objDocumento não informado.'); } @@ -1113,12 +1153,10 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc if(!isset($objDocumentoDTO)){ throw new InfraException('Parâmetro $objDocumentoDTO não informado.'); } - $arrObjDocumentoDTOAssociacao = $this->listarDocumentosRelacionados($dblIdProcedimento, $objDocumentoDTO->getDblIdDocumento()); $strStaAssociacao = count($arrObjDocumentoDTOAssociacao) == 1 ? $arrObjDocumentoDTOAssociacao[0]['StaAssociacao'] : null; $arrObjDadosArquivos = $this->listarDadosArquivos($objDocumentoDTO, $strStaAssociacao); - - $objDocumento->componenteDigital = array(); + $objDocumento['componentesDigitais'] = array(); foreach ($arrObjDadosArquivos as $numOrdemComponente => $objDadosArquivos) { if(!isset($objDadosArquivos) || count($objDadosArquivos) == 0){ @@ -1130,20 +1168,21 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc $strAlgoritmoHash = $objDadosArquivos['ALGORITMO_HASH_CONTEUDO']; //TODO: Revisar tal implementação para atender a gerao de hash de arquivos grandes - $objComponenteDigital = new stdClass(); - $objComponenteDigital->ordem = $numOrdemComponente; - $objComponenteDigital->nome = mb_convert_encoding($objDadosArquivos["NOME"], 'UTF-8', 'ISO-8859-1'); - $objComponenteDigital->hash = new SoapVar("{$hashDoComponenteDigital}", XSD_ANYXML); - $objComponenteDigital->tamanhoEmBytes = $objDadosArquivos['TAMANHO']; - + $objComponenteDigital = array(); + $objComponenteDigital['ordem'] = $numOrdemComponente; + $objComponenteDigital['nome'] = mb_convert_encoding($objDadosArquivos["NOME"], 'UTF-8', 'ISO-8859-1'); + $objComponenteDigital['hash'] = [ + 'algoritmo' => $strAlgoritmoHash, + 'conteudo' => $hashDoComponenteDigital + ]; + $objComponenteDigital['tamanhoEmBytes'] = $objDadosArquivos['TAMANHO']; //TODO: Validar os tipos de mimetype de acordo com o WSDL do SEI //Caso no identifique o tipo correto, informar o valor [outro] - $objComponenteDigital->mimeType = $objDadosArquivos['MIME_TYPE']; - $objComponenteDigital->tipoDeConteudo = $this->obterTipoDeConteudo($objDadosArquivos['MIME_TYPE']); - $objComponenteDigital = $this->atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteDigital, $hashDoComponenteDigital); - + $objComponenteDigital['mimeType'] = $objDadosArquivos['MIME_TYPE']; + $objComponenteDigital['tipoDeConteudo'] = $this->obterTipoDeConteudo($objDadosArquivos['MIME_TYPE']); + $objComponenteDigital = $this->atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objComponenteDigital, $hashDoComponenteDigital); if($objDadosArquivos['MIME_TYPE'] == 'outro'){ - $objComponenteDigital->dadosComplementaresDoTipoDeArquivo = $objDadosArquivos['dadosComplementaresDoTipoDeArquivo']; + $objComponenteDigital['dadosComplementaresDoTipoDeArquivo'] = $objDadosArquivos['dadosComplementaresDoTipoDeArquivo']; } //TODO: Preencher dados complementares do tipo de arquivo @@ -1152,11 +1191,12 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc //TODO: Carregar informações da assinatura digital //$this->atribuirAssinaturaEletronica($objComponenteDigital, $objDocumentoDTO); - $objComponenteDigital->idAnexo = $objDadosArquivos['ID_ANEXO']; + if (isset($objDadosArquivos['ID_ANEXO']) && !empty($objDadosArquivos['ID_ANEXO'])) { + $objComponenteDigital['idAnexo'] = $objDadosArquivos['ID_ANEXO']; + } - $objDocumento->componenteDigital[] = $objComponenteDigital; + $objDocumento['componentesDigitais'][] = $objComponenteDigital; } - return $objDocumento; } @@ -1169,8 +1209,9 @@ private function atribuirComponentesDigitais($objDocumento, DocumentoDTO $objDoc * @param string $strHashDocumento * @return void */ - public function atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteDigital, $strHashDocumento) - { + + public function atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objComponenteDigital, $strHashDocumento) + { $objDocumentoDTOTarjas = new DocumentoDTO(); $objDocumentoDTOTarjas->retDblIdDocumento(); $objDocumentoDTOTarjas->retStrNomeSerie(); @@ -1206,7 +1247,7 @@ public function atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteD $objAssinaturaDTO->retStrP7sBase64(); $resAssinatura = $this->objAssinaturaRN->listarRN1323($objAssinaturaDTO); - $objComponenteDigital->assinaturaDigital = array(); + $objComponenteDigital['assinaturasDigitais'] = array(); foreach ($resAssinatura as $keyOrder => $assinatura) { $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setNumIdAtividade($assinatura->getNumIdAtividade()); //7 @@ -1216,20 +1257,33 @@ public function atribuirDadosAssinaturaDigital($objDocumentoDTO, $objComponenteD $objAtividadeRN = new AtividadeRN(); $objAtividade = $objAtividadeRN->consultarRN0033($objAtividadeDTO); - $objAssinaturaDigital = new stdClass(); - $objAssinaturaDigital->razao = mb_convert_encoding($dataTarjas[$keyOrder], 'UTF-8', 'ISO-8859-1'); - $objAssinaturaDigital->observacao = mb_convert_encoding($dataTarjas[count($dataTarjas) - 1], 'UTF-8', 'ISO-8859-1'); - $objAssinaturaDigital->dataHora = $this->objProcessoEletronicoRN->converterDataWebService($objAtividade->getDthAbertura()); + $objAssinaturaDigital = array(); + $objAssinaturaDigital['razao'] = mb_convert_encoding($dataTarjas[$keyOrder], 'UTF-8', 'ISO-8859-1'); + $objAssinaturaDigital['observacao'] = mb_convert_encoding($dataTarjas[count($dataTarjas) - 1], 'UTF-8', 'ISO-8859-1'); + $objAssinaturaDigital['dataHora'] = $this->objProcessoEletronicoRN->converterDataWebService($objAtividade->getDthAbertura()); if($assinatura->getStrStaFormaAutenticacao() == AssinaturaRN::$TA_CERTIFICADO_DIGITAL){ - $objAssinaturaDigital->hash = new SoapVar("{$strHashDocumento}", XSD_ANYXML); - $objAssinaturaDigital->cadeiaDoCertificado = new SoapVar(''.($assinatura->getStrP7sBase64() ? $assinatura->getStrP7sBase64() : 'null').'', XSD_ANYXML); + $objAssinaturaDigital['hash'] = [ + 'algoritmo' => self::ALGORITMO_HASH_ASSINATURA, + 'conteudo' => $strHashDocumento + ]; + $objAssinaturaDigital['cadeiaDoCertificado'] = [ + 'formato' => 'PKCS7', + 'conteudo' => $assinatura->getStrP7sBase64() ? $assinatura->getStrP7sBase64() : 'vazio' + ]; } else { - $objAssinaturaDigital->hash = new SoapVar("null", XSD_ANYXML); - $objAssinaturaDigital->cadeiaDoCertificado = new SoapVar('null', XSD_ANYXML); + $objAssinaturaDigital['hash'] = [ + 'algoritmo' => self::ALGORITMO_HASH_ASSINATURA, + 'conteudo' => 'vazio' + ]; + + $objAssinaturaDigital['cadeiaDoCertificado'] = [ + 'formato' => 'PKCS7', + 'conteudo' => 'vazio' + ]; } - $objComponenteDigital->assinaturaDigital[] = $objAssinaturaDigital; + $objComponenteDigital['assinaturasDigitais'][] = $objAssinaturaDigital; } return $objComponenteDigital; @@ -1716,14 +1770,53 @@ private function atribuirNumeracaoDocumento($objDocumento, DocumentoDTO $parObjD } } - private function adicionarProcessosApensados($objProcesso, $arrIdProcessoApensado) + private function atribuirNumeracaoDocumentoREST($objDocumento, DocumentoDTO $parObjDocumentoDTO) + { + $objSerieDTO = $this->consultarSerie($parObjDocumentoDTO->getNumIdSerie()); + + if(!isset($objSerieDTO)){ + throw new InfraException("Tipo de Documento não pode ser localizado. (Código: ".$parObjDocumentoDTO->getNumIdSerie().")"); + } + + $strStaNumeracao = $objSerieDTO->getStrStaNumeracao(); + + $objDocumento['identificacao'] = array(); + if ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_UNIDADE) { + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($parObjDocumentoDTO->getStrSiglaUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($parObjDocumentoDTO->getStrDescricaoUnidadeGeradoraProtocolo(), 100)); + } elseif ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_ORGAO) { + $objOrgaoDTO = $this->consultarOrgao($parObjDocumentoDTO->getNumIdOrgaoUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($objOrgaoDTO->getStrSigla()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($objOrgaoDTO->getStrDescricao(), 100)); + } elseif ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_ANUAL_UNIDADE) { + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($parObjDocumentoDTO->getStrSiglaUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($parObjDocumentoDTO->getStrDescricaoUnidadeGeradoraProtocolo(), 100)); + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['ano'] = substr($parObjDocumentoDTO->getDtaGeracaoProtocolo(), 6, 4); + } elseif ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_ANUAL_ORGAO) { + $objOrgaoDTO = $this->consultarOrgao($parObjDocumentoDTO->getNumIdOrgaoUnidadeGeradoraProtocolo()); + $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); + $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($objOrgaoDTO->getStrSigla()); + $objDocumento['identificacao']['complemento'] = utf8_encode($this->objProcessoEletronicoRN->reduzirCampoTexto($objOrgaoDTO->getStrDescricao(), 100)); + $objDocumento['identificacao']['ano'] = substr($parObjDocumentoDTO->getDtaGeracaoProtocolo(), 6, 4); + } + + return $objDocumento; + } + + private function adicionarProcessosApensadosREST($objProcesso, $arrIdProcessoApensado) { - if(isset($arrIdProcessoApensado) && is_array($arrIdProcessoApensado) && count($arrIdProcessoApensado) > 0) { - $objProcesso->processoApensado = array(); - foreach($arrIdProcessoApensado as $idProcedimentoApensado) { - $objProcesso->processoApensado[] = $this->construirProcesso($idProcedimentoApensado); + if (isset($arrIdProcessoApensado) && is_array($arrIdProcessoApensado) && count($arrIdProcessoApensado) > 0) { + $objProcesso['processoApensado'] = array(); + + foreach ($arrIdProcessoApensado as $idProcedimentoApensado) { + $objProcesso['processoApensado'][] = $this->construirProcessoREST($idProcedimentoApensado); } } + + return $objProcesso; } private function consultarUnidade($numIdUnidade) @@ -2104,7 +2197,7 @@ private function enviarComponentesDigitais($strNumeroRegistro, $numIdTramite, $s ]; $this->salvarAnexoImutavel($dados); - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($objDadosArquivo['CONTEUDO'], XSD_BASE64BINARY); + $dadosDoComponenteDigital->conteudoDoComponenteDigital = $objDadosArquivo['CONTEUDO']; $parametros = new stdClass(); $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; @@ -2262,7 +2355,7 @@ private function enviarComponenteDigitalParticionado($strCaminhoAnexo, $dadosDoC $identificacaoDaParte->fim = ($inicio + $tamanhoParteArquivo); $dadosDoComponenteDigital->identificacaoDaParte = $identificacaoDaParte; - $dadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = new SoapVar($parteDoArquivo, XSD_BASE64BINARY); + $dadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = $parteDoArquivo; $parametros = new stdClass(); $parametros->dadosDaParteDeComponenteDigital = $dadosDoComponenteDigital; @@ -2882,7 +2975,7 @@ private function enviarParteDoComponenteDigital($parInicio, $parFim, $parParteDo $identificacaoDaParte->inicio = $parInicio; $identificacaoDaParte->fim = $parFim; $parDadosDoComponenteDigital->identificacaoDaParte = $identificacaoDaParte; - $parDadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = new SoapVar($parParteDoArquivo, XSD_BASE64BINARY); + $parDadosDoComponenteDigital->conteudoDaParteDeComponenteDigital = $parParteDoArquivo; $parametros = new stdClass(); $parametros->dadosDaParteDeComponenteDigital = $parDadosDoComponenteDigital; @@ -3066,18 +3159,28 @@ protected function cancelarTramiteInternoControlado(ProtocoloDTO $objDtoProtocol $objPenBlocoProcessoRN = new PenBlocoProcessoRN(); $objPenBlocoProcessoDTO = $objPenBlocoProcessoRN->consultar($objPenBlocoProcessoDTO); + $cancelarLote=false; - $objTramiteDTO = new TramiteDTO(); - $objTramiteDTO->setNumIdProcedimento($objDtoProtocolo->getDblIdProtocolo()); - $objTramiteDTO->setStrStaTipoTramite(ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO); - $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); - $objTramiteDTO->setNumMaxRegistrosRetorno(1); - $objTramiteDTO->retNumIdTramite(); + if(!is_null($objPenBlocoProcessoDTO)){ + $cancelarLote=true; + } + + if(!$cancelarLote){ + + $objTramiteDTO = new TramiteDTO(); + $objTramiteDTO->setNumIdProcedimento($objDtoProtocolo->getDblIdProtocolo()); + $objTramiteDTO->setStrStaTipoTramite(ProcessoEletronicoRN::$STA_TIPO_TRAMITE_ENVIO); + $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); + $objTramiteDTO->setNumMaxRegistrosRetorno(1); + $objTramiteDTO->retNumIdTramite(); - $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); - $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); + $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO); + + if(!isset($objTramiteDTO)){ + throw new InfraException("Trâmite não encontrado para o processo {$objDtoProtocolo->getDblIdProtocolo()}."); + } - if(isset($objTramiteDTO)) { $tramites = $this->objProcessoEletronicoRN->consultarTramites($objTramiteDTO->getNumIdTramite(), null, $objPenUnidadeDTO->getNumIdUnidadeRH(), null, null, $numIdRespositorio); $tramite = $tramites ? $tramites[0] : null; @@ -3122,7 +3225,7 @@ protected function cancelarTramiteInternoControlado(ProtocoloDTO $objDtoProtocol break; } - // Solicitação de cancelamento de tramite de processo ao TramitaGOV.br +// Solicitação de cancelamento de tramite de processo ao TramitaGOV.br // Somente solicita cancelamento ao PEN se processo ainda não estiver cancelado if(!in_array($numSituacaoAtual, array(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO_AUTOMATICAMENTE, ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO))) { $this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT); @@ -3398,4 +3501,4 @@ private function lancarEventoEnvioMetadados($parNumIdTramite) } } -} +} \ No newline at end of file From 70e61dcf1d23dec5de928bd8e61f2005861c575f Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:39:06 -0300 Subject: [PATCH 04/25] =?UTF-8?q?feat:=20alterar=20o=20m=C3=A9todos=20da?= =?UTF-8?q?=20classe=20PENAgendamento=20para=20funcionamento=20correto=20c?= =?UTF-8?q?om=20REST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/PENAgendamentoRN.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/rn/PENAgendamentoRN.php b/src/rn/PENAgendamentoRN.php index 634c16473..d28e16d90 100755 --- a/src/rn/PENAgendamentoRN.php +++ b/src/rn/PENAgendamentoRN.php @@ -22,12 +22,12 @@ protected function atualizarHipotesesLegaisControlado() $hipotesesPenDesativadas = $processoEletronicoRN->consultarHipotesesLegais(false); $hipoteses = array(); - if (!empty($hipotesesPen) && !empty($hipotesesPen->hipotesesLegais) && !empty($hipotesesPen->hipotesesLegais->hipotese)) { - $hipoteses = $hipotesesPen->hipotesesLegais->hipotese; + if (!empty($hipotesesPen) && !empty($hipotesesPen['hipotesesLegais'])) { + $hipoteses = $hipotesesPen['hipotesesLegais']; } - if (!empty($hipotesesPenDesativadas) && !empty($hipotesesPenDesativadas->hipotesesLegais) && !empty($hipotesesPenDesativadas->hipotesesLegais->hipotese)) { - $hipoteses = array_merge($hipoteses, $hipotesesPenDesativadas->hipotesesLegais->hipotese); + if (!empty($hipotesesPenDesativadas) && !empty($hipotesesPenDesativadas['hipotesesLegais'])) { + $hipoteses = array_merge($hipoteses, $hipotesesPenDesativadas['hipotesesLegais']); } if(empty($hipoteses)){ @@ -38,20 +38,20 @@ protected function atualizarHipotesesLegaisControlado() foreach ($hipoteses as $hipotese) { $objDTO = new PenHipoteseLegalDTO(); - $objDTO->setNumIdentificacao($hipotese->identificacao); + $objDTO->setNumIdentificacao($hipotese['identificacao']); $objDTO->setNumMaxRegistrosRetorno(1); $objDTO->retStrNome(); $objDTO->retNumIdHipoteseLegal(); $objConsulta = $objBD->consultar($objDTO); //Caso não haja um nome para a hipótese legal, ele pula para a próxima. - if (empty($hipotese->nome)) { + if (empty($hipotese['nome'])) { continue; } $objDTO->setStrNome(mb_convert_encoding($hipotese->nome, 'ISO-8859-1', 'UTF-8')); - if ($hipotese->status) { + if ($hipotese['status']) { $objDTO->setStrAtivo('S'); } else { $objDTO->setStrAtivo('N'); @@ -59,7 +59,6 @@ protected function atualizarHipotesesLegaisControlado() //Caso não exista a hipótese irá cadastra-la no sei. if (empty($objConsulta)) { - $objBD->cadastrar($objDTO); } else { //Caso contrário apenas irá atualizar os dados. From 5444eb6935d7b8daa58ef1d974b46922cd996ae8 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 13 Nov 2024 16:40:13 -0300 Subject: [PATCH 05/25] feat: alterar estrutura da classe ProcessoEletronicoINT para funcionamento correto com REST --- src/int/ProcessoEletronicoINT.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/int/ProcessoEletronicoINT.php b/src/int/ProcessoEletronicoINT.php index 62d58ceee..cf3a4bd4f 100755 --- a/src/int/ProcessoEletronicoINT.php +++ b/src/int/ProcessoEletronicoINT.php @@ -142,13 +142,13 @@ public static function formatarHierarquia($ObjEstrutura) if(isset($ObjEstrutura->hierarquia)) { - $arrObjNivel = $ObjEstrutura->hierarquia->nivel; + $arrObjNivel = $ObjEstrutura->hierarquia; $siglasUnidades = array(); $siglasUnidades[] = $ObjEstrutura->sigla; foreach($arrObjNivel as $key => $objNivel){ - $siglasUnidades[] = $objNivel->sigla ; + $siglasUnidades[] = $objNivel->sigla; } for($i = 1; $i <= 3; $i++){ From 8b1c7afc2d03d4751f92f808ab5225f836bece9e Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 14 Nov 2024 08:29:13 -0300 Subject: [PATCH 06/25] refactor: substituir todas as rotas SOAP para REST --- src/rn/ProcessoEletronicoRN.php | 1977 +++++++++++++++++-------------- 1 file changed, 1096 insertions(+), 881 deletions(-) diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 56a38442f..6f90bac27 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -1,5 +1,12 @@ "Outro" ); - private $objPenWs; private $strEnderecoWebService; - private $options; private $numTentativasErro; - private $strComumXSD; private $strLocalCert; private $strLocalCertPassword; - public function __construct() - { - $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); - $strEnderecoWebService = $objConfiguracaoModPEN->getValor("PEN", "WebService"); - $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); - $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - $numTentativasErro = $objConfiguracaoModPEN->getValor("PEN", "NumeroTentativasErro", false, self::WS_TENTATIVAS_ERRO); - $numTentativasErro = (is_numeric($numTentativasErro)) ? intval($numTentativasErro) : self::WS_TENTATIVAS_ERRO; - - $this->strEnderecoWebService = $strEnderecoWebService; - $this->strComumXSD = $this->strEnderecoWebService . '?xsd=comum.xsd'; - $this->strLocalCert = $strLocalizacaoCertificadoDigital; - $this->strLocalCertPassword = $strSenhaCertificadoDigital; - $this->numTentativasErro = $numTentativasErro; - - $this->options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $this->strLocalCert - , 'passphrase' => $this->strLocalCertPassword - , 'resolve_wsdl_remote_includes' => true - , 'connection_timeout' => self::WS_TIMEOUT_CONEXAO - , 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ) - ); + private $strClientGuzzle; + private $strBaseUri; + private $arrheaders; + + public function __construct() + { + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strEnderecoWebService = $objConfiguracaoModPEN->getValor("PEN", "WebService"); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); + $numTentativasErro = $objConfiguracaoModPEN->getValor("PEN", "NumeroTentativasErro", false, self::WS_TENTATIVAS_ERRO); + $numTentativasErro = (is_numeric($numTentativasErro)) ? intval($numTentativasErro) : self::WS_TENTATIVAS_ERRO; + + $this->strEnderecoWebService = $strEnderecoWebService; + $this->strLocalCert = $strLocalizacaoCertificadoDigital; + $this->strLocalCertPassword = $strSenhaCertificadoDigital; + $this->numTentativasErro = $numTentativasErro; + + + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $this->strBaseUri = $strEnderecoWebService; + $this->arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $this->strClientGuzzle = new Client([ + 'base_uri' => $this->strBaseUri, + 'timeout' => 5.0, + 'headers' => $this->arrheaders, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); } - protected function inicializarObjInfraIBanco() { - return BancoSEI::getInstance(); + return BancoSEI::getInstance(); } /** - * Construtor do objeto SoapClien utilizado para comunicação Webservice SOAP + * Construtor do objeto SoapClien utilizado para comunicação Webservice * - * @return void */ private function getObjPenWs() { - if($this->objPenWs == null) { - - if (InfraString::isBolVazia($this->strEnderecoWebService)) { + if (InfraString::isBolVazia($this->strEnderecoWebService)) { throw new InfraException('Endereço do serviço de integração do Tramita GOV.BR não informado.'); - } + } - if (InfraString::isBolVazia($this->strLocalCertPassword)) { - throw new InfraException('Dados de autenticação do serviço de integração do Tramita.GOV.BR não informados.'); - } + if (InfraString::isBolVazia($this->strLocalCertPassword)) { + throw new InfraException('Dados de autenticação do serviço de integração do Tramita.GOV.BR não informados.'); + } - $this->validarDisponibilidade(); + // Validar disponibilidade do serviço + $endpoint = $this->strEnderecoWebService . 'healthcheck'; - try { - $strWSDL = $this->strEnderecoWebService . '?wsdl'; - $this->objPenWs = new BeSimple\SoapClient\SoapClient($strWSDL, $this->options); - } catch (Exception $e) { - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - $mensagem = "Falha de comunicação com o Tramita GOV.BR: " . $detalhes; - throw new \SoapFault("HTTP", $mensagem); + try{ + $response = $this->strClientGuzzle->request('GET', $endpoint); + + if ($response->getStatusCode() !== 200) { + throw new \RuntimeException('Falha ao conectar com o serviço REST'); } + } catch (RequestException $e) { + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + $mensagem = "Falha de comunicação com o Tramita GOV.BR: " . $detalhes; + throw new \Exception($mensagem); } - - return $this->objPenWs; } @@ -174,142 +179,115 @@ private function getObjPenWs() * Consulta a lista de repositório de estruturas disponíveis no Barramento de Serviços do PEN * * @param int $numIdentificacaoDoRepositorioDeEstruturas Código de identificação do repositório de estruturas do PEN - * @return void */ - public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) - { - $objRepositorioDTO = null; - try{ - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura->ativos = false; - - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarRepositoriosDeEstruturas($parametros); - }); - - if(isset($result->repositoriosEncontrados->repositorio)){ - - if(!is_array($result->repositoriosEncontrados->repositorio)) { - $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); - } - - foreach ($result->repositoriosEncontrados->repositorio as $repositorio) { - if($repositorio->id == $numIdentificacaoDoRepositorioDeEstruturas){ - $objRepositorioDTO = new RepositorioDTO(); - $objRepositorioDTO->setNumId($repositorio->id); - $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio->nome, 'ISO-8859-1', 'UTF-8')); - $objRepositorioDTO->setBolAtivo($repositorio->ativo); - } - } - } - } catch(Exception $e){ - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $objRepositorioDTO; - } + public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) + { + $objRepositorioDTO = null; + $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; + try { + $parametros = [ + 'ativo' => true + ]; + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + } + } + } catch (Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $objRepositorioDTO; + } /** * Lista todo os repositórios de estruturas disponíveis no Barramento de Serviços do PEN * * @return void */ - public function listarRepositoriosDeEstruturas() - { - $arrObjRepositorioDTO = array(); - - try{ - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura = new stdClass(); - $parametros->filtroDeConsultaDeRepositoriosDeEstrutura->ativos = true; - - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarRepositoriosDeEstruturas($parametros); - }); - - if(isset($result->repositoriosEncontrados->repositorio)){ - if(!is_array($result->repositoriosEncontrados->repositorio)) { - $result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio); - } - - foreach ($result->repositoriosEncontrados->repositorio as $repositorio) { - $item = new RepositorioDTO(); - $item->setNumId($repositorio->id); - $item->setStrNome(mb_convert_encoding($repositorio->nome, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($repositorio->ativo); - $arrObjRepositorioDTO[] = $item; - } - } - } catch(Exception $e){ - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $arrObjRepositorioDTO; - } - + public function listarRepositoriosDeEstruturas() + { + $arrObjRepositorioDTO = []; + $endpoint = 'repositorios-de-estruturas'; + + try { + $parametros = [ + 'ativos' => true + ]; + + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + $arrObjRepositorioDTO[] = $objRepositorioDTO; + } + } + } catch(Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrObjRepositorioDTO; + } /** - * Método responsável por consultar as estruturas das unidades externas no barramento - * @param $idRepositorioEstrutura - * @param $numeroDeIdentificacaoDaEstrutura - * @param bool $bolRetornoRaw - * @return EstruturaDTO|mixed - * @throws InfraException - */ + * Método responsável por consultar as estruturas das unidades externas no barramento. + * + * @param int $idRepositorioEstrutura + * @param int $numeroDeIdentificacaoDaEstrutura + * @param bool $bolRetornoRaw + * @throws InfraException + * @return EstruturaDTO + */ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura, $bolRetornoRaw = false) - { + { + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/$numeroDeIdentificacaoDaEstrutura"; try { - $parametros = new stdClass(); - $parametros->filtroDeEstruturas = new stdClass(); - $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = $numeroDeIdentificacaoDaEstrutura; - $parametros->filtroDeEstruturas->apenasAtivas = false; - - $result = $this->tentarNovamenteSobErroHTTP(function ($objPenWs) use ($parametros) { - return $objPenWs->consultarEstruturas($parametros); - }); - if ($result->estruturasEncontradas->totalDeRegistros == 1) { - $arrObjEstrutura = is_array($result->estruturasEncontradas->estrutura) ? $result->estruturasEncontradas->estrutura : array($result->estruturasEncontradas->estrutura); - $objEstrutura = current($arrObjEstrutura); + $parametros = []; + $arrResultado = $this->get($endpoint, $parametros); - $objEstrutura->nome = mb_convert_encoding($objEstrutura->nome, 'ISO-8859-1', 'UTF-8'); - $objEstrutura->sigla = mb_convert_encoding($objEstrutura->sigla, 'ISO-8859-1', 'UTF-8'); + if ($bolRetornoRaw !== false) { + $arrResultado['nome'] = mb_convert_encoding($arrResultado['nome'], 'ISO-8859-1', 'UTF-8'); + $arrResultado['sigla'] = mb_convert_encoding($arrResultado['sigla'], 'ISO-8859-1', 'UTF-8'); - if ($bolRetornoRaw !== false) { - if (isset($objEstrutura->hierarquia) && isset($objEstrutura->hierarquia->nivel)) { - if (!is_array($objEstrutura->hierarquia->nivel)) { - $objEstrutura->hierarquia->nivel = array($objEstrutura->hierarquia->nivel); - } - - foreach ($objEstrutura->hierarquia->nivel as &$objNivel) { - $objNivel->nome = mb_convert_encoding($objNivel->nome, 'ISO-8859-1', 'UTF-8'); - } + if (isset($arrResultado['hierarquia']) && is_array($arrResultado['hierarquia'])) { + foreach ($arrResultado['hierarquia'] as &$arrHierarquia) { + $arrHierarquia['nome'] = mb_convert_encoding($arrHierarquia['nome'], 'ISO-8859-1', 'UTF-8'); } - return $objEstrutura; - } else { - $objEstruturaDTO = new EstruturaDTO(); - $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($objEstrutura->numeroDeIdentificacaoDaEstrutura); - $objEstruturaDTO->setStrNome($objEstrutura->nome); - $objEstruturaDTO->setStrSigla($objEstrutura->sigla); - $objEstruturaDTO->setBolAtivo($objEstrutura->ativo); - $objEstruturaDTO->setBolAptoParaReceberTramites($objEstrutura->aptoParaReceberTramites); - $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($objEstrutura->codigoNoOrgaoEntidade); - return $objEstruturaDTO; } + + return self::converterArrayParaObjeto($arrResultado); } + + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($arrResultado['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($arrResultado['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($arrResultado['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($arrResultado['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($arrResultado['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($arrResultado['codigoNoOrgaoEntidade']); + + return $objEstruturaDTO; } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } } - /** + /** * Método responsável por recuperar pela estutura pai a estrutura de filhos de uma unidade * @param $idRepositorioEstrutura * @param null $numeroDeIdentificacaoDaEstrutura @@ -317,7 +295,7 @@ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificac * @return array * @throws InfraException */ - public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) + public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) { try { $estruturasUnidades = null; @@ -347,7 +325,84 @@ public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $num } } - /** + /** + * Lista estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura ID do repositório de estruturas. + * @param string $nome + * @param int $numeroDeIdentificacaoDaEstruturaRaizDaConsulta + * @param string $nomeUnidade + * @param string $siglaUnidade + * @param int $offset Offset + * @param int $registrosPorPagina + * @param bool $parBolPermiteRecebimento + * @param bool $parBolPermiteEnvio + * @throws InfraException + * @return EstruturaDTO + */ + public function listarEstruturas( + $idRepositorioEstrutura, + $nome = '', + $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, + $nomeUnidade = null, + $siglaUnidade = null, + $offset = null, + $registrosPorPagina = null, + $parBolPermiteRecebimento = null, + $parBolPermiteEnvio = null + ) { + $arrObjEstruturaDTO = []; + try { + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + if (!$idRepositorioEstrutura) { + throw new InfraException('Repositório de Estruturas inválido'); + } + + $parametros = [ + 'apenasAtivas' => true, + 'identificacaoDoRepositorioDeEstruturas' => $idRepositorioEstrutura, + 'sigla' => $siglaUnidade, + 'nome' => $nomeUnidade, + 'permiteRecebimento' => $parBolPermiteRecebimento, + 'permiteEnvio' => $parBolPermiteEnvio, + 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome, + 'registroInicial' => $offset, + 'quantidadeDeRegistros' => $registrosPorPagina, + ]; + + $arrResultado = $this->consultarEstruturas($idRepositorioEstrutura, $parametros); + + if ($arrResultado['totalDeRegistros'] > 0) { + + foreach ($arrResultado['estruturas'] as $estrutura) { + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + $objEstruturaDTO->setNumTotalDeRegistros($arrResultado['totalDeRegistros']); + + $arrHerarquia = array_map(function ($nivel) { + return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + $arrObjEstruturaDTO[] = $objEstruturaDTO; + } + } + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrObjEstruturaDTO; + } + + /** * Verifica se o repositório de estruturas possui limitação de repositórios/unidades mapeadas * * @param $idRepositorioEstrutura @@ -439,95 +494,6 @@ private function buscarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numer : array($result->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura); } - public function listarEstruturas($idRepositorioEstrutura, $nome = '', $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, - $nomeUnidade = null, $siglaUnidade = null, $offset = null, $registrosPorPagina = null, $parBolPermiteRecebimento = null, $parBolPermiteEnvio = null) - { - $arrObjEstruturaDTO = array(); - - try{ - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); - if(!$idRepositorioEstrutura) { - throw new InfraException("Repositório de Estruturas inválido"); - } - - $parametros = new stdClass(); - $parametros->filtroDeEstruturas = new stdClass(); - $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; - $parametros->filtroDeEstruturas->apenasAtivas = true; - - if(!is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta)){ - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstruturaRaizDaConsulta = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta; - }else{ - $nome = trim($nome); - if(is_numeric($nome)) { - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = intval($nome); - } else { - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nome, 'UTF-8', 'ISO-8859-1'); - } - } - - if(!is_null($siglaUnidade)){ - $parametros->filtroDeEstruturas->sigla = $siglaUnidade; - } - - if(!is_null($nomeUnidade)){ - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nomeUnidade, 'UTF-8', 'ISO-8859-1'); - } - - if(!is_null($registrosPorPagina) && !is_null($offset)){ - $parametros->filtroDeEstruturas->paginacao = new stdClass(); - $parametros->filtroDeEstruturas->paginacao->registroInicial = $offset; - $parametros->filtroDeEstruturas->paginacao->quantidadeDeRegistros = $registrosPorPagina; - } - - if(!is_null($parBolPermiteRecebimento) && $parBolPermiteRecebimento === true){ - $parametros->filtroDeEstruturas->permiteRecebimento = true; - } - - if(!is_null($parBolPermiteEnvio) && $parBolPermiteEnvio === true){ - $parametros->filtroDeEstruturas->permiteEnvio = true; - } - - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarEstruturas($parametros); - }); - - if($result->estruturasEncontradas->totalDeRegistros > 0) { - - if(!is_array($result->estruturasEncontradas->estrutura)) { - $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); - } - - foreach ($result->estruturasEncontradas->estrutura as $estrutura) { - $item = new EstruturaDTO(); - $item->setNumNumeroDeIdentificacaoDaEstrutura($estrutura->numeroDeIdentificacaoDaEstrutura); - $item->setStrNome(mb_convert_encoding($estrutura->nome, 'ISO-8859-1', 'UTF-8')); - $item->setStrSigla(mb_convert_encoding($estrutura->sigla, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($estrutura->ativo); - $item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites); - $item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade); - $item->setNumTotalDeRegistros($result->estruturasEncontradas->totalDeRegistros); - - if(!empty($estrutura->hierarquia->nivel)) { - $array = array(); - foreach($estrutura->hierarquia->nivel as $nivel) { - $array[] = mb_convert_encoding($nivel->sigla, 'ISO-8859-1', 'UTF-8'); - } - $item->setArrHierarquia($array); - } - - $arrObjEstruturaDTO[] = $item; - } - } - - } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $arrObjEstruturaDTO; - } public function listarEstruturasBuscaTextual( $idRepositorioEstrutura, @@ -543,71 +509,55 @@ public function listarEstruturasBuscaTextual( $arrObjEstruturaDTO = array(); try { - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); if (!$idRepositorioEstrutura) { - throw new InfraException("Repositório de Estruturas inválido"); - } - - $totalDeRegistros = 0; - $estruturasUnidades = null; - if (is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta) || empty($numeroDeIdentificacaoDaEstruturaRaizDaConsulta)) { - $estruturasUnidades = $this->validarRestricaoUnidadesCadastradas($idRepositorioEstrutura); - $totalDeRegistros = is_null($estruturasUnidades) ? 0 : count($estruturasUnidades); - } - - if (is_null($estruturasUnidades)) { - $result = $this->buscarListaEstruturas(array( - [ - 'idRepositorioEstrutura' => $idRepositorioEstrutura, - 'nome' => $nome, - 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta, - 'nomeUnidade' => $nomeUnidade, - 'siglaUnidade' => $siglaUnidade, - 'offset' => $offset, - 'registrosPorPagina' => $registrosPorPagina, - 'parBolPermiteRecebimento' => $parBolPermiteRecebimento, - 'parBolPermiteEnvio' => $parBolPermiteEnvio - ] - )); - - $totalDeRegistros = $result->estruturasEncontradas->totalDeRegistros; - if ($totalDeRegistros > 0 && !is_array($result->estruturasEncontradas->estrutura)) { - $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); - } - $estruturasUnidades = $result->estruturasEncontradas->estrutura; - } - - if ($totalDeRegistros > 0) { - foreach ($estruturasUnidades as $estrutura) { - $item = new EstruturaDTO(); - $item->setNumNumeroDeIdentificacaoDaEstrutura($estrutura->numeroDeIdentificacaoDaEstrutura); - $item->setStrNome(mb_convert_encoding($estrutura->nome, 'ISO-8859-1', 'UTF-8')); - $item->setStrSigla(mb_convert_encoding($estrutura->sigla, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($estrutura->ativo); - $item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites); - $item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade); - $item->setNumTotalDeRegistros($totalDeRegistros); - - if (!empty($estrutura->hierarquia->nivel)) { - $array = array(); - foreach ($estrutura->hierarquia->nivel as $nivel) { - $array[] = mb_convert_encoding($nivel->sigla, 'ISO-8859-1', 'UTF-8'); - } - $item->setArrHierarquia($array); + throw new InfraException('Repositório de Estruturas inválido'); + } + + $parametros = [ + 'apenasAtivas' => true, + 'identificacaoDoRepositorioDeEstruturas' => $idRepositorioEstrutura, + 'sigla' => $siglaUnidade, + 'nome' => $nomeUnidade, + 'permiteRecebimento' => $parBolPermiteRecebimento, + 'permiteEnvio' => $parBolPermiteEnvio, + 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome, + 'registroInicial' => $offset, + 'quantidadeDeRegistros' => $registrosPorPagina, + ]; + + $arrResultado = $this->consultarEstruturas($idRepositorioEstrutura, $parametros); + + if ($arrResultado['totalDeRegistros'] > 0) { + + foreach ($arrResultado['estruturas'] as $estrutura) { + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + $objEstruturaDTO->setNumTotalDeRegistros($arrResultado['totalDeRegistros']); + + $arrHerarquia = array_map(function ($nivel) { + return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + $arrObjEstruturaDTO[] = $objEstruturaDTO; } - - $arrObjEstruturaDTO[] = $item; } - } } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } - return $arrObjEstruturaDTO; + return $arrObjEstruturaDTO; } - + private function buscarListaEstruturas( $idRepositorioEstrutura, $filtro = array() @@ -656,149 +606,102 @@ private function buscarListaEstruturas( } public function listarEstruturasAutoCompletar( - $idRepositorioEstrutura, - $nome = '', - $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, - $nomeUnidade = null, - $siglaUnidade = null, - $offset = null, - $registrosPorPagina = null, - $parBolPermiteRecebimento = null, - $parBolPermiteEnvio = null - ) { - $arrObjEstruturaDTO = array('diferencaDeRegistros' => 0, 'itens' => array()); - + $idRepositorioEstrutura, + $nome = '', + $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, + $nomeUnidade = null, + $siglaUnidade = null, + $offset = null, + $registrosPorPagina = null, + $parBolPermiteRecebimento = null, + $parBolPermiteEnvio = null + ) { + $arrObjEstruturaDTO = array('diferencaDeRegistros' => 0, 'itens' => array()); + try { - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); if (!$idRepositorioEstrutura) { throw new InfraException("Repositório de Estruturas inválido"); } - - $parametros = new stdClass(); - $parametros->filtroDeEstruturas = new stdClass(); - $parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura; - $parametros->filtroDeEstruturas->apenasAtivas = true; - - if (!is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta)) { - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstruturaRaizDaConsulta = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta; - } else { - $nome = trim($nome); - if (is_numeric($nome)) { - $parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = intval($nome); - } else { - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nome, 'UTF-8', 'ISO-8859-1'); - } - } - - if (!is_null($siglaUnidade)) { - $parametros->filtroDeEstruturas->sigla = $siglaUnidade; - } - - if (!is_null($nomeUnidade)) { - $parametros->filtroDeEstruturas->nome = mb_convert_encoding($nomeUnidade, 'UTF-8', 'ISO-8859-1'); - } - - if (!is_null($registrosPorPagina) && !is_null($offset)) { - $parametros->filtroDeEstruturas->paginacao = new stdClass(); - $parametros->filtroDeEstruturas->paginacao->registroInicial = $offset; - $parametros->filtroDeEstruturas->paginacao->quantidadeDeRegistros = $registrosPorPagina; - } - - if (!is_null($parBolPermiteRecebimento) && $parBolPermiteRecebimento === true) { - $parametros->filtroDeEstruturas->permiteRecebimento = true; - } - - if (!is_null($parBolPermiteEnvio) && $parBolPermiteEnvio === true) { - $parametros->filtroDeEstruturas->permiteEnvio = true; - } - - $result = $this->tentarNovamenteSobErroHTTP(function ($objPenWs) use ($parametros) { - return $objPenWs->consultarEstruturas($parametros); - }); - - if ($result->estruturasEncontradas->totalDeRegistros > 0) { - - if (!is_array($result->estruturasEncontradas->estrutura)) { - $result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura); - } - - foreach ($result->estruturasEncontradas->estrutura as $estrutura) { - $item = new EstruturaDTO(); - $item->setNumNumeroDeIdentificacaoDaEstrutura($estrutura->numeroDeIdentificacaoDaEstrutura); - $item->setStrNome(mb_convert_encoding($estrutura->nome, 'ISO-8859-1', 'UTF-8')); - $item->setStrSigla(mb_convert_encoding($estrutura->sigla, 'ISO-8859-1', 'UTF-8')); - $item->setBolAtivo($estrutura->ativo); - $item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites); - $item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade); - $item->setNumTotalDeRegistros($result->estruturasEncontradas->totalDeRegistros); - - if (!empty($estrutura->hierarquia->nivel)) { - $array = array(); - foreach ($estrutura->hierarquia->nivel as $nivel) { - $array[] = mb_convert_encoding($nivel->sigla, 'ISO-8859-1', 'UTF-8'); - } - $item->setArrHierarquia($array); - } - - $arrObjEstruturaDTO["itens"][] = $item; - } - $totalDeRegistros = $result->estruturasEncontradas->totalDeRegistros; + $parametros = [ + 'identificacaoDoRepositorioDeEstruturas' => $idRepositorioEstrutura, + 'apenasAtivas' => true, + 'numeroDeIdentificacaoDaEstruturaRaizDaConsulta' => $numeroDeIdentificacaoDaEstruturaRaizDaConsulta, + 'sigla' => $siglaUnidade ?: null, + 'nome' => !is_null($nomeUnidade) ? mb_convert_encoding($nomeUnidade, 'UTF-8') : (is_null($numeroDeIdentificacaoDaEstruturaRaizDaConsulta) && !is_null($nome) ? (is_numeric($nome) ? intval($nome) : mb_convert_encoding($nome, 'UTF-8')) : null), + 'registroInicial' => !is_null($registrosPorPagina) && !is_null($offset) ? $offset : null, + 'quantidadeDeRegistros' => !is_null($registrosPorPagina) && !is_null($offset) ? $registrosPorPagina : null, + 'permiteRecebimento' => $parBolPermiteRecebimento ?: null, + 'permiteEnvio' => $parBolPermiteEnvio ?: null + ]; + + $parametros = array_filter($parametros, function($value) { + return !is_null($value); + }); + + $arrResultado = $this->consultarEstruturas($idRepositorioEstrutura, $parametros); + + if ($arrResultado['totalDeRegistros'] > 0) { + foreach ($arrResultado['estruturas'] as $estrutura) { + + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + $objEstruturaDTO->setNumTotalDeRegistros($arrResultado['totalDeRegistros']); + + $arrHerarquia = array_map(function($nivel) { + return mb_convert_encoding($nivel['sigla'], 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + $arrObjEstruturaDTO["itens"][] = $objEstruturaDTO; + } + + $totalDeRegistros = $arrResultado['totalDeRegistros']; $arrObjEstruturaDTO["diferencaDeRegistros"] = $totalDeRegistros > count($arrObjEstruturaDTO["itens"]) ? - $totalDeRegistros - count($arrObjEstruturaDTO["itens"]) : 0; + $totalDeRegistros - count($arrObjEstruturaDTO["itens"]) : 0; } } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } - - return $arrObjEstruturaDTO; + + return $arrObjEstruturaDTO; } - public function consultarMotivosUrgencia() - { - $curl = curl_init($this->strComumXSD); - - try{ - $bolEmProducao = boolval(ConfiguracaoSEI::getInstance()->getValor('SEI', 'Producao')); - curl_setopt($curl, CURLOPT_URL, $this->strComumXSD); - curl_setopt($curl, CURLOPT_HEADER, false); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, $bolEmProducao); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $bolEmProducao); - curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalCert); - curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strLocalCertPassword); - - $output = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($curl) { - return curl_exec($curl); - }); - - $dom = new DOMDocument(); - $dom->loadXML($output); - - $xpath = new DOMXPath($dom); - $rootNamespace = $dom->lookupNamespaceUri($dom->namespaceURI); - $xpath->registerNamespace('x', $rootNamespace); - $entries = $xpath->query('/x:schema/x:simpleType[@name="motivoDaUrgencia"]/x:restriction/x:enumeration'); - - $resultado = array(); - foreach ($entries as $entry) { - $valor = $entry->getAttribute('value'); - $documentationNode = $xpath->query('x:annotation/x:documentation', $entry); - $descricao = $documentationNode->item(0)->nodeValue; - $resultado[$valor] = mb_convert_encoding($descricao, 'ISO-8859-1', 'UTF-8'); - } - } finally{ - curl_close($curl); + public function consultarMotivosUrgencia() + { + $endpoint = 'motivosUrgencia'; + try { + $parametros = []; + + $arrResultado = $this->get($endpoint, $parametros); + $arrMotivosUrgencia = []; + if (isset($arrResultado)) { + $count = count($arrResultado['motivosUrgencia']); + + for ($i = 0; $i < $count; $i++) { + $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); + } + } + + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrMotivosUrgencia; } - return $resultado; - } - - /** * Busca as espécies documentais aceitas pelo Barramento de Serviços do PEN * @@ -806,52 +709,31 @@ public function consultarMotivosUrgencia() * * @return array */ - public function consultarEspeciesDocumentais() + public function consultarEspeciesDocumentais() { - $curl = curl_init($this->strComumXSD); - - try{ - curl_setopt($curl, CURLOPT_URL, $this->strComumXSD); - curl_setopt($curl, CURLOPT_HEADER, 0); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - - if(!ConfiguracaoSEI::getInstance()->getValor('SEI', 'Producao')){ - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); - } - curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalCert); - curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strLocalCertPassword); - - $output = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($curl) { - return curl_exec($curl); - }); + $endpoint = 'especies'; + try { + $parametros = []; + + $arrResultado = $this->get($endpoint, $parametros); + $arrEspecies = []; + if (isset($arrResultado)) { + $count = count($arrResultado['especies']); + + for ($i = 0; $i < $count; $i++) { + $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); + } + } - $dom = new DOMDocument(); - $dom->loadXML($output); + } catch (Exception $e) { + $mensagem = "Não foi encontrado nenhuma espécie documental."; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } - $xpath = new DOMXPath($dom); - $rootNamespace = $dom->lookupNamespaceUri($dom->namespaceURI); - $xpath->registerNamespace('x', $rootNamespace); - $entries = $xpath->query('/x:schema/x:complexType[@name="especie"]/x:sequence/x:element[@name="codigo"]/x:simpleType/x:restriction/x:enumeration'); - if (count($entries) == 0){ - $erro_curl = empty(curl_error($curl))?'Não houve':curl_error($curl); - throw new InfraException("Não foi achado nenhuma espécie documental. Favor checar a configuração. Possível erro do curl: ".$erro_curl); - } - $resultado = array(); - foreach ($entries as $entry) { - $valor = $entry->getAttribute('value'); - $documentationNode = $xpath->query('x:annotation/x:documentation', $entry); - $descricao = $documentationNode->item(0)->nodeValue; - $resultado[$valor] = mb_convert_encoding($descricao, 'ISO-8859-1', 'UTF-8'); - } - } finally{ - curl_close($curl); + return $arrEspecies; } - return $resultado; - } - public function enviarProcesso($parametros) { @@ -861,7 +743,7 @@ public function enviarProcesso($parametros) }); } catch (\SoapFault $e) { - $strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(mb_convert_encoding($e->faultstring, 'ISO-8859-1', 'UTF-8'))); + $strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(mb_convert_encoding($e->faultstring, 'ISO-8859-1', 'UTF-8'))); if ($e instanceof \SoapFault && !empty($e->detail->interoperabilidadeException->codigoErro) && $e->detail->interoperabilidadeException->codigoErro == '0005') { $strMensagem .= 'O código mapeado para a unidade ' . mb_convert_encoding($parametros->novoTramiteDeProcesso->processo->documento[0]->produtor->unidade->nome, 'ISO-8859-1', 'UTF-8') . ' está incorreto.'; @@ -878,6 +760,31 @@ public function enviarProcesso($parametros) } } + + + public function enviarProcessoREST($parametros) + { + $endpoint = "tramites/processo"; + try { + $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); + + return $arrResultado; + + } catch (Exception $e) { + + $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; + $erroRequest = json_decode($e->getMessage()); + if ($erroRequest != null) { + $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; + } + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + + } + } + private function validarTramitaEmAndamento($parametros, $strMensagem) { if (strpos($strMensagem, 'já possui trâmite em andamento')) { @@ -898,30 +805,27 @@ private function validarTramitaEmAndamento($parametros, $strMensagem) public function listarPendencias($bolTodasPendencias) { - $arrObjPendenciaDTO = array(); + $endpoint = 'tramites/pendentes'; + $arrObjPendenciaDTO = []; try { - $parametros = new stdClass(); - $parametros->filtroDePendencias = new stdClass(); - $parametros->filtroDePendencias->todasAsPendencias = $bolTodasPendencias; - $result = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->listarPendencias($parametros); - }); - - if(isset($result->listaDePendencias->IDT)){ - if(!is_array($result->listaDePendencias->IDT)) { - $result->listaDePendencias->IDT = array($result->listaDePendencias->IDT); + $parametros = [ + 'todas' => $bolTodasPendencias + ]; + + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $idt) { + $pendenciaDTO = new PendenciaDTO(); + $pendenciaDTO->setNumIdentificacaoTramite($idt['IDT']); + $pendenciaDTO->setStrStatus($idt['status']); + $arrObjPendenciaDTO[] = $pendenciaDTO; + } } - foreach ($result->listaDePendencias->IDT as $idt) { - $item = new PendenciaDTO(); - $item->setNumIdentificacaoTramite($idt->_); - $item->setStrStatus($idt->status); - $arrObjPendenciaDTO[] = $item; - } - } - } catch (\Exception $e) { - $mensagem = "Falha na listagem de pendências de trâmite de processos"; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); } @@ -929,170 +833,253 @@ public function listarPendencias($bolTodasPendencias) return $arrObjPendenciaDTO; } - private function tratarFalhaWebService(Exception $fault) + private function tratarFalhaWebService(Exception $fault) { - $mensagem = InfraException::inspecionar($fault); - if($fault instanceof SoapFault && isset($fault->detail->interoperabilidadeException)) { - $strWsException = $fault->detail->interoperabilidadeException; - $mensagem = mb_convert_encoding($strWsException->mensagem, 'ISO-8859-1', 'UTF-8'); - // Fixação de mensagem de erro para quando já existe um trâmite em andamento - if($strWsException->codigoErro == "0044"){ - $mensagem = 'Processo já possui um trâmite em andamento.'; - } + $mensagem = InfraException::inspecionar($fault); + + if ($fault instanceof RequestException && $fault->hasResponse()) { + + $codigoErro = $fault->getResponse()->getStatusCode(); + $mensagemDoErro = $fault->getResponse()->getReasonPhrase(); + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + + // Fixação de mensagem de erro para quando já existe um trâmite em andamento + if ($codigoErro == "0044") { + $mensagem = 'Processo já possui um trâmite em andamento.'; + } + } + + return $mensagem; } - return $mensagem; - } public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $idUnidadeOrigem, $idRepositorioDestino, - $idUnidadeDestino, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false, $dblIdProcedimento = null) + $idUnidadeDestino, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false, $dblIdProcedimento = null) { - $cabecalho = new stdClass(); - if(isset($strNumeroRegistro)) { - $cabecalho->NRE = $strNumeroRegistro; - } + $cabecalho = [ + "remetente" => [ + "identificacaoDoRepositorioDeEstruturas" => $idRepositorioOrigem, + "numeroDeIdentificacaoDaEstrutura" => $idUnidadeOrigem, + ], + "destinatario" => [ + "identificacaoDoRepositorioDeEstruturas" => $idRepositorioDestino, + "numeroDeIdentificacaoDaEstrutura" => $idUnidadeDestino, + ], + "enviarApenasComponentesDigitaisPendentes" => !$enviarTodosDocumentos + ]; + + if (isset($urgente) && !empty($urgente)) { + $cabecalho['urgencia'] = $urgente; + } + + if (isset($motivoUrgencia) && !empty($motivoUrgencia)) { + $cabecalho['motivoDaUrgencia'] = $urgente; + } + + if (isset($strNumeroRegistro) && !empty($strNumeroRegistro)) { + $cabecalho['NRE'] = $strNumeroRegistro; + } - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $idRepositorioOrigem; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $idUnidadeOrigem; - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $idRepositorioDestino; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura = $idUnidadeDestino; + $atribuirInformacoes = $this->atribuirInformacoesAssuntoREST($cabecalho, $dblIdProcedimento); + $atribuirInfoModulo = $this->atribuirInformacoesModuloREST($cabecalho); - $cabecalho->urgente = $urgente; - $cabecalho->motivoDaUrgencia = $motivoUrgencia; - //Parâmetro abaixo foi descontinuado por falhas e substituido pelo enviarApenasComponentesDigitaisPendentes - $cabecalho->enviarApenasComponentesDigitaisPendentes = !$enviarTodosDocumentos; + if (!empty($atribuirInformacoes)) { + $cabecalho = $atribuirInformacoes; + } - $this->atribuirInformacoesAssunto($cabecalho, $dblIdProcedimento); - $this->atribuirInformacoesModulo($cabecalho); + if (!empty($atribuirInfoModulo)) { + $cabecalho = $atribuirInfoModulo; + } return $cabecalho; } - private function atribuirInformacoesModulo($objCabecalho) + private function atribuirInformacoesModuloREST($objCabecalho) { - try{ + $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); + $objCabecalho['propriedadesAdicionais'][] = [ + 'chave' => 'MODULO_PEN_VERSAO', + 'valor' => $objInfraParametro->getValor('VERSAO_MODULO_PEN') + ]; - $objInfraParametro = new InfraParametro($this->inicializarObjInfraIBanco()); - $arrPropAdicionais=$objCabecalho->propriedadeAdicional; - $arrPropAdicionais[] = new SoapVar("". $objInfraParametro->getValor('VERSAO_MODULO_PEN') . "", XSD_ANYXML); - - $objCabecalho->propriedadeAdicional= $arrPropAdicionais; + return $objCabecalho; }catch(Exception $e){ throw new InfraException($mensagem, $e); } - - } - private function atribuirInformacoesAssunto($objCabecalho, $dblIdProcedimento) - { + private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcedimento) + { try{ + if(!isset($dblIdProcedimento)){ + throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); + } - if(!isset($dblIdProcedimento)){ - throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); - } - - $objRelProtocoloAssuntoDTO = new RelProtocoloAssuntoDTO(); - $objRelProtocoloAssuntoDTO->setDblIdProtocolo($dblIdProcedimento); - $objRelProtocoloAssuntoDTO->retStrDescricaoAssunto(); - $objRelProtocoloAssuntoDTO->retNumIdAssunto(); - $objRelProtocoloAssuntoDTO->setOrdNumSequencia(InfraDTO::$TIPO_ORDENACAO_ASC); + $objRelProtocoloAssuntoDTO = new RelProtocoloAssuntoDTO(); + $objRelProtocoloAssuntoDTO->setDblIdProtocolo($dblIdProcedimento); + $objRelProtocoloAssuntoDTO->retStrDescricaoAssunto(); + $objRelProtocoloAssuntoDTO->retNumIdAssunto(); + $objRelProtocoloAssuntoDTO->setOrdNumSequencia(InfraDTO::$TIPO_ORDENACAO_ASC); - $objRelProtocoloAssuntoRN = new RelProtocoloAssuntoRN(); - $arrobjRelProtocoloAssuntoDTO = $objRelProtocoloAssuntoRN->listarRN0188($objRelProtocoloAssuntoDTO); + $objRelProtocoloAssuntoRN = new RelProtocoloAssuntoRN(); + $arrobjRelProtocoloAssuntoDTO = $objRelProtocoloAssuntoRN->listarRN0188($objRelProtocoloAssuntoDTO); - $arrDadosAssunto = array(); - $contagem=1; - $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $arrDadosAssunto = array(); + $contagem=1; + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); - foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { + foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { - $idAssunto = $objRelProtocoloAssuntoDTO->getNumIdAssunto(); - $assuntoDTO = new AssuntoDTO(); - $assuntoDTO->setNumIdAssunto($idAssunto); - $assuntoDTO->retNumPrazoCorrente(); - $assuntoDTO->retNumPrazoIntermediario(); - $assuntoDTO->retStrStaDestinacao(); - $assuntoDTO->retStrObservacao(); - $assuntoDTO->retStrCodigoEstruturado(); + $idAssunto = $objRelProtocoloAssuntoDTO->getNumIdAssunto(); + $assuntoDTO = new AssuntoDTO(); + $assuntoDTO->setNumIdAssunto($idAssunto); + $assuntoDTO->retNumPrazoCorrente(); + $assuntoDTO->retNumPrazoIntermediario(); + $assuntoDTO->retStrStaDestinacao(); + $assuntoDTO->retStrObservacao(); + $assuntoDTO->retStrCodigoEstruturado(); - $objAssuntoRN = new AssuntoRN(); - $infoAssunto = $objAssuntoRN->consultarRN0256($assuntoDTO); + $objAssuntoRN = new AssuntoRN(); + $infoAssunto = $objAssuntoRN->consultarRN0256($assuntoDTO); switch ($infoAssunto->getStrStaDestinacao()) { - case AssuntoRN::$TD_ELIMINACAO: + case AssuntoRN::$TD_ELIMINACAO: $destinacao = "Eliminação"; - break; + break; + + case AssuntoRN::$TD_GUARDA_PERMANENTE: + $destinacao = "Guarda Permanente"; + break; + } + + $valorInput = $objRelProtocoloAssuntoDTO->getStrDescricaoAssunto() ? + utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($objRelProtocoloAssuntoDTO->getStrDescricaoAssunto(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + : "NA"; - case AssuntoRN::$TD_GUARDA_PERMANENTE: - $destinacao = "Guarda Permanente"; - break; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_Descricao_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getStrCodigoEstruturado() ? + utf8_encode($infoAssunto->getStrCodigoEstruturado()) + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_CodigoEstruturado_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getNumPrazoCorrente() ? + (int) $infoAssunto->getNumPrazoCorrente() + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_PrazoCorrente_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getNumPrazoIntermediario() ? + (int) $infoAssunto->getNumPrazoIntermediario() + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_PrazoIntermediario_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $destinacao ? + utf8_encode($destinacao) + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_Destinacao_' . $contagem, + 'valor' => $valorInput + ]; + + $valorInput = $infoAssunto->getStrObservacao() ? + utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + : "NA"; + $arrDadosAssunto[] = [ + 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, + 'valor' => $valorInput + ]; + + $contagem++; } + $objCabecalho['propriedadesAdicionais'][] = $arrDadosAssunto; + return $objCabecalho; - $valorInput=$objRelProtocoloAssuntoDTO->getStrDescricaoAssunto()?mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($objRelProtocoloAssuntoDTO->getStrDescricaoAssunto(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000), 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + }catch(Exception $e){ + $mensagem = "Falha ao atribuir informações de assunto"; + throw new InfraException($mensagem, $e); + } - $valorInput=$infoAssunto->getStrCodigoEstruturado()?mb_convert_encoding($infoAssunto->getStrCodigoEstruturado(), 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + } - $valorInput=$infoAssunto->getNumPrazoCorrente()? (int) $infoAssunto->getNumPrazoCorrente() :"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + public function enviarComponenteDigital($parametros) + { + try { - $valorInput=$infoAssunto->getNumPrazoIntermediario()?(int) $infoAssunto->getNumPrazoIntermediario():"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + $objParametros = $parametros->dadosDoComponenteDigital; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; - $valorInput=$destinacao?mb_convert_encoding($destinacao, 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + $protocolo = $objParametros->protocolo; + $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; + $conteudo = $objParametros->conteudoDoComponenteDigital; - $valorInput=$infoAssunto->getStrObservacao()?mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000), 'UTF-8', 'ISO-8859-1'):"NA"; - $arrDadosAssunto[] = new SoapVar("" . $valorInput . "", XSD_ANYXML); + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; - $contagem++; - } + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - $objCabecalho->propriedadeAdicional= $arrDadosAssunto; + $strBaseUri = $this->strEnderecoWebService; - }catch(Exception $e){ + $arrheaders = [ + 'Accept' => '*/*', + ]; - throw new InfraException($mensagem, $e); - } + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'headers' => $arrheaders, + 'timeout' => 5.0, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); - } + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); - public function enviarComponenteDigital($parametros) - { - try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use (&$parametros) { - return $objPenWs->enviarComponenteDigital($parametros); - }); - } catch (\Exception $e) { - $mensagem = "Falha no envio de componentes digitais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + } catch (\Exception $e) { + $mensagem = "Falha no envio de componentes digitais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } } - } - /** * Método responsável por realizar o envio da parte de um componente digital @@ -1100,17 +1087,68 @@ public function enviarComponenteDigital($parametros) * @return mixed * @throws InfraException */ - public function enviarParteDeComponenteDigital($parametros) - { - try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use (&$parametros) { - return $objPenWs->enviarParteDeComponenteDigital($parametros); - }); - } catch (\Exception $e) { - $mensagem = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e); + public function enviarParteDeComponenteDigital($parametros) + { + try { + + $objParametros = $parametros->dadosDaParteDeComponenteDigital; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; + + $protocolo = $objParametros->protocolo; + $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; + + $indetificacaoDaParte = $objParametros->identificacaoDaParte; + $parte = $indetificacaoDaParte->inicio . '-' . $indetificacaoDaParte->fim; + + $conteudo = $objParametros->conteudoDaParteDeComponenteDigital; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; + + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); + + $strBaseUri = $this->strEnderecoWebService; + + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'headers' => $arrheaders, + 'timeout' => 5.0, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); + + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'arquivo_externo.html', + // 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); + } catch (\Exception $e) { + $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); + $mensagem = "Falha de envio do componente digital. Erro: {$erroResposta->codigoErro} - {$erroResposta->mensagem}"; + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } } - } /** * Método responsável por sinalizar o término do envio das partes de um componente digital @@ -1119,11 +1157,20 @@ public function enviarParteDeComponenteDigital($parametros) * @throws InfraException */ public function sinalizarTerminoDeEnvioDasPartesDoComponente($parametros) - { + { try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->sinalizarTerminoDeEnvioDasPartesDoComponente($parametros); - }); + $objParametros = $parametros->dadosDoTerminoDeEnvioDePartes; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; + + $arrIdentificacaoDoComponenteDigital = [ + 'hashDoComponenteDigital' => $objParametros->hashDoComponenteDigital, + 'protocolo' => $objParametros->protocolo, + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/sinalizacao-termino-envio"; + + return $this->post($endpoint, $arrIdentificacaoDoComponenteDigital); + } catch (\Exception $e) { $mensagem = "Falha em sinalizar o término de envio das partes do componente digital"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -1131,16 +1178,36 @@ public function sinalizarTerminoDeEnvioDasPartesDoComponente($parametros) } } + public function solicitarMetadados($parNumIdentificacaoTramite) { + $endpoint = "tramites/{$parNumIdentificacaoTramite}"; try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdentificacaoTramite; - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - $objMetadadosProtocolo = $objPenWs->solicitarMetadados($parametros); - $objMetadadosProtocolo->IDT = $parametros->IDT; - return $objMetadadosProtocolo; - }); + $parametros = [ + 'IDT' => $parNumIdentificacaoTramite + ]; + + $arrResultado = $this->get($endpoint, $parametros); + $arrResultado['propriedadeAdicional'] = $arrResultado['propriedadesAdicionais']; + + $arrResultadoDocumentos = $arrResultado['processo']['documentos'][0]; + $arrResultado['processo']['documentos'][0]['componenteDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]; + $arrResultado['processo']['documentos'][0]['componenteDigital']['assinaturaDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]['assinaturasDigitais'][0]; + + $objResultado = new stdClass(); + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); + + $objMetaProcesso = $objResultado->metadados->processo; + $arrObjMetaDocumento = (array) $objMetaProcesso->documentos; + $arrObjMetaInteressado = (array) $objMetaProcesso->interessados; + + $objResultado->IDT = $parNumIdentificacaoTramite; + $objResultado->metadados->NRE = $objResultado->metadados->nre; + $objResultado->metadados->processo->documento = $arrObjMetaDocumento[0]; + $objResultado->metadados->processo->interessado = $arrObjMetaInteressado; + + return $objResultado; + } catch (\Exception $e) { $mensagem = "Falha na solicitação de metadados do processo"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -1189,7 +1256,7 @@ public static function obterIdTarefaModulo($strIdTarefaModulo) public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrStaTipoTramite, $parDthRegistroTramite, $parNumIdRepositorioOrigem, $parNumIdEstruturaOrigem, $parNumIdRepositorioDestino, $parNumIdEstruturaDestino, $parObjProtocolo, $parNumTicketComponentesDigitais = null, $parObjComponentesDigitaisSolicitados = null, $bolSinProcessamentoEmBloco = false, $numIdUnidade = null) { - + // $parObjProtocolo if(!isset($parDblIdProcedimento) || $parDblIdProcedimento == 0) { throw new InfraException('Parâmetro $parDblIdProcedimento não informado.'); } @@ -1226,6 +1293,10 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR throw new InfraException('Parâmetro $objProcesso não informado.'); } + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } + //Monta dados do processo eletrônico $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); $objProcessoEletronicoDTO->setStrNumeroRegistro($parStrNumeroRegistro); @@ -1233,20 +1304,20 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR $objProcessoEletronicoDTO->setStrStaTipoProtocolo($parObjProtocolo->staTipoProtocolo); //Montar dados dos procedimentos apensados - if(isset($parObjProtocolo->processoApensado)){ - if(!is_array($parObjProtocolo->processoApensado)){ - $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); - } + if (isset($parObjProtocolo->processoApensado)) { + if (!is_array($parObjProtocolo->processoApensado)) { + $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); + } $arrObjRelProcessoEletronicoApensadoDTO = array(); $objRelProcessoEletronicoApensadoDTO = null; - foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { - $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); - $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); - $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado->idProcedimentoSEI); - $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado->protocolo); - $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; - } + foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { + $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); + $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); + $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado['idProcedimentoSEI']); + $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado['protocolo']); + $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; + } $objProcessoEletronicoDTO->setArrObjRelProcessoEletronicoApensado($arrObjRelProcessoEletronicoApensadoDTO); } @@ -1385,7 +1456,7 @@ public static function getHashFromMetaDados($objMeta) $strHashConteudo = $objMeta; } else { $matches = array(); - $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta->_; + $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta['conteudo']; if (preg_match('/^(.*)<\/hash>$/', $strHashConteudo, $matches, PREG_OFFSET_CAPTURE)) { $strHashConteudo = $matches[1][0]; @@ -1396,6 +1467,19 @@ public static function getHashFromMetaDados($objMeta) return $strHashConteudo; } + public static function getHashFromMetaDadosREST($objMeta) + { + $strHashConteudo = ''; + if (isset($objMeta)) { + if(is_string($objMeta)){ + $strHashConteudo = $objMeta; + } else { + $strHashConteudo = (isset($objMeta['conteudo'])) ? $objMeta['conteudo'] : $objMetaconteudo; + } + } + return $strHashConteudo; + } + private function montarDadosMaisDeUmComponenteDigital($objDocumento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjComponentesDigitaisSolicitados) { $arrayComponentesDigitais = $objDocumento->componenteDigital; @@ -1465,7 +1549,7 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden $arrObjComponenteDigitalDTOAux = array(); foreach ($arrObjDocumento as $objDocumento) { - $quantidadeDeComponentesDigitais = count($objDocumento->componenteDigital); + $quantidadeDeComponentesDigitais = count($objDocumento->componentesDigitais); if($quantidadeDeComponentesDigitais > 1){ $arrObjComponenteDigitalDTOAux = self::montarDadosMaisDeUmComponenteDigital($objDocumento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjComponentesDigitaisSolicitados); }else{ @@ -1490,16 +1574,17 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden } //Por enquanto, considera que o documento possui apenas um componente digital - if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { + if(is_array($objDocumento->componentesDigitais) && count($objDocumento->componentesDigitais) != 1) { throw new InfraException("Erro processando componentes digitais do processo " . $parObjProtocolo->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); } - $objComponenteDigital = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital[0] : $objDocumento->componenteDigital; - $objComponenteDigitalDTO->setStrNome(mb_convert_encoding($objComponenteDigital->nome, 'ISO-8859-1', 'UTF-8')); + $arrComponenteDigital = is_array($objDocumento->componentesDigitais) ? $objDocumento->componentesDigitais[0] : $objDocumento->componentesDigitais; + $objComponenteDigital = (object) $arrComponenteDigital; + $objComponenteDigitalDTO->setStrNome(utf8_decode($objComponenteDigital->nome)); if(isset($objDocumento->especie)){ - $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie->codigo)); - $objComponenteDigitalDTO->setStrNomeEspecieProdutor(mb_convert_encoding($objDocumento->especie->nomeNoProdutor, 'ISO-8859-1', 'UTF-8')); + $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie['codigo'])); + $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie['nomeNoProdutor'])); } $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); @@ -1507,16 +1592,16 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO); $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo); $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType); - $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); + $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); //Registrar componente digital necessita ser enviado pelo trâmite específico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui if(isset($parObjComponentesDigitaisSolicitados)){ - $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); + $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados) ? $parObjComponentesDigitaisSolicitados : array($parObjComponentesDigitaisSolicitados); foreach ($arrObjItensSolicitados as $objItemSolicitado) { if(!is_null($objItemSolicitado)){ - $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); + $objItemSolicitado['hashes'] = is_array($objItemSolicitado['hashes']) ? $objItemSolicitado['hashes'] : array($objItemSolicitado['hashes']); - if($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { + if($objItemSolicitado['protocolo'] == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado['hashes']) && !$objDocumento->retirado) { $objComponenteDigitalDTO->setStrSinEnviar("S"); } } @@ -1526,7 +1611,10 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); + if (isset($objComponenteDigital->idAnexo)) { $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); + } + $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; } $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTOAux, $arrObjComponenteDigitalDTO); @@ -1542,10 +1630,43 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden return $arrObjComponenteDigitalDTO; } - public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) + + + public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) + { + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais"; + try { + $identificacaoDoComponenteDigital = [ + 'hashDoComponenteDigital' => $parStrHashComponenteDigital, + 'protocolo' => $parStrProtocolo, + ]; + + // Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital + if (!is_null($parObjParteComponente)) { + $parte = $parObjParteComponente->inicio . '-' . $parObjParteComponente->fim; + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais/partes/{$parte}"; + } + + $strComponenteDigitalBase64 = $this->post($endpoint, $identificacaoDoComponenteDigital); + + $objResultado = new stdClass(); + $objResultado->conteudoDoComponenteDigital = new stdClass(); + $objResultado->conteudoDoComponenteDigital = base64_decode($strComponenteDigitalBase64); + + return $objResultado; + + } catch (\Exception $e) { + $mensagem = "Falha no recebimento do componente digital"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + } + + public function receberComponenteDigitalS($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) { try - { + { + $parametros = new stdClass(); $parametros->parametrosParaRecebimentoDeComponenteDigital = new stdClass(); $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital = new stdClass(); @@ -1569,45 +1690,52 @@ public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHas } } + public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) { + $endpoint = 'tramites'; try { $arrObjTramite = array(); - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeTramites = new stdClass(); - $parametros->filtroDeConsultaDeTramites->IDT = $parNumIdTramite; + $parametros = [ + 'IDT' => $parNumIdTramite + ]; - if(!is_null($parNumeroRegistro)){ - $parametros->filtroDeConsultaDeTramites->NRE = $parNumeroRegistro; - } + if(!is_null($parNumeroRegistro)){ + $parametros['NRE'] = $parNumeroRegistro; + } - if(!is_null($parNumeroUnidadeRemetente) && !is_null($parNumeroRepositorioEstruturas)){ - $parametros->filtroDeConsultaDeTramites->remetente = new stdClass(); - $parametros->filtroDeConsultaDeTramites->remetente->identificacaoDoRepositorioDeEstruturas = $parNumeroRepositorioEstruturas; - $parametros->filtroDeConsultaDeTramites->remetente->numeroDeIdentificacaoDaEstrutura = $parNumeroUnidadeRemetente; - } + if(!is_null($parNumeroUnidadeRemetente) && !is_null($parNumeroRepositorioEstruturas)){ + $parametros['remetente']['identificacaoDoRepositorioDeEstruturas'] = $parNumeroRepositorioEstruturas; + $parametros['remetente']['numeroDeIdentificacaoDaEstrutura'] = $parNumeroUnidadeRemetente; + } - if(!is_null($parNumeroUnidadeDestino) && !is_null($parNumeroRepositorioEstruturas)){ - $parametros->filtroDeConsultaDeTramites->destinatario = new stdClass(); - $parametros->filtroDeConsultaDeTramites->destinatario->identificacaoDoRepositorioDeEstruturas = $parNumeroRepositorioEstruturas; - $parametros->filtroDeConsultaDeTramites->destinatario->numeroDeIdentificacaoDaEstrutura = $parNumeroUnidadeDestino; - } + if(!is_null($parNumeroUnidadeDestino) && !is_null($parNumeroRepositorioEstruturas)){ + $parametros['destinatario']['identificacaoDoRepositorioDeEstruturas'] = $parNumeroRepositorioEstruturas; + $parametros['destinatario']['numeroDeIdentificacaoDaEstrutura'] = $parNumeroUnidadeDestino; + } - if(!is_null($parProtocolo)){ - $parametros->filtroDeConsultaDeTramites->protocolo = $parProtocolo; - } + if (!is_null($parProtocolo)) { + $parametros['protocolo'] = $parProtocolo; + } - $objTramitesEncontrados = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarTramites($parametros); - }); + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado['tramites']) && !empty($arrResultado['tramites'][0])) { + + $historico = []; + foreach ($arrResultado['tramites'][0]['mudancasDeSituacao'] as $mudancaDeSituacao) { + $historico['operacao'][] = $mudancaDeSituacao; + } + + $arrResultado['tramites'][0] = array_filter($arrResultado['tramites'][0], function($value) { + return !is_null($value); + }); + + $arrObjTramite[] = $this->converterArrayParaObjeto($arrResultado['tramites'][0]); + $arrObjTramite[0]->historico = (object) $historico; - if(isset($objTramitesEncontrados->tramitesEncontrados) && isset($objTramitesEncontrados->tramitesEncontrados->tramite)) { - $arrObjTramite = $objTramitesEncontrados->tramitesEncontrados->tramite; - if(!is_array($arrObjTramite)) { - $arrObjTramite = array($objTramitesEncontrados->tramitesEncontrados->tramite); } - } return $arrObjTramite; @@ -1620,24 +1748,18 @@ public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = public function consultarTramitesProtocolo($parProtocoloFormatado) { + $arrObjTramite = array(); try { - $arrObjTramite = array(); - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeTramites = new stdClass(); - $parametros->filtroDeConsultaDeTramites->protocolo = $parProtocoloFormatado; - - $objTramitesEncontrados = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarTramites($parametros); - }); + $parametros = [ + 'protocolo' => $parProtocoloFormatado + ]; - if(isset($objTramitesEncontrados->tramitesEncontrados)) { + $arrResultado = $this->consultarTramites(null, null, null, null, $parametros['protocolo']); - $arrObjTramite = $objTramitesEncontrados->tramitesEncontrados->tramite; - if(!is_array($arrObjTramite)) { - $arrObjTramite = array($objTramitesEncontrados->tramitesEncontrados->tramite); + if (isset($arrResultado)) { + $arrObjTramite = $arrResultado; } - } return $arrObjTramite; } catch (\Exception $e) { @@ -1649,14 +1771,16 @@ public function consultarTramitesProtocolo($parProtocoloFormatado) public function cienciaRecusa($parNumIdTramite) { + $endpoint = "tramites/{$parNumIdTramite}/ciencia"; try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdTramite; - //return $this->getObjPenWs()->cienciaRecusa($parametro); - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->cienciaRecusa($parametros); - }); + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $arrResultado = $this->get($endpoint, $parametros); + return $arrResultado; + } catch (\Exception $e) { $mensagem = "Falha no registro de ciência da recusa de trâmite"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -1664,7 +1788,7 @@ public function cienciaRecusa($parNumIdTramite) } } - /** + /** * Retorna o estado atual do procedimento no api-pen * * @param integer $dblIdProcedimento @@ -1674,61 +1798,50 @@ public function cienciaRecusa($parNumIdTramite) */ public function consultarEstadoProcedimento($strProtocoloFormatado = '', $numIdRepositorio = null, $numIdEstrutura = null) { - $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); + $objBD = new GenericoBD($this->inicializarObjInfraIBanco()); - $objProtocoloDTO = new ProtocoloDTO(); - $objProtocoloDTO->setStrProtocoloFormatado($strProtocoloFormatado); - $objProtocoloDTO->setNumMaxRegistrosRetorno(1); - $objProtocoloDTO->retDblIdProtocolo(); - $objProtocoloDTO->retStrProtocoloFormatado(); - $objProtocoloDTO->retStrStaEstado(); + $objProtocoloDTO = new ProtocoloDTO(); + $objProtocoloDTO->setStrProtocoloFormatado($strProtocoloFormatado); + $objProtocoloDTO->setNumMaxRegistrosRetorno(1); + $objProtocoloDTO->retDblIdProtocolo(); + $objProtocoloDTO->retStrProtocoloFormatado(); + $objProtocoloDTO->retStrStaEstado(); - $objProtocoloDTO = $objBD->consultar($objProtocoloDTO); + $objProtocoloDTO = $objBD->consultar($objProtocoloDTO); if (empty($objProtocoloDTO)) { throw new InfraException(mb_convert_encoding(sprintf('Nenhum procedimento foi encontrado com o id %s', $strProtocoloFormatado), 'UTF-8', 'ISO-8859-1')); } if ($objProtocoloDTO->getStrStaEstado() != ProtocoloRn::$TE_PROCEDIMENTO_BLOQUEADO) { - throw new InfraException(mb_convert_encoding('O processo não esta com o estado com "Em Processamento" ou "Bloqueado"', 'UTF-8', 'ISO-8859-1')); + throw new InfraException(mb_convert_encoding('O processo não esta com o estado com "Em Processamento" ou "Bloqueado"', 'UTF-8', 'ISO-8859-1')); } - $objTramiteDTO = new TramiteDTO(); - $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->retDblIdProtocolo()); - $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); - $objTramiteDTO->setNumMaxRegistrosRetorno(1); - $objTramiteDTO->retNumIdTramite(); + $objTramiteDTO = new TramiteDTO(); + $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->getDblIdProtocolo()); + $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); + $objTramiteDTO->setNumMaxRegistrosRetorno(1); + $objTramiteDTO->retNumIdTramite(); - $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); - $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); + $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); if(!$arrObjTramiteDTO){ throw new InfraException('Trâmite não encontrado'); } - $objTramiteDTO = $arrObjTramiteDTO[0]; - - $objFiltro = new stdClass(); - $objFiltro->filtroDeConsultaDeTramites = new stdClass(); - $objFiltro->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); - - $objResultado = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($objFiltro) { - return $objPenWs->consultarTramites($objFiltro); - }); + $objTramiteDTO = $arrObjTramiteDTO[0]; - $objTramitesEncontrados = $objResultado->tramitesEncontrados; + $arrResultado = $this->consultarTramites($objTramiteDTO->getNumIdTramite()); - if (empty($objTramitesEncontrados) || !isset($objTramitesEncontrados->tramite)) { - throw new InfraException(mb_convert_encoding(sprintf('Nenhum tramite foi encontrado para o procedimento %s', $strProtocoloFormatado), 'UTF-8', 'ISO-8859-1')); + if (empty($arrResultado) || !isset($arrResultado)) { + throw new InfraException(mb_convert_encoding(sprintf('Nenhum tramite foi encontrado para o procedimento %s', $strProtocoloFormatado), 'UTF-8', 'ISO-8859-1')); } - if(!is_array($objTramitesEncontrados->tramite)){ - $objTramitesEncontrados->tramite = array($objTramitesEncontrados->tramite); - } - $arrObjTramite = (array) $objTramitesEncontrados->tramite; + $arrObjTramite = (array) $arrResultado; + $objTramite = array_pop($arrObjTramite); - $objTramite = array_pop($arrObjTramite); if (empty($numIdRepositorio)) { $objPenParametroRN = new PenParametroRN(); @@ -1787,6 +1900,7 @@ public function consultarEstadoProcedimento($strProtocoloFormatado = '', $numIdR public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $parStrReciboTramite) { + $endpoint = "tramites/{$parNumIdTramite}/recibo"; try { $strHashAssinatura = null; @@ -1799,15 +1913,12 @@ public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $par openssl_sign($parStrReciboTramite, $strHashAssinatura, $objPrivatekey, 'sha256'); $strHashDaAssinaturaBase64 = base64_encode($strHashAssinatura); - $parametros = new stdClass(); - $parametros->dadosDoReciboDeTramite = new stdClass(); - $parametros->dadosDoReciboDeTramite->IDT = $parNumIdTramite; - $parametros->dadosDoReciboDeTramite->dataDeRecebimento = $parDthRecebimento; - $parametros->dadosDoReciboDeTramite->hashDaAssinatura = $strHashDaAssinaturaBase64; + $envioDeReciboDeTramite = [ + 'dataDeRecebimento' => $parDthRecebimento, + 'hashDaAssinatura' => $strHashDaAssinaturaBase64, + ]; - $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->enviarReciboDeTramite($parametros); - }); + $this->post($endpoint, $envioDeReciboDeTramite); return $strHashDaAssinaturaBase64; @@ -1824,12 +1935,16 @@ public function enviarReciboDeTramite($parNumIdTramite, $parDthRecebimento, $par public function receberReciboDeTramite($parNumIdTramite) { - try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdTramite; - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->receberReciboDeTramite($parametros); - }); + $endpoint = "tramites/{$parNumIdTramite}/recibo"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $arrResultado = $this->get($endpoint, $parametros); + $arrResultado['recibo']['hashDoComponenteDigital'] = $arrResultado['recibo']['hashesDosComponentesDigitais'][0]; + + return $this->converterArrayParaObjeto($arrResultado); } catch (\Exception $e) { $mensagem = "Falha no recebimento de recibo de trâmite. ". $this->tratarFalhaWebService($e); @@ -1846,14 +1961,16 @@ public function receberReciboDeTramite($parNumIdTramite) */ public function receberReciboDeEnvio($parNumIdTramite) { - try { - $parametros = new stdClass(); - $parametros->IDT = $parNumIdTramite; - $resultado = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->receberReciboDeEnvio($parametros); - }); + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; - return $resultado->conteudoDoReciboDeEnvio; + $arrResultado = $this->get($endpoint, $parametros); + $arrResultado['reciboDeEnvio']['hashDoComponenteDigital'] = $arrResultado['reciboDeEnvio']['hashesDosComponentesDigitais'][0]; + + return $this->converterArrayParaObjeto($arrResultado); } catch (\Exception $e) { $mensagem = "Falha no recebimento de recibo de trâmite de envio. " . $this->tratarFalhaWebService($e); @@ -1977,17 +2094,18 @@ public function obterIdTarefaSEIMapeado($strCodigoOperacao) * @throws Exception|InfraException * @return null */ + public function cancelarTramite($idTramite) { - $parametros = new stdClass(); - $parametros->IDT = $idTramite; - + $endpoint = "tramites/{$idTramite}"; try{ - $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->cancelarEnvioDeTramite($parametros); - }); - } - catch(\Exception $e) { + $parametros = [ + 'IDT' => $idTramite + ]; + + $this->delete($endpoint, $parametros); + + } catch(\Exception $e) { $mensagem = "Falha no cancelamento de trâmite de processo"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); @@ -2006,16 +2124,15 @@ public function cancelarTramite($idTramite) public function recusarTramite($idTramite, $justificativa, $motivo) { try { + $endpoint = "tramites/{$idTramite}/recusa"; $objProcessoEletronicoRN = new ProcessoEletronicoRN(); - $parametros = new stdClass(); - $parametros->recusaDeTramite = new stdClass(); - $parametros->recusaDeTramite->IDT = $idTramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'); - $parametros->recusaDeTramite->motivo = $motivo; + + $parametros = [ + 'justificativa' => utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000)), + 'motivo' => $motivo + ]; - $resultado = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->recusarTramite($parametros); - }); + $this->post($endpoint, $parametros); } catch (Exception $e) { $mensagem = "Falha na recusa de trâmite de processo"; @@ -2040,98 +2157,101 @@ public function cadastrarTramitePendente($numIdentificacaoTramite, $idAtividadeE } public function isDisponivelCancelarTramite($strProtocolo = '') - { - //Obtem o id_rh que representa a unidade no barramento - $objPenParametroRN = new PenParametroRN(); - $numIdRespositorio = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); + { + //Obtem o id_rh que representa a unidade no barramento + $objPenParametroRN = new PenParametroRN(); + $numIdRespositorio = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); - //Obtem os dados da unidade - $objPenUnidadeDTO = new PenUnidadeDTO(); - $objPenUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); - $objPenUnidadeDTO->retNumIdUnidadeRH(); + //Obtem os dados da unidade + $objPenUnidadeDTO = new PenUnidadeDTO(); + $objPenUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); + $objPenUnidadeDTO->retNumIdUnidadeRH(); - $objGenericoBD = new GenericoBD($this->inicializarObjInfraIBanco()); - $objPenUnidadeDTO = $objGenericoBD->consultar($objPenUnidadeDTO); + $objGenericoBD = new GenericoBD($this->inicializarObjInfraIBanco()); + $objPenUnidadeDTO = $objGenericoBD->consultar($objPenUnidadeDTO); - //Obtem os dados do último trâmite desse processo no barramento - $objProtocoloDTO = new ProtocoloDTO(); - $objProtocoloDTO->setStrProtocoloFormatado($strProtocolo); - $objProtocoloDTO->retDblIdProtocolo(); + //Obtem os dados do último trâmite desse processo no barramento + $objProtocoloDTO = new ProtocoloDTO(); + $objProtocoloDTO->setStrProtocoloFormatado($strProtocolo); + $objProtocoloDTO->retDblIdProtocolo(); - $objProtocoloRN = new ProtocoloRN(); - $objProtocoloDTO = $objProtocoloRN->consultarRN0186($objProtocoloDTO); + $objProtocoloRN = new ProtocoloRN(); + $objProtocoloDTO = $objProtocoloRN->consultarRN0186($objProtocoloDTO); - $objTramiteDTO = new TramiteDTO(); - $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->retDblIdProtocolo()); - $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); - $objTramiteDTO->setNumMaxRegistrosRetorno(1); - $objTramiteDTO->retNumIdTramite(); + $objTramiteDTO = new TramiteDTO(); + $objTramiteDTO->setNumIdProcedimento($objProtocoloDTO->retDblIdProtocolo()); + $objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC); + $objTramiteDTO->setNumMaxRegistrosRetorno(1); + $objTramiteDTO->retNumIdTramite(); - $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); - $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); + $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); - if(!$arrObjTramiteDTO){ - return false; - } + if(!$arrObjTramiteDTO){ + return false; + } - $objTramiteDTO = $arrObjTramiteDTO[0]; + $objTramiteDTO = $arrObjTramiteDTO[0]; - try { - $parametros = new stdClass(); - $parametros->filtroDeConsultaDeTramites = new stdClass(); - $parametros->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); - $parametros->filtroDeConsultaDeTramites->remetente = new stdClass(); - $parametros->filtroDeConsultaDeTramites->remetente->identificacaoDoRepositorioDeEstruturas = $numIdRespositorio; - $parametros->filtroDeConsultaDeTramites->remetente->numeroDeIdentificacaoDaEstrutura = $objPenUnidadeDTO->getNumIdUnidadeRH(); - - $objMeta = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarTramites($parametros); - }); + try { + $parametros = new stdClass(); + $parametros->filtroDeConsultaDeTramites = new stdClass(); + $parametros->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); + $parametros->filtroDeConsultaDeTramites->remetente = new stdClass(); + $parametros->filtroDeConsultaDeTramites->remetente->identificacaoDoRepositorioDeEstruturas = $numIdRespositorio; + $parametros->filtroDeConsultaDeTramites->remetente->numeroDeIdentificacaoDaEstrutura = $objPenUnidadeDTO->getNumIdUnidadeRH(); + + $objMeta = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { + return $objPenWs->consultarTramites($parametros); + }); - if($objMeta->tramitesEncontrados) { - $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; - $objMetaTramite = $arrObjMetaTramite[0]; + if($objMeta->tramitesEncontrados) { + $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; + $objMetaTramite = $arrObjMetaTramite[0]; - $strSituacoesDisponíveisCancelamento = array( - static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, - static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO - ); + $strSituacoesDisponíveisCancelamento = array( + static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, + static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO + ); - if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ - return true; - } + if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ + return true; } - - return false; - } - catch(SoapFault $e) { - return false; - } - catch(Exception $e) { - return false; } + + return false; } + catch(SoapFault $e) { + return false; + } + catch(Exception $e) { + return false; + } +} - public function consultarHipotesesLegais($ativos = true) { - try{ - $parametros = new stdClass(); - $parametros->filtroDeHipotesesLegais = new stdClass(); - $parametros->filtroDeHipotesesLegais->ativos = $ativos; + public function consultarHipotesesLegais($ativos = true) + { + $endpoint = "hipoteses"; - $hipoteses = $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->consultarHipotesesLegais($parametros); - }); + $parametros = [ + 'ativos' => $ativos + ]; - if (empty($hipoteses)) { - return []; - } - return $hipoteses; + try { + $arrResultado = $this->get($endpoint, $parametros); + return $arrResultado; - } catch(Exception $e){ - $mensagem = "Falha na obtenção de hipóteses legais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + if (empty($hipoteses)) { + return []; + } + + return $hipoteses; + + } catch(Exception $e){ + $mensagem = "Falha na obtenção de hipóteses legais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } } protected function contarConectado(ProcessoEletronicoDTO $objProcessoEletronicoDTO) @@ -2197,17 +2317,19 @@ public static function comparacaoOrdemComponenteDigitais($parComponenteDigital1, public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrairAnexados = false) { $arrObjDocumento = array(); - if(isset($parObjProtocolo->documento)){ - $arrObjProtocolo = is_array($parObjProtocolo->documento) ? $parObjProtocolo->documento : array($parObjProtocolo->documento); + if(isset($parObjProtocolo->documentos)){ + $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : json_decode(json_encode($parObjProtocolo->documentos), true); usort($arrObjProtocolo, array("ProcessoEletronicoRN", "comparacaoOrdemAjustadaDocumentos")); //Tratamento recursivo para processos anexados foreach ($arrObjProtocolo as $objProtocolo) { + $objProtocolo = (object) $objProtocolo; $bolEhProcessoAnexado = $objProtocolo->staTipoProtocolo == ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO; if($parBolExtrairAnexados && $bolEhProcessoAnexado){ $arrProtocolosAnexados = ProcessoEletronicoRN::obterDocumentosProtocolo($objProtocolo, $parBolExtrairAnexados); $arrObjDocumento = array_merge($arrObjDocumento, $arrProtocolosAnexados); } else { + if(!$bolEhProcessoAnexado){ $objProtocolo->idProcedimentoSEI = $parObjProtocolo->idProcedimentoSEI; } @@ -2220,7 +2342,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair //Quando se tratar de um Documento Avulso, a ordem será sempre 1 $parObjProtocolo->ordem = 1; $parObjProtocolo->ordemAjustada = 1; - $parObjProtocolo->componenteDigital = self::obterComponentesDocumentos($parObjProtocolo); + $parObjProtocolo->componentesDigitais = self::obterComponentesDocumentos($parObjProtocolo); return array($parObjProtocolo); } @@ -2230,27 +2352,33 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; - foreach ($arrObjDocumentoPadronizados as $objDocumento) { - $objDocumento->componenteDigital = self::obterComponentesDocumentos($objDocumento); + foreach ($arrObjDocumentoPadronizados as $documento) { + if (is_array($documento) && $documento['componentesDigitais']) { + $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); + } else { + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + } } return $arrObjDocumentoPadronizados; } - public static function obterComponentesDocumentos($parObjDocumento) - { - $arrObjComponenteDigital=array(); - if(isset($parObjDocumento->componenteDigital)){ - - $arrObjComponenteDigital = is_array($parObjDocumento->componenteDigital) ? $parObjDocumento->componenteDigital : array($parObjDocumento->componenteDigital); - usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } - - - return $arrObjComponenteDigital; + public static function obterComponentesDocumentos($parObjDocumento) + { + + if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { + return $parObjDocumento['componentesDigitais']; + } + + $arrObjComponenteDigital = array(); + if (isset($parObjDocumento->componentesDigitais)) { + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); + usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); + } - } + return $arrObjComponenteDigital; + } /** * Retorna a referência para o processo ou documento avulso @@ -2305,9 +2433,9 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) public static function obterComponentesDigitaisDocumento($parObjDocumento) { $arrObjComponenteDigital = array(); - if(isset($parObjDocumento->componenteDigital)){ - $arrObjComponenteDigital = is_array($parObjDocumento->componenteDigital) ? $parObjDocumento->componenteDigital : array($parObjDocumento->componenteDigital); - } + if (isset($parObjDocumento['componentesDigitais'])) { + $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); + } return $arrObjComponenteDigital; } @@ -2326,17 +2454,21 @@ public static function obterComponentesDigitaisDocumento($parObjDocumento) */ public static function desmembrarProcessosAnexados($parObjProtocolo) { + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } + if(!ProcessoEletronicoRN::existeProcessoAnexado($parObjProtocolo)){ - return $parObjProtocolo; + return $parObjProtocolo; } - $arrObjRefProcessosAnexados = array(); - $objProcessoPrincipal = clone $parObjProtocolo; - $objProcessoPrincipal->documento = array(); - $arrObjDocumentosOrdenados = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); - usort($arrObjDocumentosOrdenados, array("ProcessoEletronicoRN", "comparacaoOrdemDocumentos")); + $arrObjRefProcessosAnexados = array(); + $objProcessoPrincipal = clone $parObjProtocolo; + $objProcessoPrincipal->documento = array(); + $arrObjDocumentosOrdenados = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); + usort($arrObjDocumentosOrdenados, array("ProcessoEletronicoRN", "comparacaoOrdemDocumentos")); - // Agrupamento dos documentos por processo + // Agrupamento dos documentos por processo foreach ($arrObjDocumentosOrdenados as $objDocumento) { $bolDocumentoAnexado = ProcessoEletronicoRN::documentoFoiAnexado($parObjProtocolo, $objDocumento); $strProtocoloProcAnexado = ($bolDocumentoAnexado) ? $objDocumento->protocoloDoProcessoAnexado : $objProcessoPrincipal->protocolo; @@ -2359,7 +2491,7 @@ public static function desmembrarProcessosAnexados($parObjProtocolo) $objProcessoDoDocumento->documento[] = $objDocumentoReposicionado; } - return $objProcessoPrincipal; + return $objProcessoPrincipal; } /** @@ -2419,7 +2551,7 @@ private static function documentoFoiAnexado($parObjProtocolo, $parObjDocumento) return ( isset($parObjDocumento->protocoloDoProcessoAnexado) && !empty($parObjDocumento->protocoloDoProcessoAnexado) && - $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado + $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado ); } @@ -2590,4 +2722,87 @@ public function listarAssociacoesDocumentos($idProcedimento) } return $arrIdDocumentos; } -} + + /** + * Converter arrays associativo para objetos + */ + public static function converterArrayParaObjeto($array) + { + if (is_array($array)) { + $object = new stdClass(); + foreach ($array as $key => $value) { + $object->$key = self::converterArrayParaObjeto($value); + } + return $object; + } + + return $array; + } + + /** + * Consulta as estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura O ID do repositório de estruturas. + * @param array $parametros Parâmetros adicionais para a consulta. + * @throws InfraException Falha na obtenção de unidades externas. + * @return array + */ + public function consultarEstruturas($idRepositorioEstrutura, $parametros = []) + { + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais"; + try { + $arrResultado = $this->get($endpoint, $parametros); + return $arrResultado; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + } + + /** + * Iniciar requisição HTTP utilizado para comunicação Webservice REST + * + */ + private function getArrPenWsRest($method, $endpoint, $options = []) + { + try { + $arrResultado = $this->strClientGuzzle->request($method, $endpoint, $options); + $base64 = $arrResultado->getBody()->getContents(); + + $foo = json_decode($arrResultado->getBody(), true); + if ($foo != null) { + return $foo; + } + + return $base64; + } catch (RequestException $e) { + $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); + + // Lança uma nova exceção com os detalhes do RequestException + throw new Exception(json_encode([ + 'error' => true, + 'codigoErro' => $erroResposta->codigoErro, + 'message' => $erroResposta->mensagem, + 'exception' => $e->getMessage(), + 'details' => $e->hasResponse() ? (string) $e->getResponse()->getBody() : 'No response body' + ])); + } + } + + private function get($endpoint, $params = []) { + return $this->getArrPenWsRest('GET', $endpoint, ['query' => $params]); + } + + private function post($endpoint, $data = []) { + return $this->getArrPenWsRest('POST', $endpoint, ['json' => $data]); + } + + private function put($endpoint, $data = []) { + return $this->getArrPenWsRest('PUT', $endpoint, ['json' => $data]); + } + + private function delete($endpoint, $params = []) { + return $this->getArrPenWsRest('DELETE', $endpoint, ['query' => $params]); + } +} \ No newline at end of file From 279bb27bb3acb652f0041daa150965248d2301a1 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 14 Nov 2024 08:34:38 -0300 Subject: [PATCH 07/25] =?UTF-8?q?refactor:=20m=C3=A9todos=20de=20integra?= =?UTF-8?q?=C3=A7=C3=A3o=20para=20recebimento=20de=20arquivos=20e=20gera?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20recibos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/EnviarReciboTramiteRN.php | 4 +- src/rn/ReceberComponenteDigitalRN.php | 129 +++++++++++++------------- src/rn/ReceberProcedimentoRN.php | 114 ++++++++++++----------- src/rn/ReceberReciboTramiteRN.php | 4 +- 4 files changed, 127 insertions(+), 124 deletions(-) diff --git a/src/rn/EnviarReciboTramiteRN.php b/src/rn/EnviarReciboTramiteRN.php index 29a8efcd4..1e927ca56 100755 --- a/src/rn/EnviarReciboTramiteRN.php +++ b/src/rn/EnviarReciboTramiteRN.php @@ -157,8 +157,8 @@ private function obterDataRecebimentoComponentesDigitais($parObjTramite){ } foreach ($parObjTramite->historico->operacao as $operacao) { - if($operacao->situacao == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { - return ProcessoEletronicoRN::converterDataSEI($operacao->dataHora); + if($operacao['situacao'] == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { + return ProcessoEletronicoRN::converterDataSEI($operacao['dataHora']); } } diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index def90b2c0..0089a9105 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -150,62 +150,62 @@ protected function compactarAnexosDoDocumento($parNumIdDocumento, $parArrAnexoDT $contDocumentosDto = 0; $arrayRetornoObjAnexoDTO = array(); - foreach ($arrObjDocumentoDTO as $objDocumentoDTO){ - $contDocumentosDto++; - $objAnexoRN = new AnexoRN(); - - $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); - $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); - $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; - - $zipFile= new ZipArchive(); - $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); - - $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); - $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; - $numSequencial = 0; - foreach($arrIdDocumentos as $dblIdDocumento){ - $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; - $strDocumento = ''; - if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ - $arrayAnexosExcluirFisicamente = array(); - foreach ($parArrAnexoDTO as $objAnexoDTO){ - $numSequencial++; - - if ($objAnexoDTO==null){ - $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); - }else{ - /** - * Aqui será atribuído um nome aos anexos - */ - $ext = explode('.', $objAnexoDTO->getStrNome()); - /** - * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. - */ - $ext = strtolower($ext[count($ext)-1]); - $strNomeArquivo = $objAnexoDTO->getStrNome(); - - /** - * Aqui, o anexo será adicionado ao zip - */ - $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; - //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - throw new InfraException('Erro adicionando arquivo externo ao zip.'); - } - else{ - /** - * Aqui quer dizer que o arquivo já foi colocado dentro do zip. - * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. - */ - array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); - } - } - } - }else{ - $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); - } - } + foreach ($arrObjDocumentoDTO as $objDocumentoDTO) { + $contDocumentosDto++; + $objAnexoRN = new AnexoRN(); + + $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); + $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); + $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; + + $zipFile= new ZipArchive(); + $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); + + $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); + $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; + $numSequencial = 0; + foreach($arrIdDocumentos as $dblIdDocumento){ + $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; + $strDocumento = ''; + if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ + $arrayAnexosExcluirFisicamente = array(); + foreach ($parArrAnexoDTO as $objAnexoDTO){ + $numSequencial++; + + if ($objAnexoDTO==null){ + $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); + }else{ + /** + * Aqui será atribuído um nome aos anexos + */ + $ext = explode('.', $objAnexoDTO->getStrNome()); + /** + * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. + */ + $ext = strtolower($ext[count($ext)-1]); + $strNomeArquivo = $objAnexoDTO->getStrNome(); + + /** + * Aqui, o anexo será adicionado ao zip + */ + $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; + //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + throw new InfraException('Erro adicionando arquivo externo ao zip.'); + } + else{ + /** + * Aqui quer dizer que o arquivo já foi colocado dentro do zip. + * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. + */ + array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); + } + } + } + }else{ + $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); + } + } $objInfraException->lancarValidacoes(); if ($zipFile->close() === false) { throw new InfraException('Não foi possível fechar arquivo zip.'); @@ -243,6 +243,7 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, $objComponenteDigitalDTO->setStrNumeroRegistro($parObjComponenteDigitalDTO->getStrNumeroRegistro()); $objComponenteDigitalDTO->setDblIdDocumento($parObjComponenteDigitalDTO->getDblIdDocumento()); $objComponenteDigitalDTO->setDblIdProcedimento($parObjComponenteDigitalDTO->getDblIdProcedimento()); + //$objComponenteDigitalDTO->setNumOrdem($parObjComponenteDigitalDTO->getNumOrdem()); $objComponenteDigitalDTO->setNumIdAnexo($parObjAnexoDTO->getNumIdAnexo()); $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); $objComponenteDigitalDTO = $objComponenteDigitalBD->alterar($objComponenteDigitalDTO); @@ -253,11 +254,11 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, * @return AnexoDTO * */ - public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, $parObjConteudo) - { - if(!isset($parObjComponenteDigital)){ - throw new InfraException("Componente Digital não informado"); - } + public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $parObjConteudo) + { + if (!isset($parArrComponenteDigital)) { + throw new InfraException("Componente Digital não informado"); + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; @@ -272,12 +273,12 @@ public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, $objAnexoDTO->setDthInclusao(InfraData::getStrDataHoraAtual()); $objAnexoDTO->setNumTamanho(filesize(DIR_SEI_TEMP.'/'.$strNomeArquivoUpload)); $objAnexoDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); - $objAnexoDTO->setStrNome($parObjComponenteDigital->nome); + $objAnexoDTO->setStrNome($parArrComponenteDigital['nome']); return $objAnexoDTO; } public function validarIntegridadeDoComponenteDigital(AnexoDTO $objAnexoDTO, $strHashConteudo, $parNumIdentificacaoTramite, $parNumOrdemComponente) - { + { $strHashInformado = $strHashConteudo; $strHashInformado = base64_decode($strHashInformado); @@ -373,4 +374,4 @@ public function cadastrarAnexoDoDocumento(AnexoDTO $parObjAnexoDTO) $objDocumentoRN->alterarRN0004($objDocumentoDTO); } -} +} \ No newline at end of file diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index effb562f4..0e5a0692f 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -645,14 +645,14 @@ private function listarHashDosComponentesMetadado($parObjProtocolo) $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach($arrObjDocumento as $objDocumento){ //Desconsidera os componendes digitais de documentos cancelados - if(!isset($objDocumento->retirado) || $objDocumento->retirado == false) { - if(!isset($objDocumento->componenteDigital)){ - throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento->ordem} não informado."); + if(!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { + if(!isset($objDocumento['componentesDigitais'])){ + throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento['ordem']} não informado."); } - $arrObjComponentesDigitais = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital : array($objDocumento->componenteDigital); + $arrObjComponentesDigitais = is_array($objDocumento['componentesDigitais']) ? $objDocumento['componentesDigitais'] : array($objDocumento['componentesDigitais']); foreach ($arrObjComponentesDigitais as $objComponenteDigital) { - $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); + $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital['hash']); } } } @@ -720,23 +720,23 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac $objPenRelTipoDocMapEnviadoDTO = new PenRelTipoDocMapRecebidoDTO(); $objPenRelTipoDocMapEnviadoDTO->retTodos(); - $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument->especie->codigo); + $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument['especie']['codigo']); - $objProcessoEletronicoDB = new PenRelTipoDocMapRecebidoBD($this->getObjInfraIBanco()); + $objProcessoEletronicoDB = new PenRelTipoDocMapRecebidoBD(BancoSEI::getInstance()); $numContador = (int)$objProcessoEletronicoDB->contar($objPenRelTipoDocMapEnviadoDTO); // Não achou, ou seja, não esta cadastrado na tabela, então não é aceito nesta unidade como válido if($numContador <= 0) { - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', mb_convert_encoding($objDocument->especie->nomeNoProdutor, 'ISO-8859-1', 'UTF-8')), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); - throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument->especie->nomeNoProdutor, ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument['especie']['nomeNoProdutor'])), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); + throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument['especie']['nomeNoProdutor'], ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); } } } //Não valida informações do componente digital caso o documento esteja cancelado foreach ($arrObjDocumentos as $objDocumento) { - if (!isset($objDocumento->retirado) || $objDocumento->retirado === false) { - foreach ($objDocumento->componenteDigital as $objComponenteDigital) { + if (!isset($objDocument['retirado']) || $objDocumento['retirado'] === false) { + foreach ($objDocumento['componentesDigitais'] as $objComponenteDigital) { $this->validaTamanhoComponenteDigital($objComponenteDigital); } } @@ -745,7 +745,7 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac private function validaTamanhoComponenteDigital($objComponenteDigital) { - if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ + if (is_null($objComponenteDigital['tamanhoEmBytes']) || $objComponenteDigital['tamanhoEmBytes'] == 0){ throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); } } @@ -945,11 +945,11 @@ private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProce } catch (Exception $e){ $this->gravarLogDebug("Processo $parDblIdProcedimento não pode ser desbloqueado", 2); } - + $numUnidadeReceptora = ModPenUtilsRN::obterUnidadeRecebimento(); $this->enviarProcedimentoUnidade($objProcedimentoDTO, $numUnidadeReceptora); - } finally { + } finally { $numUnidadeReceptora = ModPenUtilsRN::obterUnidadeRecebimento(); SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora); } @@ -1665,7 +1665,12 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $count = count($arrObjDocumentos); $this->gravarLogDebug("Quantidade de documentos para recebimento: $count", 2); - foreach($arrObjDocumentos as $objDocumento){ + foreach($arrObjDocumentos as $objDocumento) { + + if (is_array($objDocumento)) { + $objDocumento = (object) $objDocumento; + } + if(!isset($objDocumento->staTipoProtocolo) || $bolDocumentoAvulso) { // Definição da ordem do documento para avaliação do posicionamento @@ -1709,7 +1714,7 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objSerieDTO = $this->obterSerieMapeada($objDocumento); if ($objSerieDTO==null){ - throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie->codigo.'] não encontrado.'); + throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie['codigo'].'] não encontrado.'); } if (InfraString::isBolVazia($objDocumento->dataHoraDeProducao)) { @@ -2274,7 +2279,7 @@ private function obterUnidadeMapeada($numIdentificacaoDaEstrutura) private function obterSerieMapeada($documento) { $bolPossuiDocumentoReferenciado = isset($documento->ordemDoDocumentoReferenciado); - $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie->codigo) : self::NUM_ESPECIE_PEN_ANEXO; + $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie['codigo']) : self::NUM_ESPECIE_PEN_ANEXO; return $this->objPenRelTipoDocMapRecebidoRN->obterSerieMapeada($numCodigoEspecie); } @@ -2518,15 +2523,12 @@ public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProtoco $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); foreach($arrDocumentos as $objDocumento){ - if(!isset($objDocumento->retirado) || $objDocumento->retirado == false){ - $arrComponentesDigitais = $objDocumento->componenteDigital; - if(isset($arrComponentesDigitais) && !is_array($arrComponentesDigitais)){ - $arrComponentesDigitais = array($arrComponentesDigitais); - } + if (!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { + $arrComponentesDigitais = $objDocumento['componentesDigitais']; foreach ($arrComponentesDigitais as $componenteDigital) { //Busca o nome do documento - $nomeDocumento = $componenteDigital->nome; + $nomeDocumento = $componenteDigital['nome']; //Busca pela extensão do documento $arrNomeDocumento = explode('.', $nomeDocumento); @@ -2633,23 +2635,23 @@ private function documentosPendenteRegistro($parNumIdProcedimento, $parNumIdDocu * @param $parComponentePendente * @return $tamanhoComponentePendende */ - private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) - { - //Obtém os documentos do protocolo em um array - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - - //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente - foreach ($arrObjDocumentos as $objDocumento){ - $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); - foreach ($arrObjComponentesDigitais as $objComponentesDigital){ - if(ProcessoEletronicoRN::getHashFromMetaDados($objComponentesDigital->hash) == $parComponentePendente){ - $tamanhoComponentePendende = $objComponentesDigital->tamanhoEmBytes; - break; - } - } - } - return $tamanhoComponentePendende; - } + private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) + { + //Obtém os documentos do protocolo em um array + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + + //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente + foreach ($arrObjDocumentos as $objDocumento) { + $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); + foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { + if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { + $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; + break; + } + } + } + return $tamanhoComponentePendende; + } /** @@ -2712,21 +2714,21 @@ private function receberComponenenteDigitalParticionado($componentePendente, $nr } - private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) - { - $resultado = array(); - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - foreach($arrObjDocumentos as $objDocumento){ - if(isset($objDocumento->componenteDigital) && !is_array($objDocumento->componenteDigital)){ - $objDocumento->componenteDigital = array($objDocumento->componenteDigital); - } - foreach($objDocumento->componenteDigital as $objComponente){ - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente->hash); - $resultado[$strHash] = $objComponente; - } - } - return $resultado; - } + private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) + { + $resultado = array(); + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + foreach ($arrObjDocumentos as $arrDocumento) { + if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ + $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); + } + foreach ($arrDocumento['componentesDigitais'] as $objComponente) { + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); + $resultado[$strHash] = $objComponente; + } + } + return $resultado; + } /** @@ -2950,4 +2952,4 @@ private function atribuirTipoProcedimentoRelacinado($numIdTipoProcedimento, $num $objAtividadeRN = new AtividadeRN(); $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); } -} +} \ No newline at end of file diff --git a/src/rn/ReceberReciboTramiteRN.php b/src/rn/ReceberReciboTramiteRN.php index 2d12b8d9d..242fc1a04 100755 --- a/src/rn/ReceberReciboTramiteRN.php +++ b/src/rn/ReceberReciboTramiteRN.php @@ -37,7 +37,7 @@ public function receberReciboDeTramite($parNumIdTramite) throw new InfraException("Não foi possível obter recibo de conclusão do trâmite '$parNumIdTramite'"); } - $objReciboTramite = $objReciboTramite->conteudoDoReciboDeTramite; + // $objReciboTramite = $objReciboTramite->conteudoDoReciboDeTramite; // Inicialização do recebimento do processo, abrindo nova transação e controle de concorrência, // evitando processamento simultâneo de cadastramento do mesmo processo @@ -227,7 +227,7 @@ private function registrarRecebimentoRecibo($numIdProcedimento, $strProtocoloFor if (isset($objEstrutura->hierarquia)) { - $arrObjNivel = $objEstrutura->hierarquia->nivel; + $arrObjNivel = $objEstrutura->hierarquia; $nome = ""; $siglasUnidades = array(); From 0ecaa4384165ac914df82f6dc95ba05f49ed2f41 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 21 Nov 2024 08:15:08 -0300 Subject: [PATCH 08/25] =?UTF-8?q?fix:=20mudar=20estrutura=20para=20se=20ad?= =?UTF-8?q?aptar=20a=20mudan=C3=A7a=20na=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pen_map_unidade_cadastrar.php | 6 +- src/rn/ProcessoEletronicoRN.php | 139 ++++++++++++++++++++++-------- src/rn/ReceberProcedimentoRN.php | 12 ++- src/rn/ReceberReciboTramiteRN.php | 1 - 4 files changed, 114 insertions(+), 44 deletions(-) diff --git a/src/pen_map_unidade_cadastrar.php b/src/pen_map_unidade_cadastrar.php index d76163131..f129f6ec8 100755 --- a/src/pen_map_unidade_cadastrar.php +++ b/src/pen_map_unidade_cadastrar.php @@ -104,10 +104,10 @@ $objInfraException->lancarValidacao('A unidade ' . $mapIdUnidade[$objResultado[0]->getNumIdUnidade()] .' do sistema já está mapeada com a unidade '.$_POST['txtUnidadePen'].' do Portal de Administração.'); } // CARREGAR NOME E SIGLA DA ESTRUTURA $objProcessoEletronico = new ProcessoEletronicoRN(); - $objProcessoEletronicoDTO = $objProcessoEletronico->listarEstruturas($numIdRepositorioOrigem, $_POST['id_unidade_rh']); + $objProcessoEletronicoDTO = $objProcessoEletronico->buscarEstrutura($numIdRepositorioOrigem, $_POST['id_unidade_rh']); - $nomeUnidadeRH = $objProcessoEletronicoDTO[0]->getStrNome(); - $siglaUnidadeRH = $objProcessoEletronicoDTO[0]->getStrSigla(); + $nomeUnidadeRH = $objProcessoEletronicoDTO->getStrNome(); + $siglaUnidadeRH = $objProcessoEletronicoDTO->getStrSigla(); $objPenUnidadeDTO = new PenUnidadeDTO(); $objPenUnidadeDTO->setNumIdUnidade($_POST['id_unidade']); $objPenUnidadeDTO->setNumIdUnidadeRH($_POST['id_unidade_rh']); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 6f90bac27..4c5d4a538 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -402,6 +402,71 @@ public function listarEstruturas( return $arrObjEstruturaDTO; } + + /** + * Lista estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura ID do repositório de estruturas. + * @param string $nome + * @param int $numeroDeIdentificacaoDaEstruturaRaizDaConsulta + * @param string $nomeUnidade + * @param string $siglaUnidade + * @param int $offset Offset + * @param int $registrosPorPagina + * @param bool $parBolPermiteRecebimento + * @param bool $parBolPermiteEnvio + * @throws InfraException + * @return EstruturaDTO + */ + public function buscarEstrutura( + $idRepositorioEstrutura, + $nome = '', + $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, + $nomeUnidade = null, + $siglaUnidade = null, + $offset = null, + $registrosPorPagina = null, + $parBolPermiteRecebimento = null, + $parBolPermiteEnvio = null +) { + $arrObjEstruturaDTO = []; +try { + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + if (!$idRepositorioEstrutura) { + throw new InfraException('Repositório de Estruturas inválido'); + } + + $rh = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome; + + $estrutura = $this->buscarEstruturaRest($idRepositorioEstrutura, $rh); + + if ($estrutura !== null) { + + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + + $arrHerarquia = array_map(function ($nivel) { + return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); + }, $estrutura['hierarquia'] ?: []); + + $objEstruturaDTO->setArrHierarquia($arrHerarquia); + + return $objEstruturaDTO; + } + + return null; +} catch (Exception $e) { + throw new InfraException("Falha na obtenção de unidades externas"); +} + + return $arrObjEstruturaDTO; +} + /** * Verifica se o repositório de estruturas possui limitação de repositórios/unidades mapeadas * @@ -1662,35 +1727,6 @@ public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHas } } - public function receberComponenteDigitalS($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) - { - try - { - - $parametros = new stdClass(); - $parametros->parametrosParaRecebimentoDeComponenteDigital = new stdClass(); - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital = new stdClass(); - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->IDT = $parNumIdentificacaoTramite; - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->protocolo = $parStrProtocolo; - $parametros->parametrosParaRecebimentoDeComponenteDigital->identificacaoDoComponenteDigital->hashDoComponenteDigital = $parStrHashComponenteDigital; - - //Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital - if(!is_null($parObjParteComponente)){ - $parametros->parametrosParaRecebimentoDeComponenteDigital->parte = $parObjParteComponente; - } - - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->receberComponenteDigital($parametros); - }); - } catch (\SoapFault $fault) { - $mensagem = $this->tratarFalhaWebService($fault); - throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault); - } catch (\Exception $e) { - throw new InfraException("Error Processing Request", $e); - } - } - - public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) { $endpoint = 'tramites'; @@ -2478,17 +2514,17 @@ public static function desmembrarProcessosAnexados($parObjProtocolo) // existe apenas o número do protocolo de referência if($bolDocumentoAnexado && !array_key_exists($strProtocoloProcAnexado, $arrObjRefProcessosAnexados)){ $objProcessoAnexado = clone $objProcessoPrincipal; - $objProcessoAnexado->documento = array(); + $objProcessoAnexado->documentos = array(); $objProcessoAnexado->protocolo = $strProtocoloProcAnexado; - $objProcessoAnexado->ordemAjustada = count($objProcessoPrincipal->documento) + 1; - $objProcessoPrincipal->documento[] = $objProcessoAnexado; + $objProcessoAnexado->ordemAjustada = count($objProcessoPrincipal->documentos) + 1; + $objProcessoPrincipal->documentos[] = $objProcessoAnexado; $arrObjRefProcessosAnexados[$strProtocoloProcAnexado] = $objProcessoAnexado; } $objProcessoDoDocumento = ($bolDocumentoAnexado) ? $arrObjRefProcessosAnexados[$strProtocoloProcAnexado] : $objProcessoPrincipal; $objDocumentoReposicionado = clone $objDocumento; - $objDocumentoReposicionado->ordemAjustada = count($objProcessoDoDocumento->documento) + 1; - $objProcessoDoDocumento->documento[] = $objDocumentoReposicionado; + $objDocumentoReposicionado->ordemAjustada = count($objProcessoDoDocumento->documentos) + 1; + $objProcessoDoDocumento->documentos[] = $objDocumentoReposicionado; } return $objProcessoPrincipal; @@ -2548,11 +2584,16 @@ public static function obterTamanhoBlocoTransferencia(){ */ private static function documentoFoiAnexado($parObjProtocolo, $parObjDocumento) { + return ( - isset($parObjDocumento->protocoloDoProcessoAnexado) && - !empty($parObjDocumento->protocoloDoProcessoAnexado) && - $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado - ); + isset($parObjDocumento->protocoloDoProcessoAnexado) && + !empty($parObjDocumento->protocoloDoProcessoAnexado) && + ( + is_array($parObjProtocolo) + ? $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado + : (is_object($parObjProtocolo) && $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado) + ) + ); } /** @@ -2760,6 +2801,28 @@ public function consultarEstruturas($idRepositorioEstrutura, $parametros = []) } } + /** + * Consulta as estruturas de um repositório de estruturas. + * + * @param int $idRepositorioEstrutura O ID do repositório de estruturas. + * @param array $parametros Parâmetros adicionais para a consulta. + * @throws InfraException Falha na obtenção de unidades externas. + * @return array + */ + public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) + { + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/{$idUnidadeRH}"; + try { + $arrResultado = $this->get($endpoint); + return $arrResultado; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + LogSEI::getInstance()->gravar($detalhes, InfraLog::$ERRO); + throw new InfraException($mensagem, $e, $mensagem); + } + } + /** * Iniciar requisição HTTP utilizado para comunicação Webservice REST * diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 0e5a0692f..200a2715f 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -1842,10 +1842,17 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objDocumentoDTO->getObjProtocoloDTO()->setNumIdUnidadeGeradora(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objDocumentoDTO->setStrSinBloqueado('N'); + + if (isset($objDocumento->componenteDigital)) { + $componentesDigitais = $objDocumento->componenteDigital; + } else { + $componentesDigitais[] = $objDocumento->componentesDigitais; + } + //TODO: Fazer a atribuição dos componentes digitais do processo a partir desse ponto $this->atribuirComponentesDigitais( $objDocumentoDTO, - $objDocumento->componenteDigital, + $componentesDigitais, $arrDocumentosExistentesPorHash, $parObjMetadadosProcedimento->arrHashComponenteBaixados); @@ -1921,6 +1928,7 @@ private function atribuirComponentesJaExistentesNoProcesso($objDocumentoDTO, $ob $arrObjAnexosDTO = array(); $arrObjAnexoDTO = array(); foreach ($objComponentesDigitais as $objComponenteDigital) { + $strHashComponenteDigital = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); $bolComponenteDigitalBaixado = in_array($strHashComponenteDigital, $arrHashComponenteBaixados); $bolComponenteDigitalExistente = array_key_exists($strHashComponenteDigital, $arrDocumentosExistentesPorHash); @@ -2061,7 +2069,7 @@ private function atribuirComponentesDigitais(DocumentoDTO $objDocumentoDTO, $par // Atribui componentes digitais já presentes no processo e não reenviados pelo Tramita.gov.br $arrAnexo = array(); $arrAnexo = $this->atribuirComponentesJaExistentesNoProcesso( - $parObjDocumentoDTO, + $objDocumentoDTO, $parArrObjComponentesDigitais, $arrDocumentosExistentesPorHash, $arrHashComponenteBaixados diff --git a/src/rn/ReceberReciboTramiteRN.php b/src/rn/ReceberReciboTramiteRN.php index 242fc1a04..a1faae3c5 100755 --- a/src/rn/ReceberReciboTramiteRN.php +++ b/src/rn/ReceberReciboTramiteRN.php @@ -37,7 +37,6 @@ public function receberReciboDeTramite($parNumIdTramite) throw new InfraException("Não foi possível obter recibo de conclusão do trâmite '$parNumIdTramite'"); } - // $objReciboTramite = $objReciboTramite->conteudoDoReciboDeTramite; // Inicialização do recebimento do processo, abrindo nova transação e controle de concorrência, // evitando processamento simultâneo de cadastramento do mesmo processo From 8697578cd46a208da86d2488ec9ec7a92a6e75f5 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 21 Nov 2024 11:17:17 -0300 Subject: [PATCH 09/25] =?UTF-8?q?chore:=20corre=C3=A7=C3=B5es=20phpcs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ExpedirProcedimentoRN.php | 30 +- src/rn/ProcessoEletronicoRN.php | 696 +++++++++++++------------- src/rn/ReceberComponenteDigitalRN.php | 122 ++--- src/rn/ReceberProcedimentoRN.php | 70 +-- 4 files changed, 459 insertions(+), 459 deletions(-) diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index a870858e6..c949b6e83 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -245,14 +245,14 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe try { $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Envio do metadados do processo', 'S')); - if($bolSinProcessamentoEmBloco){ - $this->gravarLogDebug(sprintf('Envio do metadados do processo %s', $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado()), 2); - $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO); - $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); - $idAtividadeExpedicao = $numIdAtividade; - }else{ + if($bolSinProcessamentoEmBloco){ + $this->gravarLogDebug(sprintf('Envio do metadados do processo %s', $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado()), 2); + $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO); + $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); + $idAtividadeExpedicao = $numIdAtividade; + }else{ $idAtividadeExpedicao = $this->bloquearProcedimentoExpedicao($objExpedirProcedimentoDTO, $arrProcesso['idProcedimentoSEI']); - } + } $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso( $arrProcesso['idProcedimentoSEI'], @@ -292,14 +292,14 @@ protected function expedirProcedimentoControlado(ExpedirProcedimentoDTO $objExpe //TODO: Alterar atualizao para somente apresentar ao final de todo o trâmite //$this->barraProgresso->mover(ProcessoEletronicoINT::NEE_EXPEDICAO_ETAPA_CONCLUSAO); - if(!$bolSinProcessamentoEmBloco){ - $this->barraProgresso->mover($this->barraProgresso->getNumMax()); - $this->barraProgresso->setStrRotulo(ProcessoEletronicoINT::TEE_EXPEDICAO_ETAPA_CONCLUSAO); - }else{ - $this->gravarLogDebug('Concluído envio dos componentes do processo', 2); - $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE); - $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); - } + if(!$bolSinProcessamentoEmBloco){ + $this->barraProgresso->mover($this->barraProgresso->getNumMax()); + $this->barraProgresso->setStrRotulo(ProcessoEletronicoINT::TEE_EXPEDICAO_ETAPA_CONCLUSAO); + }else{ + $this->gravarLogDebug('Concluído envio dos componentes do processo', 2); + $objPenBlocoProcessoDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE); + $objPenBlocoProcessoRN->alterar($objPenBlocoProcessoDTO); + } $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Concluído envio dos componentes do processo', 'S')); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 4c5d4a538..0db9f0fbf 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -180,67 +180,67 @@ private function getObjPenWs() * * @param int $numIdentificacaoDoRepositorioDeEstruturas Código de identificação do repositório de estruturas do PEN */ - public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) - { - $objRepositorioDTO = null; - $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; - try { - $parametros = [ - 'ativo' => true - ]; - $arrResultado = $this->get($endpoint, $parametros); - - if (isset($arrResultado)) { - foreach ($arrResultado as $repositorio) { - $objRepositorioDTO = new RepositorioDTO(); - $objRepositorioDTO->setNumId($repositorio['id']); - $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); - $objRepositorioDTO->setBolAtivo($repositorio['ativo']); - } - } - } catch (Exception $e) { - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $objRepositorioDTO; - } + public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) + { + $objRepositorioDTO = null; + $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; + try { + $parametros = [ + 'ativo' => true + ]; + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + } + } + } catch (Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $objRepositorioDTO; + } /** * Lista todo os repositórios de estruturas disponíveis no Barramento de Serviços do PEN * * @return void */ - public function listarRepositoriosDeEstruturas() - { - $arrObjRepositorioDTO = []; - $endpoint = 'repositorios-de-estruturas'; - - try { - $parametros = [ - 'ativos' => true - ]; - - $arrResultado = $this->get($endpoint, $parametros); - - if (isset($arrResultado)) { - foreach ($arrResultado as $repositorio) { - $objRepositorioDTO = new RepositorioDTO(); - $objRepositorioDTO->setNumId($repositorio['id']); - $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); - $objRepositorioDTO->setBolAtivo($repositorio['ativo']); - $arrObjRepositorioDTO[] = $objRepositorioDTO; - } - } - } catch(Exception $e) { - $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - - return $arrObjRepositorioDTO; - } + public function listarRepositoriosDeEstruturas() + { + $arrObjRepositorioDTO = []; + $endpoint = 'repositorios-de-estruturas'; + + try { + $parametros = [ + 'ativos' => true + ]; + + $arrResultado = $this->get($endpoint, $parametros); + + if (isset($arrResultado)) { + foreach ($arrResultado as $repositorio) { + $objRepositorioDTO = new RepositorioDTO(); + $objRepositorioDTO->setNumId($repositorio['id']); + $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); + $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + $arrObjRepositorioDTO[] = $objRepositorioDTO; + } + } + } catch(Exception $e) { + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); + } + + return $arrObjRepositorioDTO; + } /** * Método responsável por consultar as estruturas das unidades externas no barramento. * @@ -295,7 +295,7 @@ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificac * @return array * @throws InfraException */ - public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) + public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null, $bolRetornoRaw = false) { try { $estruturasUnidades = null; @@ -340,7 +340,7 @@ public function consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $num * @throws InfraException * @return EstruturaDTO */ - public function listarEstruturas( + public function listarEstruturas( $idRepositorioEstrutura, $nome = '', $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, @@ -351,7 +351,7 @@ public function listarEstruturas( $parBolPermiteRecebimento = null, $parBolPermiteEnvio = null ) { - $arrObjEstruturaDTO = []; + $arrObjEstruturaDTO = []; try { $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); if (!$idRepositorioEstrutura) { @@ -399,7 +399,7 @@ public function listarEstruturas( throw new InfraException($mensagem, $e, $detalhes); } - return $arrObjEstruturaDTO; + return $arrObjEstruturaDTO; } @@ -418,7 +418,7 @@ public function listarEstruturas( * @throws InfraException * @return EstruturaDTO */ - public function buscarEstrutura( + public function buscarEstrutura( $idRepositorioEstrutura, $nome = '', $numeroDeIdentificacaoDaEstruturaRaizDaConsulta = null, @@ -428,44 +428,44 @@ public function buscarEstrutura( $registrosPorPagina = null, $parBolPermiteRecebimento = null, $parBolPermiteEnvio = null -) { - $arrObjEstruturaDTO = []; -try { - $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); - if (!$idRepositorioEstrutura) { - throw new InfraException('Repositório de Estruturas inválido'); - } - - $rh = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome; + ) { + $arrObjEstruturaDTO = []; + try { + $idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT); + if (!$idRepositorioEstrutura) { + throw new InfraException('Repositório de Estruturas inválido'); + } - $estrutura = $this->buscarEstruturaRest($idRepositorioEstrutura, $rh); + $rh = $numeroDeIdentificacaoDaEstruturaRaizDaConsulta ?: $nome; - if ($estrutura !== null) { + $estrutura = $this->buscarEstruturaRest($idRepositorioEstrutura, $rh); - $objEstruturaDTO = new EstruturaDTO(); - $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); - $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); - $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); - $objEstruturaDTO->setBolAtivo($estrutura['ativo']); - $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); - $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + if ($estrutura !== null) { - $arrHerarquia = array_map(function ($nivel) { + $objEstruturaDTO = new EstruturaDTO(); + $objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($estrutura['numeroDeIdentificacaoDaEstrutura']); + $objEstruturaDTO->setStrNome(mb_convert_encoding($estrutura['nome'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setStrSigla(mb_convert_encoding($estrutura['sigla'], 'ISO-8859-1', 'UTF-8')); + $objEstruturaDTO->setBolAtivo($estrutura['ativo']); + $objEstruturaDTO->setBolAptoParaReceberTramites($estrutura['aptoParaReceberTramites']); + $objEstruturaDTO->setStrCodigoNoOrgaoEntidade($estrutura['codigoNoOrgaoEntidade']); + + $arrHerarquia = array_map(function ($nivel) { return mb_convert_encoding($nivel['sigla'], 'ISO-8859-1', 'UTF-8'); - }, $estrutura['hierarquia'] ?: []); + }, $estrutura['hierarquia'] ?: []); - $objEstruturaDTO->setArrHierarquia($arrHerarquia); + $objEstruturaDTO->setArrHierarquia($arrHerarquia); - return $objEstruturaDTO; - } + return $objEstruturaDTO; + } - return null; -} catch (Exception $e) { - throw new InfraException("Falha na obtenção de unidades externas"); -} + return null; + } catch (Exception $e) { + throw new InfraException("Falha na obtenção de unidades externas"); + } - return $arrObjEstruturaDTO; -} + return $arrObjEstruturaDTO; + } /** * Verifica se o repositório de estruturas possui limitação de repositórios/unidades mapeadas @@ -742,30 +742,30 @@ public function listarEstruturasAutoCompletar( } - public function consultarMotivosUrgencia() + public function consultarMotivosUrgencia() { - $endpoint = 'motivosUrgencia'; - try { - $parametros = []; + $endpoint = 'motivosUrgencia'; + try { + $parametros = []; - $arrResultado = $this->get($endpoint, $parametros); - $arrMotivosUrgencia = []; - if (isset($arrResultado)) { - $count = count($arrResultado['motivosUrgencia']); + $arrResultado = $this->get($endpoint, $parametros); + $arrMotivosUrgencia = []; + if (isset($arrResultado)) { + $count = count($arrResultado['motivosUrgencia']); - for ($i = 0; $i < $count; $i++) { - $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); - } - } - - } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + for ($i = 0; $i < $count; $i++) { + $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); + } + } - return $arrMotivosUrgencia; + } catch (Exception $e) { + $mensagem = "Falha na obtenção de unidades externas"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + + return $arrMotivosUrgencia; + } /** * Busca as espécies documentais aceitas pelo Barramento de Serviços do PEN @@ -774,7 +774,7 @@ public function consultarMotivosUrgencia() * * @return array */ - public function consultarEspeciesDocumentais() + public function consultarEspeciesDocumentais() { $endpoint = 'especies'; try { @@ -782,22 +782,22 @@ public function consultarEspeciesDocumentais() $arrResultado = $this->get($endpoint, $parametros); $arrEspecies = []; - if (isset($arrResultado)) { - $count = count($arrResultado['especies']); + if (isset($arrResultado)) { + $count = count($arrResultado['especies']); - for ($i = 0; $i < $count; $i++) { - $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); - } + for ($i = 0; $i < $count; $i++) { + $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); } + } } catch (Exception $e) { $mensagem = "Não foi encontrado nenhuma espécie documental."; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); - } + } return $arrEspecies; - } + } public function enviarProcesso($parametros) @@ -827,28 +827,28 @@ public function enviarProcesso($parametros) - public function enviarProcessoREST($parametros) + public function enviarProcessoREST($parametros) { - $endpoint = "tramites/processo"; - try { - $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); + $endpoint = "tramites/processo"; + try { + $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); - return $arrResultado; + return $arrResultado; - } catch (Exception $e) { + } catch (Exception $e) { - $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; - $erroRequest = json_decode($e->getMessage()); - if ($erroRequest != null) { - $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; - } - $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; + $erroRequest = json_decode($e->getMessage()); + if ($erroRequest != null) { + $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; + } + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); - } } + } private function validarTramitaEmAndamento($parametros, $strMensagem) { @@ -898,26 +898,26 @@ public function listarPendencias($bolTodasPendencias) return $arrObjPendenciaDTO; } - private function tratarFalhaWebService(Exception $fault) + private function tratarFalhaWebService(Exception $fault) { - $mensagem = InfraException::inspecionar($fault); + $mensagem = InfraException::inspecionar($fault); - if ($fault instanceof RequestException && $fault->hasResponse()) { - - $codigoErro = $fault->getResponse()->getStatusCode(); - $mensagemDoErro = $fault->getResponse()->getReasonPhrase(); - $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + if ($fault instanceof RequestException && $fault->hasResponse()) { - // Fixação de mensagem de erro para quando já existe um trâmite em andamento - if ($codigoErro == "0044") { - $mensagem = 'Processo já possui um trâmite em andamento.'; - } - } + $codigoErro = $fault->getResponse()->getStatusCode(); + $mensagemDoErro = $fault->getResponse()->getReasonPhrase(); + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); - return $mensagem; + // Fixação de mensagem de erro para quando já existe um trâmite em andamento + if ($codigoErro == "0044") { + $mensagem = 'Processo já possui um trâmite em andamento.'; + } } + return $mensagem; + } + public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $idUnidadeOrigem, $idRepositorioDestino, $idUnidadeDestino, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false, $dblIdProcedimento = null) @@ -981,14 +981,14 @@ private function atribuirInformacoesModuloREST($objCabecalho) - private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcedimento) + private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcedimento) { try{ - if(!isset($dblIdProcedimento)){ + if(!isset($dblIdProcedimento)){ throw new InfraException('Parâmetro $dblIdProcedimento não informado.'); - } + } $objRelProtocoloAssuntoDTO = new RelProtocoloAssuntoDTO(); $objRelProtocoloAssuntoDTO->setDblIdProtocolo($dblIdProcedimento); @@ -1003,7 +1003,7 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment $contagem=1; $objProcessoEletronicoRN = new ProcessoEletronicoRN(); - foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { + foreach ($arrobjRelProtocoloAssuntoDTO as $objRelProtocoloAssuntoDTO) { $idAssunto = $objRelProtocoloAssuntoDTO->getNumIdAssunto(); $assuntoDTO = new AssuntoDTO(); @@ -1018,13 +1018,13 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment $infoAssunto = $objAssuntoRN->consultarRN0256($assuntoDTO); switch ($infoAssunto->getStrStaDestinacao()) { - case AssuntoRN::$TD_ELIMINACAO: + case AssuntoRN::$TD_ELIMINACAO: $destinacao = "Eliminação"; - break; + break; - case AssuntoRN::$TD_GUARDA_PERMANENTE: + case AssuntoRN::$TD_GUARDA_PERMANENTE: $destinacao = "Guarda Permanente"; - break; + break; } $valorInput = $objRelProtocoloAssuntoDTO->getStrDescricaoAssunto() ? @@ -1032,80 +1032,147 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_Descricao_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_Descricao_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getStrCodigoEstruturado() ? - utf8_encode($infoAssunto->getStrCodigoEstruturado()) - : "NA"; + utf8_encode($infoAssunto->getStrCodigoEstruturado()) + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_CodigoEstruturado_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_CodigoEstruturado_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getNumPrazoCorrente() ? - (int) $infoAssunto->getNumPrazoCorrente() - : "NA"; + (int) $infoAssunto->getNumPrazoCorrente() + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_PrazoCorrente_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_PrazoCorrente_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getNumPrazoIntermediario() ? - (int) $infoAssunto->getNumPrazoIntermediario() - : "NA"; + (int) $infoAssunto->getNumPrazoIntermediario() + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_PrazoIntermediario_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_PrazoIntermediario_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $destinacao ? - utf8_encode($destinacao) - : "NA"; + utf8_encode($destinacao) + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_Destinacao_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_Destinacao_' . $contagem, + 'valor' => $valorInput ]; $valorInput = $infoAssunto->getStrObservacao() ? - utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) - : "NA"; + utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + : "NA"; $arrDadosAssunto[] = [ - 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, - 'valor' => $valorInput + 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, + 'valor' => $valorInput ]; $contagem++; - } + } $objCabecalho['propriedadesAdicionais'][] = $arrDadosAssunto; return $objCabecalho; }catch(Exception $e){ - $mensagem = "Falha ao atribuir informações de assunto"; + $mensagem = "Falha ao atribuir informações de assunto"; throw new InfraException($mensagem, $e); } + } + + public function enviarComponenteDigital($parametros) + { + try { + + $objParametros = $parametros->dadosDoComponenteDigital; + $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; + + $protocolo = $objParametros->protocolo; + $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; + $conteudo = $objParametros->conteudoDoComponenteDigital; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); + $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); + $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); + + $strBaseUri = $this->strEnderecoWebService; + + $arrheaders = [ + 'Accept' => '*/*', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'headers' => $arrheaders, + 'timeout' => 5.0, + 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], + ]); + + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de componentes digitais"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + } - public function enviarComponenteDigital($parametros) + /** + * Método responsável por realizar o envio da parte de um componente digital + * @param $parametros + * @return mixed + * @throws InfraException + */ + public function enviarParteDeComponenteDigital($parametros) { - try { + try { - $objParametros = $parametros->dadosDoComponenteDigital; + $objParametros = $parametros->dadosDaParteDeComponenteDigital; $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; $protocolo = $objParametros->protocolo; $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; - $conteudo = $objParametros->conteudoDoComponenteDigital; + + $indetificacaoDaParte = $objParametros->identificacaoDaParte; + $parte = $indetificacaoDaParte->inicio . '-' . $indetificacaoDaParte->fim; + + $conteudo = $objParametros->conteudoDaParteDeComponenteDigital; $queryParams = [ 'hashDoComponenteDigital' => $hashDoComponenteDigital, 'protocolo' => $protocolo ]; - $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); @@ -1115,6 +1182,7 @@ public function enviarComponenteDigital($parametros) $arrheaders = [ 'Accept' => '*/*', + 'Content-Type' => 'application/json', ]; $strClientGuzzle = new GuzzleHttp\Client([ @@ -1124,96 +1192,28 @@ public function enviarComponenteDigital($parametros) 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); - + $arrOptions = [ 'query' => $queryParams, 'multipart' => [ [ 'name' => 'conteudo', 'contents' => $conteudo, - 'filename' => 'conteudo.html', - 'headers' => ['Content-Type' => 'text/html'] + 'filename' => 'arquivo_externo.html', + // 'headers' => ['Content-Type' => 'text/html'] ], ], ]; - - $strClientGuzzle->request('PUT', $endpoint, $arrOptions); - - } catch (\Exception $e) { - $mensagem = "Falha no envio de componentes digitais"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - } - - /** - * Método responsável por realizar o envio da parte de um componente digital - * @param $parametros - * @return mixed - * @throws InfraException - */ - public function enviarParteDeComponenteDigital($parametros) - { - try { - - $objParametros = $parametros->dadosDaParteDeComponenteDigital; - $idTicketDeEnvio = $objParametros->ticketParaEnvioDeComponentesDigitais; - - $protocolo = $objParametros->protocolo; - $hashDoComponenteDigital = $objParametros->hashDoComponenteDigital; - - $indetificacaoDaParte = $objParametros->identificacaoDaParte; - $parte = $indetificacaoDaParte->inicio . '-' . $indetificacaoDaParte->fim; - - $conteudo = $objParametros->conteudoDaParteDeComponenteDigital; - - $queryParams = [ - 'hashDoComponenteDigital' => $hashDoComponenteDigital, - 'protocolo' => $protocolo - ]; - - $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; - - $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); - $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); - $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - - $strBaseUri = $this->strEnderecoWebService; - - $arrheaders = [ - 'Accept' => '*/*', - 'Content-Type' => 'application/json', - ]; - - $strClientGuzzle = new GuzzleHttp\Client([ - 'base_uri' => $strBaseUri, - 'headers' => $arrheaders, - 'timeout' => 5.0, - 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], - ]); - - - $arrOptions = [ - 'query' => $queryParams, - 'multipart' => [ - [ - 'name' => 'conteudo', - 'contents' => $conteudo, - 'filename' => 'arquivo_externo.html', - // 'headers' => ['Content-Type' => 'text/html'] - ], - ], - ]; - $strClientGuzzle->request('PUT', $endpoint, $arrOptions); - } catch (\Exception $e) { - $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); - $mensagem = "Falha de envio do componente digital. Erro: {$erroResposta->codigoErro} - {$erroResposta->mensagem}"; - $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + $strClientGuzzle->request('PUT', $endpoint, $arrOptions); + } catch (\Exception $e) { + $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); + $mensagem = "Falha de envio do componente digital. Erro: {$erroResposta->codigoErro} - {$erroResposta->mensagem}"; + $mensagem = mb_convert_encoding($mensagem, 'ISO-8859-1', 'UTF-8'); + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + } /** * Método responsável por sinalizar o término do envio das partes de um componente digital @@ -1358,9 +1358,9 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR throw new InfraException('Parâmetro $objProcesso não informado.'); } - if (is_array($parObjProtocolo)) { - $parObjProtocolo = (object) $parObjProtocolo; - } + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } //Monta dados do processo eletrônico $objProcessoEletronicoDTO = new ProcessoEletronicoDTO(); @@ -1370,19 +1370,19 @@ public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroR //Montar dados dos procedimentos apensados if (isset($parObjProtocolo->processoApensado)) { - if (!is_array($parObjProtocolo->processoApensado)) { - $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); - } + if (!is_array($parObjProtocolo->processoApensado)) { + $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); + } $arrObjRelProcessoEletronicoApensadoDTO = array(); $objRelProcessoEletronicoApensadoDTO = null; - foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { - $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); - $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); - $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado['idProcedimentoSEI']); - $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado['protocolo']); - $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; - } + foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { + $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); + $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); + $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado['idProcedimentoSEI']); + $objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado['protocolo']); + $arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO; + } $objProcessoEletronicoDTO->setArrObjRelProcessoEletronicoApensado($arrObjRelProcessoEletronicoApensadoDTO); } @@ -1697,35 +1697,35 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden - public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) + public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo, $parObjParteComponente = null) { - $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais"; - try { - $identificacaoDoComponenteDigital = [ - 'hashDoComponenteDigital' => $parStrHashComponenteDigital, - 'protocolo' => $parStrProtocolo, - ]; + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais"; + try { + $identificacaoDoComponenteDigital = [ + 'hashDoComponenteDigital' => $parStrHashComponenteDigital, + 'protocolo' => $parStrProtocolo, + ]; - // Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital - if (!is_null($parObjParteComponente)) { - $parte = $parObjParteComponente->inicio . '-' . $parObjParteComponente->fim; - $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais/partes/{$parte}"; - } + // Se for passado o parametro $parObjParteComponente retorna apenas parte especifica do componente digital + if (!is_null($parObjParteComponente)) { + $parte = $parObjParteComponente->inicio . '-' . $parObjParteComponente->fim; + $endpoint = "tramites/{$parNumIdentificacaoTramite}/protocolos/componentes-digitais/partes/{$parte}"; + } - $strComponenteDigitalBase64 = $this->post($endpoint, $identificacaoDoComponenteDigital); + $strComponenteDigitalBase64 = $this->post($endpoint, $identificacaoDoComponenteDigital); - $objResultado = new stdClass(); - $objResultado->conteudoDoComponenteDigital = new stdClass(); - $objResultado->conteudoDoComponenteDigital = base64_decode($strComponenteDigitalBase64); + $objResultado = new stdClass(); + $objResultado->conteudoDoComponenteDigital = new stdClass(); + $objResultado->conteudoDoComponenteDigital = base64_decode($strComponenteDigitalBase64); - return $objResultado; + return $objResultado; - } catch (\Exception $e) { - $mensagem = "Falha no recebimento do componente digital"; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } + } catch (\Exception $e) { + $mensagem = "Falha no recebimento do componente digital"; + $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); + throw new InfraException($mensagem, $e, $detalhes); } + } public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = null, $parNumeroUnidadeRemetente = null, $parNumeroUnidadeDestino = null, $parProtocolo = null, $parNumeroRepositorioEstruturas = null) { @@ -2223,13 +2223,13 @@ public function isDisponivelCancelarTramite($strProtocolo = '') $objTramiteBD = new TramiteBD($this->getObjInfraIBanco()); $arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO); - if(!$arrObjTramiteDTO){ + if(!$arrObjTramiteDTO){ return false; - } + } $objTramiteDTO = $arrObjTramiteDTO[0]; - try { + try { $parametros = new stdClass(); $parametros->filtroDeConsultaDeTramites = new stdClass(); $parametros->filtroDeConsultaDeTramites->IDT = $objTramiteDTO->getNumIdTramite(); @@ -2241,29 +2241,29 @@ public function isDisponivelCancelarTramite($strProtocolo = '') return $objPenWs->consultarTramites($parametros); }); - if($objMeta->tramitesEncontrados) { - $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; - $objMetaTramite = $arrObjMetaTramite[0]; + if($objMeta->tramitesEncontrados) { + $arrObjMetaTramite = !is_array($objMeta->tramitesEncontrados->tramite) ? array($objMeta->tramitesEncontrados->tramite) : $objMeta->tramitesEncontrados->tramite; + $objMetaTramite = $arrObjMetaTramite[0]; - $strSituacoesDisponíveisCancelamento = array( - static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, - static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO - ); + $strSituacoesDisponíveisCancelamento = array( + static::$STA_SITUACAO_TRAMITE_INICIADO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_ENVIADOS_REMETENTE, + static::$STA_SITUACAO_TRAMITE_METADADOS_RECEBIDO_DESTINATARIO, static::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO + ); - if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ + if(in_array($objMetaTramite->situacaoAtual, $strSituacoesDisponíveisCancelamento)){ return true; + } } - } return false; - } - catch(SoapFault $e) { + } + catch(SoapFault $e) { return false; - } - catch(Exception $e) { + } + catch(Exception $e) { return false; + } } -} public function consultarHipotesesLegais($ativos = true) { @@ -2389,32 +2389,32 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; foreach ($arrObjDocumentoPadronizados as $documento) { - if (is_array($documento) && $documento['componentesDigitais']) { - $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); - } else { - $documento->componentesDigitais = self::obterComponentesDocumentos($documento); - } + if (is_array($documento) && $documento['componentesDigitais']) { + $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); + } else { + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + } } return $arrObjDocumentoPadronizados; } - public static function obterComponentesDocumentos($parObjDocumento) - { - - if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { - return $parObjDocumento['componentesDigitais']; - } - - $arrObjComponenteDigital = array(); - if (isset($parObjDocumento->componentesDigitais)) { - $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); - usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } + public static function obterComponentesDocumentos($parObjDocumento) + { + + if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { + return $parObjDocumento['componentesDigitais']; + } + + $arrObjComponenteDigital = array(); + if (isset($parObjDocumento->componentesDigitais)) { + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); + usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); + } - return $arrObjComponenteDigital; - } + return $arrObjComponenteDigital; + } /** * Retorna a referência para o processo ou documento avulso @@ -2469,9 +2469,9 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) public static function obterComponentesDigitaisDocumento($parObjDocumento) { $arrObjComponenteDigital = array(); - if (isset($parObjDocumento['componentesDigitais'])) { - $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); - } + if (isset($parObjDocumento['componentesDigitais'])) { + $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); + } return $arrObjComponenteDigital; } @@ -2490,9 +2490,9 @@ public static function obterComponentesDigitaisDocumento($parObjDocumento) */ public static function desmembrarProcessosAnexados($parObjProtocolo) { - if (is_array($parObjProtocolo)) { - $parObjProtocolo = (object) $parObjProtocolo; - } + if (is_array($parObjProtocolo)) { + $parObjProtocolo = (object) $parObjProtocolo; + } if(!ProcessoEletronicoRN::existeProcessoAnexado($parObjProtocolo)){ return $parObjProtocolo; @@ -2809,9 +2809,9 @@ public function consultarEstruturas($idRepositorioEstrutura, $parametros = []) * @throws InfraException Falha na obtenção de unidades externas. * @return array */ - public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) + public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) { - $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/{$idUnidadeRH}"; + $endpoint = "repositorios-de-estruturas/{$idRepositorioEstrutura}/estruturas-organizacionais/{$idUnidadeRH}"; try { $arrResultado = $this->get($endpoint); return $arrResultado; @@ -2827,30 +2827,30 @@ public function buscarEstruturaRest($idRepositorioEstrutura, $idUnidadeRH) * Iniciar requisição HTTP utilizado para comunicação Webservice REST * */ - private function getArrPenWsRest($method, $endpoint, $options = []) + private function getArrPenWsRest($method, $endpoint, $options = []) { try { $arrResultado = $this->strClientGuzzle->request($method, $endpoint, $options); $base64 = $arrResultado->getBody()->getContents(); $foo = json_decode($arrResultado->getBody(), true); - if ($foo != null) { - return $foo; - } + if ($foo != null) { + return $foo; + } return $base64; } catch (RequestException $e) { $erroResposta = json_decode($e->getResponse()->getBody()->getContents()); - // Lança uma nova exceção com os detalhes do RequestException - throw new Exception(json_encode([ - 'error' => true, + // Lança uma nova exceção com os detalhes do RequestException + throw new Exception(json_encode([ + 'error' => true, 'codigoErro' => $erroResposta->codigoErro, 'message' => $erroResposta->mensagem, 'exception' => $e->getMessage(), 'details' => $e->hasResponse() ? (string) $e->getResponse()->getBody() : 'No response body' - ])); - } + ])); + } } private function get($endpoint, $params = []) { diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index 0089a9105..70b829d87 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -150,65 +150,65 @@ protected function compactarAnexosDoDocumento($parNumIdDocumento, $parArrAnexoDT $contDocumentosDto = 0; $arrayRetornoObjAnexoDTO = array(); - foreach ($arrObjDocumentoDTO as $objDocumentoDTO) { - $contDocumentosDto++; - $objAnexoRN = new AnexoRN(); - - $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); - $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); - $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; - - $zipFile= new ZipArchive(); - $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); - - $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); - $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; - $numSequencial = 0; - foreach($arrIdDocumentos as $dblIdDocumento){ - $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; - $strDocumento = ''; - if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ - $arrayAnexosExcluirFisicamente = array(); - foreach ($parArrAnexoDTO as $objAnexoDTO){ - $numSequencial++; - - if ($objAnexoDTO==null){ - $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); - }else{ - /** - * Aqui será atribuído um nome aos anexos - */ - $ext = explode('.', $objAnexoDTO->getStrNome()); - /** - * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. - */ - $ext = strtolower($ext[count($ext)-1]); - $strNomeArquivo = $objAnexoDTO->getStrNome(); - - /** - * Aqui, o anexo será adicionado ao zip - */ - $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; - //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ - throw new InfraException('Erro adicionando arquivo externo ao zip.'); - } - else{ - /** - * Aqui quer dizer que o arquivo já foi colocado dentro do zip. - * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. - */ - array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); - } - } - } - }else{ - $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); - } - } + foreach ($arrObjDocumentoDTO as $objDocumentoDTO) { + $contDocumentosDto++; + $objAnexoRN = new AnexoRN(); + + $strProtocoloDocumentoFormatado = $objDocumentoDTO->getStrProtocoloDocumentoFormatado(); + $strNomeArquivoCompactado = $objAnexoRN->gerarNomeArquivoTemporario(); + $strCaminhoCompletoArquivoZip = DIR_SEI_TEMP.'/'.$strNomeArquivoCompactado; + + $zipFile= new ZipArchive(); + $zipFile->open($strCaminhoCompletoArquivoZip, ZIPARCHIVE::CREATE); + + $arrObjDocumentoDTO = InfraArray::indexarArrInfraDTO($arrObjDocumentoDTO, 'IdDocumento'); + $numCasas=floor(log10(count($arrObjDocumentoDTO)))+1; + $numSequencial = 0; + foreach($arrIdDocumentos as $dblIdDocumento){ + $objDocumentoDTO = $arrObjDocumentoDTO[$dblIdDocumento]; + $strDocumento = ''; + if ($objDocumentoDTO->getStrStaProtocoloProtocolo() == ProtocoloRN::$TP_DOCUMENTO_RECEBIDO){ + $arrayAnexosExcluirFisicamente = array(); + foreach ($parArrAnexoDTO as $objAnexoDTO){ + $numSequencial++; + + if ($objAnexoDTO==null){ + $objInfraException->adicionarValidacao('Documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado() .' não encontrado.'); + }else{ + /** + * Aqui será atribuído um nome aos anexos + */ + $ext = explode('.', $objAnexoDTO->getStrNome()); + /** + * o código abaixo foi comentado, pois com ele estavam sendo gerados os nomes que não refletiam os nomes reais dos arquivos. + */ + $ext = strtolower($ext[count($ext)-1]); + $strNomeArquivo = $objAnexoDTO->getStrNome(); + + /** + * Aqui, o anexo será adicionado ao zip + */ + $strLocalizacaoArquivo = DIR_SEI_TEMP.'/'. $objAnexoDTO->getNumIdAnexo() ; + //if ($zipFile->addFile($strLocalizacaoArquivo,'['.$numComponenteDigital.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + if ($zipFile->addFile($strLocalizacaoArquivo, '['.$numSequencial.']-'.InfraUtil::formatarNomeArquivo($strNomeArquivo)) === false){ + throw new InfraException('Erro adicionando arquivo externo ao zip.'); + } + else{ + /** + * Aqui quer dizer que o arquivo já foi colocado dentro do zip. + * Vamos colocá-lo em um array e depois utilizarmos este array para fazer as exclusões. + */ + array_push($arrayAnexosExcluirFisicamente, $strLocalizacaoArquivo); + } + } + } + }else{ + $objInfraException->adicionarValidacao('Não foi possível detectar o tipo do documento '.$objDocumentoDTO->getStrProtocoloDocumentoFormatado().'.'); + } + } $objInfraException->lancarValidacoes(); if ($zipFile->close() === false) { - throw new InfraException('Não foi possível fechar arquivo zip.'); + throw new InfraException('Não foi possível fechar arquivo zip.'); } $objAnexoDTO = new AnexoDTO(); $arrNomeArquivo = explode('/', $strCaminhoCompletoArquivoZip); @@ -222,7 +222,7 @@ protected function compactarAnexosDoDocumento($parNumIdDocumento, $parArrAnexoDT * Vamos varrer os arquivos que devem ser excluídos fisicamente da pasta temporária e excluí-los */ foreach ($arrayAnexosExcluirFisicamente as $caminhoArquivoExcluirFisicamente){ - unlink($caminhoArquivoExcluirFisicamente); + unlink($caminhoArquivoExcluirFisicamente); } } return $objAnexoDTO; @@ -256,9 +256,9 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, */ public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $parObjConteudo) { - if (!isset($parArrComponenteDigital)) { - throw new InfraException("Componente Digital não informado"); - } + if (!isset($parArrComponenteDigital)) { + throw new InfraException("Componente Digital não informado"); + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 200a2715f..9c4871a3d 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -1667,9 +1667,9 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o foreach($arrObjDocumentos as $objDocumento) { - if (is_array($objDocumento)) { - $objDocumento = (object) $objDocumento; - } + if (is_array($objDocumento)) { + $objDocumento = (object) $objDocumento; + } if(!isset($objDocumento->staTipoProtocolo) || $bolDocumentoAvulso) { @@ -2643,23 +2643,23 @@ private function documentosPendenteRegistro($parNumIdProcedimento, $parNumIdDocu * @param $parComponentePendente * @return $tamanhoComponentePendende */ - private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) - { - //Obtém os documentos do protocolo em um array - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - - //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente - foreach ($arrObjDocumentos as $objDocumento) { - $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); - foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { - if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { - $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; - break; - } - } - } - return $tamanhoComponentePendende; - } + private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parComponentePendente) + { + //Obtém os documentos do protocolo em um array + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + + //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente + foreach ($arrObjDocumentos as $objDocumento) { + $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); + foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { + if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { + $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; + break; + } + } + } + return $tamanhoComponentePendende; + } /** @@ -2722,21 +2722,21 @@ private function receberComponenenteDigitalParticionado($componentePendente, $nr } - private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) - { - $resultado = array(); - $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); - foreach ($arrObjDocumentos as $arrDocumento) { - if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ - $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); - } - foreach ($arrDocumento['componentesDigitais'] as $objComponente) { - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); - $resultado[$strHash] = $objComponente; - } - } - return $resultado; - } + private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) + { + $resultado = array(); + $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); + foreach ($arrObjDocumentos as $arrDocumento) { + if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ + $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); + } + foreach ($arrDocumento['componentesDigitais'] as $objComponente) { + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); + $resultado[$strHash] = $objComponente; + } + } + return $resultado; + } /** From 0e904261882a1348f0a9ee883718e9a5af17fbcb Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Mon, 25 Nov 2024 09:31:41 -0300 Subject: [PATCH 10/25] fix: alterar estutura removendo parametro em obsoleto --dev --- Makefile | 8 +++++--- tests_sei4/funcional/docker-compose.yml | 4 ++-- tests_sei41/funcional/docker-compose.yml | 4 ++-- tests_super/funcional/docker-compose.yml | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index bec22240b..2fd6d0f9d 100755 --- a/Makefile +++ b/Makefile @@ -144,8 +144,10 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org1-http chown -R root:root /etc/cron.d/ $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sei $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sip - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install --no-dev' - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install --no-dev' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar update --lock' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar update --lock' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" @@ -202,7 +204,7 @@ test-parallel-otimizado: .env $(FILE_VENDOR_FUNCIONAL) up test-unit: $(FILE_VENDOR_UNITARIO) - $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'vendor/bin/phpunit rn/ProcessoEletronicoRNTest.php' + $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'vendor/bin/phpunit rn/$(addsuffix .php,$(teste))' test: test-unit test-functional diff --git a/tests_sei4/funcional/docker-compose.yml b/tests_sei4/funcional/docker-compose.yml index 54a67abcd..9df957d74 100755 --- a/tests_sei4/funcional/docker-compose.yml +++ b/tests_sei4/funcional/docker-compose.yml @@ -151,7 +151,7 @@ services: - ../../src/bin:/opt/sei/bin/mod-pen - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos - - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ./composer.json:/opt/sei/web/modulos/pen/composer.json - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: @@ -214,7 +214,7 @@ services: - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 diff --git a/tests_sei41/funcional/docker-compose.yml b/tests_sei41/funcional/docker-compose.yml index 89b0c51ad..7d255f91c 100755 --- a/tests_sei41/funcional/docker-compose.yml +++ b/tests_sei41/funcional/docker-compose.yml @@ -150,7 +150,7 @@ services: - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 @@ -210,7 +210,7 @@ services: - ./assets/config/ConfiguracaoSip.php:/opt/sip/config/ConfiguracaoSip.php:ro - /tmp/sei_arquivos_2:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 diff --git a/tests_super/funcional/docker-compose.yml b/tests_super/funcional/docker-compose.yml index b09161200..5ac470cec 100755 --- a/tests_super/funcional/docker-compose.yml +++ b/tests_super/funcional/docker-compose.yml @@ -150,7 +150,7 @@ services: - ../../src:/opt/sei/web/modulos/pen - /tmp/sei_arquivos_1:/var/sei/arquivos - ./assets/config/composer.json:/opt/sei/web/modulos/pen/composer.json - - ./composer.json:/opt/sei/web/modulos/pen/composer.json + - ./composer.phar:/opt/sei/web/modulos/pen/composer.phar - ../../vendor:/opt/sei/web/modulos/pen/vendor environment: - LANG=pt_BR.ISO-8859-1 From d25d77282c77717492aa4d4a5c2e2f8b0c13c219 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Tue, 26 Nov 2024 02:35:11 -0300 Subject: [PATCH 11/25] =?UTF-8?q?fix:=20alterar=20WSDL=20para=20REST=20no?= =?UTF-8?q?=20verificador=20de=20instala=C3=A7=C3=A3o=20e=20corrigir=20err?= =?UTF-8?q?o=20de=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 +- src/rn/PENAgendamentoRN.php | 2 +- src/rn/ProcessoEletronicoRN.php | 64 ++++++------------- src/rn/VerificadorInstalacaoRN.php | 16 ++--- .../PenMapUnidadesRestricaoFixture.php | 2 +- .../PenMapUnidadesRestricaoFixture.php | 2 +- .../PenMapUnidadesRestricaoFixture.php | 2 +- 7 files changed, 31 insertions(+), 61 deletions(-) diff --git a/Makefile b/Makefile index 2fd6d0f9d..00f257ac2 100755 --- a/Makefile +++ b/Makefile @@ -144,10 +144,10 @@ install: check-isalive $(CMD_COMPOSE_FUNC) exec org1-http chown -R root:root /etc/cron.d/ $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sei $(CMD_COMPOSE_FUNC) exec org1-http chmod 0644 /etc/cron.d/sip + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar update' + $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar update' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar install' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar install' - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org1-http bash -c './composer.phar update --lock' - $(CMD_COMPOSE_FUNC) exec -w /opt/sei/web/modulos/pen org2-http bash -c './composer.phar update --lock' $(CMD_COMPOSE_FUNC) exec -w /opt/sei/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SEI_MODULO)" $(CMD_COMPOSE_FUNC) exec -w /opt/sip/scripts/$(MODULO_PASTAS_CONFIG) org1-http bash -c "$(CMD_INSTALACAO_SIP_MODULO)" diff --git a/src/rn/PENAgendamentoRN.php b/src/rn/PENAgendamentoRN.php index d28e16d90..7cd742fe8 100755 --- a/src/rn/PENAgendamentoRN.php +++ b/src/rn/PENAgendamentoRN.php @@ -49,7 +49,7 @@ protected function atualizarHipotesesLegaisControlado() continue; } - $objDTO->setStrNome(mb_convert_encoding($hipotese->nome, 'ISO-8859-1', 'UTF-8')); + $objDTO->setStrNome(mb_convert_encoding($hipotese['nome'], 'ISO-8859-1', 'UTF-8')); if ($hipotese['status']) { $objDTO->setStrAtivo('S'); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 0db9f0fbf..11da81f4a 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -212,14 +212,14 @@ public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorio * * @return void */ - public function listarRepositoriosDeEstruturas() + public function listarRepositoriosDeEstruturas($ativo = true) { $arrObjRepositorioDTO = []; $endpoint = 'repositorios-de-estruturas'; try { $parametros = [ - 'ativos' => true + 'ativos' => $ativo ]; $arrResultado = $this->get($endpoint, $parametros); @@ -799,37 +799,9 @@ public function consultarEspeciesDocumentais() return $arrEspecies; } - - public function enviarProcesso($parametros) - { - try { - return $this->tentarNovamenteSobErroHTTP(function($objPenWs) use ($parametros) { - return $objPenWs->enviarProcesso($parametros); - }); - - } catch (\SoapFault $e) { - $strMensagem = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript(mb_convert_encoding($e->faultstring, 'ISO-8859-1', 'UTF-8'))); - - if ($e instanceof \SoapFault && !empty($e->detail->interoperabilidadeException->codigoErro) && $e->detail->interoperabilidadeException->codigoErro == '0005') { - $strMensagem .= 'O código mapeado para a unidade ' . mb_convert_encoding($parametros->novoTramiteDeProcesso->processo->documento[0]->produtor->unidade->nome, 'ISO-8859-1', 'UTF-8') . ' está incorreto.'; - } - - $e->faultstring = $this->validarTramitaEmAndamento($parametros, $strMensagem); - $strMensagem = $e->faultstring; - $strDetalhes = str_replace(array("\n", "\r"), ' ', InfraString::formatarJavaScript($this->tratarFalhaWebService($e))); - throw new InfraException($strMensagem, $e, $strDetalhes); - } catch (\Exception $e) { - $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; - $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); - throw new InfraException($mensagem, $e, $detalhes); - } - } - - - public function enviarProcessoREST($parametros) - { - $endpoint = "tramites/processo"; + { + $endpoint = "tramites/processo"; try { $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); @@ -837,8 +809,8 @@ public function enviarProcessoREST($parametros) } catch (Exception $e) { - $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; - $erroRequest = json_decode($e->getMessage()); + $mensagem = "Falha no envio externo do processo. Verifique log de erros do sistema para maiores informações."; + $erroRequest = json_decode($e->getMessage()); if ($erroRequest != null) { $mensagem = "Falha no envio externo do processo. Erro: {$erroRequest->codigoErro} - {$erroRequest->message}"; } @@ -880,17 +852,17 @@ public function listarPendencias($bolTodasPendencias) $arrResultado = $this->get($endpoint, $parametros); - if (isset($arrResultado)) { - foreach ($arrResultado as $idt) { - $pendenciaDTO = new PendenciaDTO(); - $pendenciaDTO->setNumIdentificacaoTramite($idt['IDT']); - $pendenciaDTO->setStrStatus($idt['status']); - $arrObjPendenciaDTO[] = $pendenciaDTO; + if (is_array($arrResultado) && !is_null($arrResultado)) { + foreach ($arrResultado as $strPendencia) { + $pendenciaDTO = new PendenciaDTO(); + $pendenciaDTO->setNumIdentificacaoTramite($strPendencia['IDT']); + $pendenciaDTO->setStrStatus($strPendencia['status']); + $arrObjPendenciaDTO[] = $pendenciaDTO; } - } + } } catch (Exception $e) { - $mensagem = "Falha na obtenção de unidades externas"; + $mensagem = "Falha na listagem de pendências de trâmite de processos"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); throw new InfraException($mensagem, $e, $detalhes); } @@ -2853,19 +2825,19 @@ private function getArrPenWsRest($method, $endpoint, $options = []) } } - private function get($endpoint, $params = []) { + public function get($endpoint, $params = []) { return $this->getArrPenWsRest('GET', $endpoint, ['query' => $params]); } - private function post($endpoint, $data = []) { + public function post($endpoint, $data = []) { return $this->getArrPenWsRest('POST', $endpoint, ['json' => $data]); } - private function put($endpoint, $data = []) { + public function put($endpoint, $data = []) { return $this->getArrPenWsRest('PUT', $endpoint, ['json' => $data]); } - private function delete($endpoint, $params = []) { + public function delete($endpoint, $params = []) { return $this->getArrPenWsRest('DELETE', $endpoint, ['query' => $params]); } } \ No newline at end of file diff --git a/src/rn/VerificadorInstalacaoRN.php b/src/rn/VerificadorInstalacaoRN.php index 092088184..d3ffeeaa4 100755 --- a/src/rn/VerificadorInstalacaoRN.php +++ b/src/rn/VerificadorInstalacaoRN.php @@ -233,12 +233,14 @@ public function verificarConexaoBarramentoPEN() $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); $strSenhaCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "SenhaCertificado"); - $strEnderecoWSDL = $strEnderecoWebService . '?wsdl'; - $curl = curl_init($strEnderecoWSDL); + $healthcheck = 'healthcheck'; + + $strEnderecoBarramento = $strEnderecoWebService . '/' . $healthcheck; + $curl = curl_init($strEnderecoBarramento); try{ $bolEmProducao = boolval(ConfiguracaoSEI::getInstance()->getValor('SEI', 'Producao')); - curl_setopt($curl, CURLOPT_URL, $strEnderecoWSDL); + curl_setopt($curl, CURLOPT_URL, $strEnderecoBarramento); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); @@ -254,12 +256,7 @@ public function verificarConexaoBarramentoPEN() $strErrorMsg = curl_error($curl); } if (isset($strErrorMsg)) { - throw new Exception("Erro no CURL ao obter o WSDL em $strEnderecoWSDL. Erro detalhado: $strErrorMsg."); - } - $objXML = simplexml_load_string($strOutput); - - if(empty($strOutput) || $strOutput === false || empty($objXML) || $objXML === false){ - throw new Exception("Falha na validação do WSDL do webservice de integração com o Tramita GOV.BR localizado em $strEnderecoWSDL"); + throw new Exception("Erro no CURL para $strEnderecoBarramento. Erro detalhado: $strErrorMsg."); } } finally{ @@ -282,6 +279,7 @@ public function verificarAcessoPendenciasTramitePEN() try{ $objProcessoEletronicoRN = new ProcessoEletronicoRN(); $objProcessoEletronicoRN->listarPendencias(false); + return true; } catch(Exception $e){ throw new InfraException("Falha no acesso aos serviços de integração do Tramita GOV.BR: $e"); diff --git a/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php b/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php index 087328f64..62ca829c4 100644 --- a/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php +++ b/tests_sei4/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php @@ -40,7 +40,7 @@ public function consultar($dados = []) $objPenUnidadeRestricaoDTO = new \PenUnidadeRestricaoDTO(); $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($dados['NomeUnidadeRestricao']); - $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']."%", InfraDTO::$OPER_LIKE); $objPenUnidadeRestricaoDTO->retTodos(); $objPenUnidadeRestricaoBD = new \PenUnidadeRestricaoBD($this->inicializarObjInfraIBanco()); diff --git a/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php b/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php index 087328f64..62ca829c4 100644 --- a/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php +++ b/tests_sei41/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php @@ -40,7 +40,7 @@ public function consultar($dados = []) $objPenUnidadeRestricaoDTO = new \PenUnidadeRestricaoDTO(); $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($dados['NomeUnidadeRestricao']); - $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']."%", InfraDTO::$OPER_LIKE); $objPenUnidadeRestricaoDTO->retTodos(); $objPenUnidadeRestricaoBD = new \PenUnidadeRestricaoBD($this->inicializarObjInfraIBanco()); diff --git a/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php b/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php index 087328f64..62ca829c4 100644 --- a/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php +++ b/tests_super/funcional/src/fixtures/PenMapUnidadesRestricaoFixture.php @@ -40,7 +40,7 @@ public function consultar($dados = []) $objPenUnidadeRestricaoDTO = new \PenUnidadeRestricaoDTO(); $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($dados['NomeUnidadeRestricao']); - $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($dados['NomeUnidadeRHRestricao']."%", InfraDTO::$OPER_LIKE); $objPenUnidadeRestricaoDTO->retTodos(); $objPenUnidadeRestricaoBD = new \PenUnidadeRestricaoBD($this->inicializarObjInfraIBanco()); From 82a57618ccc63db00fe0ae159696ac253b7eb067 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 6 Dec 2024 08:07:39 -0300 Subject: [PATCH 12/25] =?UTF-8?q?fix::=20corrigir=20atualiza=C3=A7=C3=A3o?= =?UTF-8?q?=20no=20banco=20para=20proceessos=20recebidos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pen_map_unidade_cadastrar.php | 15 ++++++++------- src/rn/ExpedirProcedimentoRN.php | 7 ++++--- src/rn/ProcessoEletronicoRN.php | 19 +++++------------- src/rn/ReceberProcedimentoRN.php | 32 ++++++++++++++++++------------- 4 files changed, 36 insertions(+), 37 deletions(-) diff --git a/src/pen_map_unidade_cadastrar.php b/src/pen_map_unidade_cadastrar.php index f129f6ec8..ce03d4f84 100755 --- a/src/pen_map_unidade_cadastrar.php +++ b/src/pen_map_unidade_cadastrar.php @@ -183,18 +183,19 @@ $objUnidadeDTO->retStrDescricao(); $arrMapIdUnidade = array(); $objPenUnidadeRN = new PenUnidadeRN(); - foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { - $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); - } + foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { + $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); + } //Verifica se o numero da unidade esta vazio, senão estiver busca o nome da unidade para exibição $strNomeUnidadeSelecionada = ''; if(!empty($objPenUnidadeDTO->getNumIdUnidadeRH())){ - $objProcessoEletronico = new ProcessoEletronicoRN(); - $objProcessoEletronicoDTO = $objProcessoEletronico->listarEstruturas($numIdRepositorioOrigem, $objPenUnidadeDTO->getNumIdUnidadeRH()); - if(!is_null($objProcessoEletronicoDTO[0])){ - $strNomeUnidadeSelecionada = $objProcessoEletronicoDTO[0]->getStrNome(); + $objProcessoEletronico = new ProcessoEletronicoRN(); + $objProcessoEletronicoDTO = $objProcessoEletronico->buscarEstrutura($numIdRepositorioOrigem, $objPenUnidadeDTO->getNumIdUnidadeRH()); + + if(!is_null($objProcessoEletronicoDTO)){ + $strNomeUnidadeSelecionada = $objProcessoEletronicoDTO->getStrNome(); }else{ $strNomeUnidadeSelecionada = 'Unidade não encontrada.'; } diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index c949b6e83..c2832a8ed 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -1247,7 +1247,6 @@ public function atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objCompone $objAssinaturaDTO->retStrP7sBase64(); $resAssinatura = $this->objAssinaturaRN->listarRN1323($objAssinaturaDTO); - $objComponenteDigital['assinaturasDigitais'] = array(); foreach ($resAssinatura as $keyOrder => $assinatura) { $objAtividadeDTO = new AtividadeDTO(); $objAtividadeDTO->setNumIdAtividade($assinatura->getNumIdAtividade()); //7 @@ -1281,8 +1280,11 @@ public function atribuirDadosAssinaturaDigitalREST($objDocumentoDTO, $objCompone 'formato' => 'PKCS7', 'conteudo' => 'vazio' ]; - } + } + } + + if ($objAssinaturaDigital != null) { $objComponenteDigital['assinaturasDigitais'][] = $objAssinaturaDigital; } @@ -1780,7 +1782,6 @@ private function atribuirNumeracaoDocumentoREST($objDocumento, DocumentoDTO $par $strStaNumeracao = $objSerieDTO->getStrStaNumeracao(); - $objDocumento['identificacao'] = array(); if ($strStaNumeracao == SerieRN::$TN_SEQUENCIAL_UNIDADE) { $objDocumento['identificacao']['numero'] = utf8_encode($parObjDocumentoDTO->getStrNumero()); $objDocumento['identificacao']['siglaDaUnidadeProdutora'] = utf8_encode($parObjDocumentoDTO->getStrSiglaUnidadeGeradoraProtocolo()); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 11da81f4a..7416afeba 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -1218,30 +1218,21 @@ public function sinalizarTerminoDeEnvioDasPartesDoComponente($parametros) public function solicitarMetadados($parNumIdentificacaoTramite) { - $endpoint = "tramites/{$parNumIdentificacaoTramite}"; + $endpoint = "tramites/{$parNumIdentificacaoTramite}"; try { $parametros = [ 'IDT' => $parNumIdentificacaoTramite ]; $arrResultado = $this->get($endpoint, $parametros); - $arrResultado['propriedadeAdicional'] = $arrResultado['propriedadesAdicionais']; - $arrResultadoDocumentos = $arrResultado['processo']['documentos'][0]; - $arrResultado['processo']['documentos'][0]['componenteDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]; - $arrResultado['processo']['documentos'][0]['componenteDigital']['assinaturaDigital'] = $arrResultadoDocumentos['componentesDigitais'][0]['assinaturasDigitais'][0]; + $arrResultado['IDT'] = $parNumIdentificacaoTramite; + $arrResultado['NRE'] = $arrResultado['nre']; $objResultado = new stdClass(); - $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); - - $objMetaProcesso = $objResultado->metadados->processo; - $arrObjMetaDocumento = (array) $objMetaProcesso->documentos; - $arrObjMetaInteressado = (array) $objMetaProcesso->interessados; - $objResultado->IDT = $parNumIdentificacaoTramite; - $objResultado->metadados->NRE = $objResultado->metadados->nre; - $objResultado->metadados->processo->documento = $arrObjMetaDocumento[0]; - $objResultado->metadados->processo->interessado = $arrObjMetaInteressado; + $objResultado->NRE = $arrResultado['nre']; + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); return $objResultado; diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 9c4871a3d..c9da9befd 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -21,6 +21,7 @@ class ReceberProcedimentoRN extends InfraRN private $objSeiRN; private $objEnviarReciboTramiteRN; private $objExpedirProcedimentoRN; + private $objReceberComponenteDigitalRN; public function __construct() { @@ -334,8 +335,10 @@ private function consultarTramite($parNumIdTramite) $objTramite = $arrObjTramite[0]; - if(!is_array($objTramite->componenteDigitalPendenteDeRecebimento)){ - $objTramite->componenteDigitalPendenteDeRecebimento = array($objTramite->componenteDigitalPendenteDeRecebimento); + if(!is_array($objTramite->hashDosComponentesPendentesDeRecebimento)){ + $objTramite->componenteDigitalPendenteDeRecebimento = (array) $objTramite->hashDosComponentesPendentesDeRecebimento; + + $objTramite->hashDosComponentesPendentesDeRecebimento = (array) $objTramite->hashDosComponentesPendentesDeRecebimento; } } @@ -1054,7 +1057,7 @@ private function gerarProcedimento($objMetadadosProcedimento, $parObjProtocolo) $objProtocoloDTO->setArrObjAnexoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloAssuntoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloProtocoloDTO(array()); - $this->atribuirParticipantes($objProtocoloDTO, $parObjProtocolo->interessado); + $this->atribuirParticipantes($objProtocoloDTO, $parObjProtocolo->interessados); $strDescricao = ""; if(isset($parObjProtocolo->processoDeNegocio)){ @@ -1381,7 +1384,7 @@ private function atribuirParticipantes(ProtocoloDTO $objProtocoloDTO, $arrObjInt } if (!is_array($arrObjInteressados)) { - $arrObjInteressados = array($arrObjInteressados); + $arrObjInteressados = (array) $arrObjInteressados; } for($i=0; $i < count($arrObjInteressados); $i++){ @@ -1843,16 +1846,16 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objDocumentoDTO->setStrSinBloqueado('N'); - if (isset($objDocumento->componenteDigital)) { - $componentesDigitais = $objDocumento->componenteDigital; - } else { - $componentesDigitais[] = $objDocumento->componentesDigitais; - } + // if (isset($objDocumento->componenteDigital)) { + // $componentesDigitais = $objDocumento->componenteDigital; + // } else { + // $componentesDigitais = (array) $objDocumento->componentesDigitais; + // } //TODO: Fazer a atribuição dos componentes digitais do processo a partir desse ponto $this->atribuirComponentesDigitais( $objDocumentoDTO, - $componentesDigitais, + $objDocumento->componentesDigitais, $arrDocumentosExistentesPorHash, $parObjMetadadosProcedimento->arrHashComponenteBaixados); @@ -1928,7 +1931,10 @@ private function atribuirComponentesJaExistentesNoProcesso($objDocumentoDTO, $ob $arrObjAnexosDTO = array(); $arrObjAnexoDTO = array(); foreach ($objComponentesDigitais as $objComponenteDigital) { - + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + $strHashComponenteDigital = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); $bolComponenteDigitalBaixado = in_array($strHashComponenteDigital, $arrHashComponenteBaixados); $bolComponenteDigitalExistente = array_key_exists($strHashComponenteDigital, $arrDocumentosExistentesPorHash); @@ -2069,7 +2075,7 @@ private function atribuirComponentesDigitais(DocumentoDTO $objDocumentoDTO, $par // Atribui componentes digitais já presentes no processo e não reenviados pelo Tramita.gov.br $arrAnexo = array(); $arrAnexo = $this->atribuirComponentesJaExistentesNoProcesso( - $objDocumentoDTO, + $parObjDocumentoDTO, $parArrObjComponentesDigitais, $arrDocumentosExistentesPorHash, $arrHashComponenteBaixados @@ -2816,7 +2822,7 @@ private function criarDiretorioAnexo($parObjAnexoDTO) private function adicionarObservacoesSobreNumeroDocumento($parObjDocumento) { $arrObjObservacoes = array(); - $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor->numeroDeIdentificacao; + $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor['numeroDeIdentificacao']; if(!empty($strNumeroDocumentoOrigem)){ $objObservacaoDTO = new ObservacaoDTO(); $objObservacaoDTO->setStrDescricao("Número do Documento na Origem: " . $strNumeroDocumentoOrigem); From 9b5ff653ce2377bc976431369dfa88eabedc0365 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 6 Dec 2024 16:56:09 -0300 Subject: [PATCH 13/25] chore: adicionar camiinho absoluto para chamada do vendor dentro da class --- src/rn/ProcessoEletronicoRN.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 7416afeba..b53f55603 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -1,6 +1,7 @@ Date: Mon, 9 Dec 2024 07:47:49 -0300 Subject: [PATCH 14/25] =?UTF-8?q?feat:=20alterar=20tipagem=20de=20vari?= =?UTF-8?q?=C3=A1vel=20em=20todos=20os=20m=C3=A9todos=20=20que=20consome?= =?UTF-8?q?=20a=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ProcessoEletronicoRN.php | 86 +++++++++++++++++---------- src/rn/ReceberComponenteDigitalRN.php | 10 +++- src/rn/ReceberProcedimentoRN.php | 85 +++++++++++++++++--------- 3 files changed, 119 insertions(+), 62 deletions(-) diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index b53f55603..df373b553 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -184,7 +184,7 @@ private function getObjPenWs() public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) { $objRepositorioDTO = null; - $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; + $endpoint = 'repositorios-de-estruturas'; try { $parametros = [ 'ativo' => true @@ -193,10 +193,12 @@ public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorio if (isset($arrResultado)) { foreach ($arrResultado as $repositorio) { + if ($repositorio['id'] == $numIdentificacaoDoRepositorioDeEstruturas) { $objRepositorioDTO = new RepositorioDTO(); $objRepositorioDTO->setNumId($repositorio['id']); $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + } } } } catch (Exception $e) { @@ -1233,8 +1235,20 @@ public function solicitarMetadados($parNumIdentificacaoTramite) $objResultado = new stdClass(); $objResultado->IDT = $parNumIdentificacaoTramite; $objResultado->NRE = $arrResultado['nre']; + + $multivalorado = false; + if (count($arrResultado['processo']['documentos']) <= 1) { + $arrResultado['processo']['documentos'] = (object) $arrResultado['processo']['documentos'][0]; + } else { + $multivalorado = true; + } + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); + if ($multivalorado) { + $objResultado->metadados->processo->documentos = (array) $objResultado->metadados->processo->documentos; + } + return $objResultado; } catch (\Exception $e) { @@ -1478,6 +1492,10 @@ protected function cadastrarTramiteDeProcessoInternoControlado(ProcessoEletronic */ public static function getHashFromMetaDados($objMeta) { + if (is_array($objMeta)) { + $objMeta = (object) $objMeta; + } + $strHashConteudo = ''; if (isset($objMeta)) { @@ -1485,7 +1503,7 @@ public static function getHashFromMetaDados($objMeta) $strHashConteudo = $objMeta; } else { $matches = array(); - $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta['conteudo']; + $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta->conteudo; if (preg_match('/^(.*)<\/hash>$/', $strHashConteudo, $matches, PREG_OFFSET_CAPTURE)) { $strHashConteudo = $matches[1][0]; @@ -1612,8 +1630,8 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden $objComponenteDigitalDTO->setStrNome(utf8_decode($objComponenteDigital->nome)); if(isset($objDocumento->especie)){ - $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie['codigo'])); - $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie['nomeNoProdutor'])); + $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie->codigo)); + $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie->nomeNoProdutor)); } $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); @@ -2318,7 +2336,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair { $arrObjDocumento = array(); if(isset($parObjProtocolo->documentos)){ - $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : json_decode(json_encode($parObjProtocolo->documentos), true); + $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : array($parObjProtocolo->documentos); usort($arrObjProtocolo, array("ProcessoEletronicoRN", "comparacaoOrdemAjustadaDocumentos")); //Tratamento recursivo para processos anexados @@ -2352,13 +2370,12 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; - foreach ($arrObjDocumentoPadronizados as $documento) { - if (is_array($documento) && $documento['componentesDigitais']) { - $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); - } else { - $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + foreach ($arrObjDocumentoPadronizados as $documento) { + if (is_array($documento) && $documento['componentesDigitais']) { + $documento = (object) $documento; + } + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); } - } return $arrObjDocumentoPadronizados; } @@ -2366,11 +2383,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair public static function obterComponentesDocumentos($parObjDocumento) { - - if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { - return $parObjDocumento['componentesDigitais']; - } - + $arrObjComponenteDigital = array(); if (isset($parObjDocumento->componentesDigitais)) { $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); @@ -2430,11 +2443,11 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) * @param $parObjDocumento * @return array */ - public static function obterComponentesDigitaisDocumento($parObjDocumento) + public static function obterComponentesDigitaisDocumento($parObjDocumento) { $arrObjComponenteDigital = array(); - if (isset($parObjDocumento['componentesDigitais'])) { - $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); + if(isset($parObjDocumento->componentesDigitais)){ + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); } return $arrObjComponenteDigital; @@ -2454,9 +2467,6 @@ public static function obterComponentesDigitaisDocumento($parObjDocumento) */ public static function desmembrarProcessosAnexados($parObjProtocolo) { - if (is_array($parObjProtocolo)) { - $parObjProtocolo = (object) $parObjProtocolo; - } if(!ProcessoEletronicoRN::existeProcessoAnexado($parObjProtocolo)){ return $parObjProtocolo; @@ -2731,18 +2741,30 @@ public function listarAssociacoesDocumentos($idProcedimento) /** * Converter arrays associativo para objetos */ - public static function converterArrayParaObjeto($array) + public static function converterArrayParaObjeto($array) + { + if (is_array($array)) { + // Verificar se o array é associativo + if (self::verificarSeArrayAssociativo($array)) { + $object = new stdClass(); + foreach ($array as $key => $value) { + $object->$key = self::converterArrayParaObjeto($value); + } + return $object; + } else { + // Para arrays indexados, manter como está + return array_map([self::class, 'converterArrayParaObjeto'], $array); + } + } + + return $array; + } + + private static function verificarSeArrayAssociativo(array $array): bool { - if (is_array($array)) { - $object = new stdClass(); - foreach ($array as $key => $value) { - $object->$key = self::converterArrayParaObjeto($value); - } - return $object; + return array_keys($array) !== range(0, count($array) - 1); } - - return $array; - } + /** * Consulta as estruturas de um repositório de estruturas. diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index 70b829d87..82077f3e2 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -254,11 +254,15 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, * @return AnexoDTO * */ - public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $parObjConteudo) + public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, $parObjConteudo) { - if (!isset($parArrComponenteDigital)) { + if (!isset($parObjComponenteDigital)) { throw new InfraException("Componente Digital não informado"); } + + if (is_array($parObjComponenteDigital)) { + $parObjComponenteDigital = (object) $parObjComponenteDigital; + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; @@ -273,7 +277,7 @@ public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $objAnexoDTO->setDthInclusao(InfraData::getStrDataHoraAtual()); $objAnexoDTO->setNumTamanho(filesize(DIR_SEI_TEMP.'/'.$strNomeArquivoUpload)); $objAnexoDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); - $objAnexoDTO->setStrNome($parArrComponenteDigital['nome']); + $objAnexoDTO->setStrNome($parObjComponenteDigital->nome); return $objAnexoDTO; } diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index c9da9befd..70886f4d8 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -246,7 +246,7 @@ private function baixarComponentesDigitais($parObjTramite, $parObjMetadadosProce // pendentes de recebimento informado pelo Tramita.gov.br não está de acordo com a lista atual de arquivos // mantida pela aplicação. $arrHashComponentesProtocolo = $this->listarHashDosComponentesMetadado($objProtocolo); - $arrHashPendentesRecebimento = $parObjTramite->componenteDigitalPendenteDeRecebimento; + $arrHashPendentesRecebimento = $parObjTramite->hashDosComponentesPendentesDeRecebimento; $numQtdComponentes = count($arrHashComponentesProtocolo); $this->gravarLogDebug("$numQtdComponentes componentes digitais identificados no protocolo {$objProtocolo->protocolo}", 2); @@ -648,14 +648,19 @@ private function listarHashDosComponentesMetadado($parObjProtocolo) $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach($arrObjDocumento as $objDocumento){ //Desconsidera os componendes digitais de documentos cancelados - if(!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { - if(!isset($objDocumento['componentesDigitais'])){ - throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento['ordem']} não informado."); + if(!isset($objDocumento->retirado) || $objDocumento->retirado == false) { + if(!isset($objDocumento->componentesDigitais)){ + throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento->ordem} não informado."); } - $arrObjComponentesDigitais = is_array($objDocumento['componentesDigitais']) ? $objDocumento['componentesDigitais'] : array($objDocumento['componentesDigitais']); + $arrObjComponentesDigitais = is_array($objDocumento->componentesDigitais) ? $objDocumento->componentesDigitais : array($objDocumento->componentesDigitais); foreach ($arrObjComponentesDigitais as $objComponenteDigital) { - $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital['hash']); + + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + + $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); } } } @@ -675,8 +680,11 @@ private function listarMetaDadosComponentesDigitais($parObjProtocolo) $objMapBD = new GenericoBD($this->getObjInfraIBanco()); $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); - foreach($arrObjDocumento as $objDocumento){ - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componenteDigital->hash); + foreach($arrObjDocumento as $key => $objDocumento){ + if (is_array($objDocumento->componentesDigitais[$key])) { + $objDocumento->componentesDigitais[$key] = (object) $objDocumento->componentesDigitais[$key]; + } + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componentesDigitais[$key]->hash); $objMapDTO = new PenRelTipoDocMapRecebidoDTO(true); $objMapDTO->setNumMaxRegistrosRetorno(1); $objMapDTO->setNumCodigoEspecie($objDocumento->especie->codigo); @@ -721,25 +729,30 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac if(!isset($numIdTipoDocumentoPadrao)){ foreach($arrObjDocumentos as $objDocument){ + $especie = $objDocument->especie; + if (is_array($especie)) { + $objDocument->especie = (object) $objDocument->especie; + } + $objPenRelTipoDocMapEnviadoDTO = new PenRelTipoDocMapRecebidoDTO(); $objPenRelTipoDocMapEnviadoDTO->retTodos(); - $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument['especie']['codigo']); + $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument->especie->codigo); $objProcessoEletronicoDB = new PenRelTipoDocMapRecebidoBD(BancoSEI::getInstance()); $numContador = (int)$objProcessoEletronicoDB->contar($objPenRelTipoDocMapEnviadoDTO); // Não achou, ou seja, não esta cadastrado na tabela, então não é aceito nesta unidade como válido if($numContador <= 0) { - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument['especie']['nomeNoProdutor'])), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); - throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument['especie']['nomeNoProdutor'], ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument->especie->nomeNoProdutor)), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); + throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument->especie->nomeNoProdutor, ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); } } } //Não valida informações do componente digital caso o documento esteja cancelado foreach ($arrObjDocumentos as $objDocumento) { - if (!isset($objDocument['retirado']) || $objDocumento['retirado'] === false) { - foreach ($objDocumento['componentesDigitais'] as $objComponenteDigital) { + if (!isset($objDocumento->retirado) || $objDocumento->retirado === false) { + foreach ($objDocumento->componentesDigitais as $objComponenteDigital) { $this->validaTamanhoComponenteDigital($objComponenteDigital); } } @@ -748,7 +761,11 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac private function validaTamanhoComponenteDigital($objComponenteDigital) { - if (is_null($objComponenteDigital['tamanhoEmBytes']) || $objComponenteDigital['tamanhoEmBytes'] == 0){ + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + + if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); } } @@ -1717,7 +1734,7 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objSerieDTO = $this->obterSerieMapeada($objDocumento); if ($objSerieDTO==null){ - throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie['codigo'].'] não encontrado.'); + throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie->codigo.'] não encontrado.'); } if (InfraString::isBolVazia($objDocumento->dataHoraDeProducao)) { @@ -2293,7 +2310,7 @@ private function obterUnidadeMapeada($numIdentificacaoDaEstrutura) private function obterSerieMapeada($documento) { $bolPossuiDocumentoReferenciado = isset($documento->ordemDoDocumentoReferenciado); - $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie['codigo']) : self::NUM_ESPECIE_PEN_ANEXO; + $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie->codigo) : self::NUM_ESPECIE_PEN_ANEXO; return $this->objPenRelTipoDocMapRecebidoRN->obterSerieMapeada($numCodigoEspecie); } @@ -2537,12 +2554,16 @@ public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProtoco $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); foreach($arrDocumentos as $objDocumento){ - if (!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { - $arrComponentesDigitais = $objDocumento['componentesDigitais']; + if (!isset($objDocumento->retirado) || $objDocumento->retirado == false) { + $arrComponentesDigitais = $objDocumento->componentesDigitais; foreach ($arrComponentesDigitais as $componenteDigital) { + + if (is_array($componenteDigital)) { + $componenteDigital = (object) $componenteDigital; + } //Busca o nome do documento - $nomeDocumento = $componenteDigital['nome']; + $nomeDocumento = $componenteDigital->nome; //Busca pela extensão do documento $arrNomeDocumento = explode('.', $nomeDocumento); @@ -2657,9 +2678,14 @@ private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parCom //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente foreach ($arrObjDocumentos as $objDocumento) { $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); - foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { - if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { - $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; + foreach ($arrObjComponentesDigitais as $objComponentesDigital) { + + if (is_array($objComponentesDigital)) { + $objComponentesDigital = (object) $objComponentesDigital; + } + + if (ProcessoEletronicoRN::getHashFromMetaDados($objComponentesDigital->hash) == $parComponentePendente) { + $tamanhoComponentePendende = $objComponentesDigital->tamanhoEmBytes; break; } } @@ -2733,11 +2759,16 @@ private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) $resultado = array(); $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach ($arrObjDocumentos as $arrDocumento) { - if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ - $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); + if(isset($arrDocumento->componentesDigitais) && !is_array($arrDocumento->componentesDigitais)){ + $arrDocumento->componentesDigitais = array($arrDocumento->componentesDigitais); } - foreach ($arrDocumento['componentesDigitais'] as $objComponente) { - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); + foreach ($arrDocumento->componentesDigitais as $objComponente) { + + if (is_array($objComponente)) { + $objComponente = (object) $objComponente; + } + + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente->hash); $resultado[$strHash] = $objComponente; } } @@ -2822,7 +2853,7 @@ private function criarDiretorioAnexo($parObjAnexoDTO) private function adicionarObservacoesSobreNumeroDocumento($parObjDocumento) { $arrObjObservacoes = array(); - $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor['numeroDeIdentificacao']; + $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor->numeroDeIdentificacao; if(!empty($strNumeroDocumentoOrigem)){ $objObservacaoDTO = new ObservacaoDTO(); $objObservacaoDTO->setStrDescricao("Número do Documento na Origem: " . $strNumeroDocumentoOrigem); From 8f0ba8313f56017ef884947d5d39badbe34e4f93 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Tue, 10 Dec 2024 14:51:41 -0300 Subject: [PATCH 15/25] fix: alterar nome historico no recebimento para teste funcional --- src/rn/ExpedirProcedimentoRN.php | 2 +- src/rn/ProcessoEletronicoRN.php | 32 ++--- src/rn/ReceberProcedimentoRN.php | 7 - tests_sei4/funcional/bootstrap.php | 2 + ...ontendoDocumentoBeSimpleCorrompidoTest.php | 132 ------------------ tests_sei41/funcional/bootstrap.php | 2 + ...ontendoDocumentoBeSimpleCorrompidoTest.php | 132 ------------------ tests_super/funcional/bootstrap.php | 2 + ...ontendoDocumentoBeSimpleCorrompidoTest.php | 132 ------------------ 9 files changed, 18 insertions(+), 425 deletions(-) delete mode 100755 tests_sei4/funcional/tests/TramiteProcessoContendoDocumentoBeSimpleCorrompidoTest.php delete mode 100755 tests_sei41/funcional/tests/TramiteProcessoContendoDocumentoBeSimpleCorrompidoTest.php delete mode 100755 tests_super/funcional/tests/TramiteProcessoContendoDocumentoBeSimpleCorrompidoTest.php diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index c2832a8ed..47a82575c 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -571,7 +571,7 @@ private function atribuirDadosHistoricoREST($objProcesso, $dblIdProcedimento) return $dt1 > $dt2; }); - $objProcesso['historico'] = $arrObjOperacao; + $objProcesso['itensHistorico'] = $arrObjOperacao; return $objProcesso; } diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index df373b553..fdab8a73f 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -926,13 +926,7 @@ public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $id $atribuirInformacoes = $this->atribuirInformacoesAssuntoREST($cabecalho, $dblIdProcedimento); $atribuirInfoModulo = $this->atribuirInformacoesModuloREST($cabecalho); - if (!empty($atribuirInformacoes)) { - $cabecalho = $atribuirInformacoes; - } - - if (!empty($atribuirInfoModulo)) { - $cabecalho = $atribuirInfoModulo; - } + $cabecalho['propriedadesAdicionais'] = array_merge($atribuirInformacoes, $atribuirInfoModulo); return $cabecalho; } @@ -940,16 +934,18 @@ public function construirCabecalho($strNumeroRegistro, $idRepositorioOrigem, $id private function atribuirInformacoesModuloREST($objCabecalho) { try{ + $arrInformacoeesModulo = []; $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); - $objCabecalho['propriedadesAdicionais'][] = [ + + $arrInformacoeesModulo[] = [ 'chave' => 'MODULO_PEN_VERSAO', 'valor' => $objInfraParametro->getValor('VERSAO_MODULO_PEN') ]; - return $objCabecalho; + return $arrInformacoeesModulo; }catch(Exception $e){ - + $mensagem = "Erro ao obter versão do módulo PEN"; throw new InfraException($mensagem, $e); } } @@ -1054,8 +1050,7 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment $contagem++; } - $objCabecalho['propriedadesAdicionais'][] = $arrDadosAssunto; - return $objCabecalho; + return $arrDadosAssunto; }catch(Exception $e){ $mensagem = "Falha ao atribuir informações de assunto"; @@ -1741,9 +1736,9 @@ public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = if (isset($arrResultado['tramites']) && !empty($arrResultado['tramites'][0])) { - $historico = []; + $itensHistorico = []; foreach ($arrResultado['tramites'][0]['mudancasDeSituacao'] as $mudancaDeSituacao) { - $historico['operacao'][] = $mudancaDeSituacao; + $itensHistorico['operacao'][] = $mudancaDeSituacao; } $arrResultado['tramites'][0] = array_filter($arrResultado['tramites'][0], function($value) { @@ -1751,7 +1746,7 @@ public function consultarTramites($parNumIdTramite = null, $parNumeroRegistro = }); $arrObjTramite[] = $this->converterArrayParaObjeto($arrResultado['tramites'][0]); - $arrObjTramite[0]->historico = (object) $historico; + $arrObjTramite[0]->itensHistorico = (object) $itensHistorico; } @@ -2558,15 +2553,10 @@ public static function obterTamanhoBlocoTransferencia(){ */ private static function documentoFoiAnexado($parObjProtocolo, $parObjDocumento) { - return ( isset($parObjDocumento->protocoloDoProcessoAnexado) && !empty($parObjDocumento->protocoloDoProcessoAnexado) && - ( - is_array($parObjProtocolo) - ? $parObjProtocolo['protocolo'] != $parObjDocumento->protocoloDoProcessoAnexado - : (is_object($parObjProtocolo) && $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado) - ) + $parObjProtocolo->protocolo != $parObjDocumento->protocoloDoProcessoAnexado ); } diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 70886f4d8..74a3d57ad 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -1862,13 +1862,6 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objDocumentoDTO->getObjProtocoloDTO()->setNumIdUnidadeGeradora(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objDocumentoDTO->setStrSinBloqueado('N'); - - // if (isset($objDocumento->componenteDigital)) { - // $componentesDigitais = $objDocumento->componenteDigital; - // } else { - // $componentesDigitais = (array) $objDocumento->componentesDigitais; - // } - //TODO: Fazer a atribuição dos componentes digitais do processo a partir desse ponto $this->atribuirComponentesDigitais( $objDocumentoDTO, diff --git a/tests_sei4/funcional/bootstrap.php b/tests_sei4/funcional/bootstrap.php index 2d202ecd5..9cb5fdddb 100755 --- a/tests_sei4/funcional/bootstrap.php +++ b/tests_sei4/funcional/bootstrap.php @@ -1,6 +1,8 @@ setSeleniumServerRequestsTimeout(6000); - - // Configuração do dados para teste do cenário - self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); - self::$processoTeste = $this->gerarDadosProcessoTeste(self::$remetente); - self::$documentoTeste = $this->gerarDadosDocumentoExternoTeste(self::$remetente, 'arquivo_corrompimento_besimplesoap.pdf'); - - // Cadastrar novo processo de teste - $objProtocoloDTO = $this->cadastrarProcessoFixture(self::$processoTeste); - $this->cadastrarDocumentoExternoFixture(self::$documentoTeste, $objProtocoloDTO->getDblIdProtocolo()); - self::$protocoloTeste = $objProtocoloDTO->getStrProtocoloFormatado(); - - - // Acessar sistema do this->REMETENTE do processo - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // Trâmitar Externamento processo para órgão/unidade destinatária - $this->tramitarProcessoExternamente( - self::$protocoloTeste, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], - self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false, null, PEN_WAIT_TIMEOUT_ARQUIVOS_GRANDES); - } - - - /** - * Teste de verificação do correto envio do processo no sistema remetente - * - * @group verificacao_envio - * @large - * - * @depends test_tramitar_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_origem_processo_contendo_documento_besimple() - { - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // 6 - Verificar se situação atual do processo está como bloqueado - $this->waitUntil(function($testCase) use (&$orgaosDiferentes) { - sleep(5); - $testCase->refresh(); - $paginaProcesso = new PaginaProcesso($testCase); - $testCase->assertStringNotContainsString(mb_convert_encoding("Processo em trâmite externo para ", 'UTF-8', 'ISO-8859-1'), $paginaProcesso->informacao()); - $testCase->assertFalse($paginaProcesso->processoAberto()); - $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); - return true; - }, PEN_WAIT_TIMEOUT); - - // 7 - Validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) - $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); - $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTeste, $unidade); - $this->validarRecibosTramite($mensagemRecibo, true, true); - - // 8 - Validar histórico de trâmite do processo - $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); - - // 9 - Verificar se processo está na lista de Processos Tramitados Externamente - $this->validarProcessosTramitados(self::$protocoloTeste, $orgaosDiferentes); - } - - - /** - * Teste de verificação do correto recebimento do processo contendo apenas um documento interno (gerado) - * - * @group verificacao_recebimento - * @large - * - * @depends test_verificar_origem_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_destino_processo_contendo_documento_besimple() - { - $strProtocoloTeste = self::$protocoloTeste; - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$destinatario['URL'], self::$destinatario['SIGLA_UNIDADE'], self::$destinatario['LOGIN'], self::$destinatario['SENHA']); - - // 11 - Abrir protocolo na tela de controle de processos - $this->abrirProcesso(self::$protocoloTeste); - $listaDocumentos = $this->paginaProcesso->listarDocumentos(); - - // 12 - Validar dados do processo - $strTipoProcesso = mb_convert_encoding("Tipo de processo no órgão de origem: ", 'UTF-8', 'ISO-8859-1'); - $strTipoProcesso .= self::$processoTeste['TIPO_PROCESSO']; - self::$processoTeste['OBSERVACOES'] = $orgaosDiferentes ? $strTipoProcesso : null; - $this->validarDadosProcesso(self::$processoTeste['DESCRICAO'], self::$processoTeste['RESTRICAO'], self::$processoTeste['OBSERVACOES'], array(self::$processoTeste['INTERESSADOS'])); - - // 13 - Verificar recibos de trâmite - $this->validarRecibosTramite("Recebimento do Processo $strProtocoloTeste", false, true); - - // 14 - Validar dados do documento - $this->assertTrue(count($listaDocumentos) == 1); - $this->validarDadosDocumento($listaDocumentos[0], self::$documentoTeste, self::$destinatario); - } -} diff --git a/tests_sei41/funcional/bootstrap.php b/tests_sei41/funcional/bootstrap.php index 159d03b50..df4d2e17e 100755 --- a/tests_sei41/funcional/bootstrap.php +++ b/tests_sei41/funcional/bootstrap.php @@ -1,6 +1,8 @@ setSeleniumServerRequestsTimeout(6000); - - // Configuração do dados para teste do cenário - self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); - self::$processoTeste = $this->gerarDadosProcessoTeste(self::$remetente); - self::$documentoTeste = $this->gerarDadosDocumentoExternoTeste(self::$remetente, 'arquivo_corrompimento_besimplesoap.pdf'); - - // Cadastrar novo processo de teste - $objProtocoloDTO = $this->cadastrarProcessoFixture(self::$processoTeste); - $this->cadastrarDocumentoExternoFixture(self::$documentoTeste, $objProtocoloDTO->getDblIdProtocolo()); - self::$protocoloTeste = $objProtocoloDTO->getStrProtocoloFormatado(); - - - // Acessar sistema do this->REMETENTE do processo - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // Trâmitar Externamento processo para órgão/unidade destinatária - $this->tramitarProcessoExternamente( - self::$protocoloTeste, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], - self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false, null, PEN_WAIT_TIMEOUT_ARQUIVOS_GRANDES); - } - - - /** - * Teste de verificação do correto envio do processo no sistema remetente - * - * @group verificacao_envio - * @large - * - * @depends test_tramitar_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_origem_processo_contendo_documento_besimple() - { - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // 6 - Verificar se situação atual do processo está como bloqueado - $this->waitUntil(function($testCase) use (&$orgaosDiferentes) { - sleep(5); - $testCase->refresh(); - $paginaProcesso = new PaginaProcesso($testCase); - $testCase->assertStringNotContainsString(mb_convert_encoding("Processo em trâmite externo para ", 'UTF-8', 'ISO-8859-1'), $paginaProcesso->informacao()); - $testCase->assertFalse($paginaProcesso->processoAberto()); - $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); - return true; - }, PEN_WAIT_TIMEOUT); - - // 7 - Validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) - $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); - $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTeste, $unidade); - $this->validarRecibosTramite($mensagemRecibo, true, true); - - // 8 - Validar histórico de trâmite do processo - $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); - - // 9 - Verificar se processo está na lista de Processos Tramitados Externamente - $this->validarProcessosTramitados(self::$protocoloTeste, $orgaosDiferentes); - } - - - /** - * Teste de verificação do correto recebimento do processo contendo apenas um documento interno (gerado) - * - * @group verificacao_recebimento - * @large - * - * @depends test_verificar_origem_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_destino_processo_contendo_documento_besimple() - { - $strProtocoloTeste = self::$protocoloTeste; - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$destinatario['URL'], self::$destinatario['SIGLA_UNIDADE'], self::$destinatario['LOGIN'], self::$destinatario['SENHA']); - - // 11 - Abrir protocolo na tela de controle de processos - $this->abrirProcesso(self::$protocoloTeste); - $listaDocumentos = $this->paginaProcesso->listarDocumentos(); - - // 12 - Validar dados do processo - $strTipoProcesso = mb_convert_encoding("Tipo de processo no órgão de origem: ", 'UTF-8', 'ISO-8859-1'); - $strTipoProcesso .= self::$processoTeste['TIPO_PROCESSO']; - self::$processoTeste['OBSERVACOES'] = $orgaosDiferentes ? $strTipoProcesso : null; - $this->validarDadosProcesso(self::$processoTeste['DESCRICAO'], self::$processoTeste['RESTRICAO'], self::$processoTeste['OBSERVACOES'], array(self::$processoTeste['INTERESSADOS'])); - - // 13 - Verificar recibos de trâmite - $this->validarRecibosTramite("Recebimento do Processo $strProtocoloTeste", false, true); - - // 14 - Validar dados do documento - $this->assertTrue(count($listaDocumentos) == 1); - $this->validarDadosDocumento($listaDocumentos[0], self::$documentoTeste, self::$destinatario); - } -} diff --git a/tests_super/funcional/bootstrap.php b/tests_super/funcional/bootstrap.php index 9bb6edcd3..68d9b9bd4 100755 --- a/tests_super/funcional/bootstrap.php +++ b/tests_super/funcional/bootstrap.php @@ -1,6 +1,8 @@ setSeleniumServerRequestsTimeout(6000); - - // Configuração do dados para teste do cenário - self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); - self::$processoTeste = $this->gerarDadosProcessoTeste(self::$remetente); - self::$documentoTeste = $this->gerarDadosDocumentoExternoTeste(self::$remetente, 'arquivo_corrompimento_besimplesoap.pdf'); - - // Cadastrar novo processo de teste - $objProtocoloDTO = $this->cadastrarProcessoFixture(self::$processoTeste); - $this->cadastrarDocumentoExternoFixture(self::$documentoTeste, $objProtocoloDTO->getDblIdProtocolo()); - self::$protocoloTeste = $objProtocoloDTO->getStrProtocoloFormatado(); - - - // Acessar sistema do this->REMETENTE do processo - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // Trâmitar Externamento processo para órgão/unidade destinatária - $this->tramitarProcessoExternamente( - self::$protocoloTeste, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], - self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false, null, PEN_WAIT_TIMEOUT_ARQUIVOS_GRANDES); - } - - - /** - * Teste de verificação do correto envio do processo no sistema remetente - * - * @group verificacao_envio - * @large - * - * @depends test_tramitar_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_origem_processo_contendo_documento_besimple() - { - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); - - $this->abrirProcesso(self::$protocoloTeste); - - // 6 - Verificar se situação atual do processo está como bloqueado - $this->waitUntil(function($testCase) use (&$orgaosDiferentes) { - sleep(5); - $testCase->refresh(); - $paginaProcesso = new PaginaProcesso($testCase); - $testCase->assertStringNotContainsString(mb_convert_encoding("Processo em trâmite externo para ", 'UTF-8', 'ISO-8859-1'), $paginaProcesso->informacao()); - $testCase->assertFalse($paginaProcesso->processoAberto()); - $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); - return true; - }, PEN_WAIT_TIMEOUT); - - // 7 - Validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) - $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); - $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTeste, $unidade); - $this->validarRecibosTramite($mensagemRecibo, true, true); - - // 8 - Validar histórico de trâmite do processo - $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); - - // 9 - Verificar se processo está na lista de Processos Tramitados Externamente - $this->validarProcessosTramitados(self::$protocoloTeste, $orgaosDiferentes); - } - - - /** - * Teste de verificação do correto recebimento do processo contendo apenas um documento interno (gerado) - * - * @group verificacao_recebimento - * @large - * - * @depends test_verificar_origem_processo_contendo_documento_besimple - * - * @return void - */ - public function test_verificar_destino_processo_contendo_documento_besimple() - { - $strProtocoloTeste = self::$protocoloTeste; - $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; - - $this->acessarSistema(self::$destinatario['URL'], self::$destinatario['SIGLA_UNIDADE'], self::$destinatario['LOGIN'], self::$destinatario['SENHA']); - - // 11 - Abrir protocolo na tela de controle de processos - $this->abrirProcesso(self::$protocoloTeste); - $listaDocumentos = $this->paginaProcesso->listarDocumentos(); - - // 12 - Validar dados do processo - $strTipoProcesso = mb_convert_encoding("Tipo de processo no órgão de origem: ", 'UTF-8', 'ISO-8859-1'); - $strTipoProcesso .= self::$processoTeste['TIPO_PROCESSO']; - self::$processoTeste['OBSERVACOES'] = $orgaosDiferentes ? $strTipoProcesso : null; - $this->validarDadosProcesso(self::$processoTeste['DESCRICAO'], self::$processoTeste['RESTRICAO'], self::$processoTeste['OBSERVACOES'], array(self::$processoTeste['INTERESSADOS'])); - - // 13 - Verificar recibos de trâmite - $this->validarRecibosTramite("Recebimento do Processo $strProtocoloTeste", false, true); - - // 14 - Validar dados do documento - $this->assertTrue(count($listaDocumentos) == 1); - $this->validarDadosDocumento($listaDocumentos[0], self::$documentoTeste, self::$destinatario); - } -} From 72e9262c61b248fa77ba387ad5488f9a70b7e95e Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 13 Dec 2024 05:13:03 -0300 Subject: [PATCH 16/25] =?UTF-8?q?fix:=20corre=C3=A7=C3=B5es=20testes=20aut?= =?UTF-8?q?omatizados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/EnviarReciboTramiteRN.php | 8 ++++---- src/rn/ProcessoEletronicoRN.php | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/rn/EnviarReciboTramiteRN.php b/src/rn/EnviarReciboTramiteRN.php index 1e927ca56..7d4ad46b6 100755 --- a/src/rn/EnviarReciboTramiteRN.php +++ b/src/rn/EnviarReciboTramiteRN.php @@ -37,7 +37,7 @@ protected function gerarReciboTramite($numIdTramite){ $objMetaProcesso = $objMetaRetorno->metadados->processo; - $arrObjMetaDocumento = is_array($objMetaProcesso->documento) ? $objMetaProcesso->documento : array($objMetaProcesso->documento); + $arrObjMetaDocumento = is_array($objMetaProcesso->documentos) ? $objMetaProcesso->documentos : array($objMetaProcesso->documentos); $objDTO = new ComponenteDigitalDTO(); $objBD = new ComponenteDigitalBD($this->inicializarObjInfraIBanco()); @@ -152,11 +152,11 @@ private function obterDataRecebimentoComponentesDigitais($parObjTramite){ throw new InfraException('Parâmetro $parObjTramite não informado.'); } - if(!is_array($parObjTramite->historico->operacao)) { - $parObjTramite->historico->operacao = array($parObjTramite->historico->operacao); + if(!is_array($parObjTramite->itensHistorico->operacao)) { + $parObjTramite->itensHistorico->operacao = array($parObjTramite->itensHistorico->operacao); } - foreach ($parObjTramite->historico->operacao as $operacao) { + foreach ($parObjTramite->itensHistorico->operacao as $operacao) { if($operacao['situacao'] == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_COMPONENTES_RECEBIDOS_DESTINATARIO) { return ProcessoEletronicoRN::converterDataSEI($operacao['dataHora']); } diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index fdab8a73f..54a7576c5 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -2336,7 +2336,9 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair //Tratamento recursivo para processos anexados foreach ($arrObjProtocolo as $objProtocolo) { - $objProtocolo = (object) $objProtocolo; + if (is_array(($objProtocolo))) { + $objProtocolo = (object) $objProtocolo; + } $bolEhProcessoAnexado = $objProtocolo->staTipoProtocolo == ProcessoEletronicoRN::$STA_TIPO_PROTOCOLO_PROCESSO; if($parBolExtrairAnexados && $bolEhProcessoAnexado){ $arrProtocolosAnexados = ProcessoEletronicoRN::obterDocumentosProtocolo($objProtocolo, $parBolExtrairAnexados); @@ -2381,12 +2383,12 @@ public static function obterComponentesDocumentos($parObjDocumento) $arrObjComponenteDigital = array(); if (isset($parObjDocumento->componentesDigitais)) { - $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); - usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } - - return $arrObjComponenteDigital; - } + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); + usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); + } + + return $arrObjComponenteDigital; + } /** * Retorna a referência para o processo ou documento avulso @@ -2469,7 +2471,7 @@ public static function desmembrarProcessosAnexados($parObjProtocolo) $arrObjRefProcessosAnexados = array(); $objProcessoPrincipal = clone $parObjProtocolo; - $objProcessoPrincipal->documento = array(); + $objProcessoPrincipal->documentos = array(); $arrObjDocumentosOrdenados = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); usort($arrObjDocumentosOrdenados, array("ProcessoEletronicoRN", "comparacaoOrdemDocumentos")); From 8ab6cee1b3aa240ae5ba236dde8738cefad052d8 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Wed, 18 Dec 2024 08:00:08 -0300 Subject: [PATCH 17/25] =?UTF-8?q?fix:=20Adicionar=20corre=C3=A7=C3=A3o=20d?= =?UTF-8?q?ocumento=20cancelado,=20vers=C3=B5es=20SEI:=204.1.1=20e=204.1.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- src/rn/ExpedirProcedimentoRN.php | 26 +++++++++++-------- src/rn/ProcessoEletronicoRN.php | 6 +++-- .../funcional/tests/CenarioBaseTestCase.php | 1 - .../funcional/tests/CenarioBaseTestCase.php | 1 - .../funcional/tests/CenarioBaseTestCase.php | 1 - 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 00f257ac2..50032fe69 100755 --- a/Makefile +++ b/Makefile @@ -192,7 +192,7 @@ down: .env # make teste=TramiteProcessoComDevolucaoTest test-functional test-functional: .env $(FILE_VENDOR_FUNCIONAL) up vendor - $(CMD_COMPOSE_FUNC) run --rm php-test-functional /tests/vendor/bin/phpunit -c /tests/phpunit.xml /tests/tests/$(addsuffix .php,$(teste)) ; + $(CMD_COMPOSE_FUNC) run --rm php-test-functional /tests/vendor/bin/phpunit -c /tests/phpunit.xml $(textdox) /tests/tests/$(addsuffix .php,$(teste)) ; test-functional-parallel: .env $(FILE_VENDOR_FUNCIONAL) up diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index 47a82575c..395448b87 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -397,7 +397,7 @@ private function obterTamanhoTotalDaBarraDeProgressoREST($parObjProcesso) { $arrHashIndexados = array(); foreach ($parObjProcesso['documentos'] as $objDoc) { - $arrComponentesDigitais = is_array($objDoc['componentesDigitais']) ? $objDoc['componentesDigitais'] : array($objDoc['componentesDigitais']); + $arrComponentesDigitais = is_array($objDoc['componentesDigitais']) ? $objDoc['componentesDigitais'] : array($objDoc['componentesDigitais']); foreach ($arrComponentesDigitais as $objComponenteDigital) { $strHashComponente = ProcessoEletronicoRN::getHashFromMetaDadosREST($objComponenteDigital['hash']); if(!in_array($strHashComponente, $arrHashIndexados)){ @@ -960,24 +960,28 @@ private function atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parOb $arrobjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); $componenteDigital = $arrobjComponenteDigitalDTO[0]; + $componetesDigitais = []; + $documento['componentesDigitais'] = []; // Inicializando 'componentesDigitais' como um array - $documento['componentesDigitais']['ordem'] = 1; - $documento['componentesDigitais']['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); - $documento['componentesDigitais']['hash'] = [ + $componetesDigitais['ordem'] = 1; + $componetesDigitais['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); + $componetesDigitais['hash'] = [ 'algoritmo' => $componenteDigital->getStrAlgoritmoHash(), 'conteudo' => $componenteDigital->getStrHashConteudo() ]; - $documento['componentesDigitais']['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); - $documento['componentesDigitais']['mimeType'] = $componenteDigital->getStrMimeType(); - $documento['componentesDigitais']['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); - $documento['componentesDigitais']['idAnexo'] = $componenteDigital->getNumIdAnexo(); - $documento['componentesDigitais'] = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); - + $componetesDigitais['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); + $componetesDigitais['mimeType'] = $componenteDigital->getStrMimeType(); + $componetesDigitais['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); + $componetesDigitais['idAnexo'] = $componenteDigital->getNumIdAnexo(); if($componenteDigital->getStrMimeType() == 'outro'){ - $documento['componentesDigitais']['dadosComplementaresDoTipoDeArquivo'] = 'outro'; + $componetesDigitais['dadosComplementaresDoTipoDeArquivo'] = 'outro'; } + + $documento['componentesDigitais'][] = $componetesDigitais; + $componetesDigitais = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); + }else{ $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); } diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 54a7576c5..97bbd4a71 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -133,7 +133,7 @@ public function __construct() $this->strClientGuzzle = new Client([ 'base_uri' => $this->strBaseUri, - 'timeout' => 5.0, + 'timeout' => 10, 'headers' => $this->arrheaders, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); @@ -802,9 +802,11 @@ public function consultarEspeciesDocumentais() return $arrEspecies; } + public function enviarProcessoREST($parametros) { $endpoint = "tramites/processo"; + try { $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); @@ -1040,7 +1042,7 @@ private function atribuirInformacoesAssuntoREST($objCabecalho, $dblIdProcediment ]; $valorInput = $infoAssunto->getStrObservacao() ? - utf8_encode($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000)) + mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto(htmlspecialchars($infoAssunto->getStrObservacao(), ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE, 'ISO-8859-1'), 10000), 'UTF-8', 'ISO-8859-1') : "NA"; $arrDadosAssunto[] = [ 'chave' => 'CLASSIFICACAO_Observacao_' . $contagem, diff --git a/tests_sei4/funcional/tests/CenarioBaseTestCase.php b/tests_sei4/funcional/tests/CenarioBaseTestCase.php index c9d4026fc..a9f22ee13 100755 --- a/tests_sei4/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei4/funcional/tests/CenarioBaseTestCase.php @@ -501,7 +501,6 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti // Verifica se documento possui marcação de documento anexado $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); - $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { diff --git a/tests_sei41/funcional/tests/CenarioBaseTestCase.php b/tests_sei41/funcional/tests/CenarioBaseTestCase.php index 241afa5d0..81f23c539 100755 --- a/tests_sei41/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei41/funcional/tests/CenarioBaseTestCase.php @@ -503,7 +503,6 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti // Verifica se documento possui marcação de documento anexado $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); - $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { diff --git a/tests_super/funcional/tests/CenarioBaseTestCase.php b/tests_super/funcional/tests/CenarioBaseTestCase.php index 6da11d142..4370fe59c 100755 --- a/tests_super/funcional/tests/CenarioBaseTestCase.php +++ b/tests_super/funcional/tests/CenarioBaseTestCase.php @@ -549,7 +549,6 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti // Verifica se documento possui marcação de documento anexado $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); - $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { From 96895f5f404f2d7da74df1adafb63afc56639ebf Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Fri, 20 Dec 2024 08:50:18 -0300 Subject: [PATCH 18/25] =?UTF-8?q?chore:=20aumentar=20timeout=20e=20remover?= =?UTF-8?q?=20n=C3=BAmero=20m=C3=A1gico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rn/ExpedirProcedimentoRN.php | 22 +++++++++++----------- src/rn/ProcessoEletronicoRN.php | 10 ++++------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index 395448b87..3c1bb807b 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -960,27 +960,27 @@ private function atribuirDocumentosREST($objProcesso, $dblIdProcedimento, $parOb $arrobjComponenteDigitalDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); $componenteDigital = $arrobjComponenteDigitalDTO[0]; - $componetesDigitais = []; + $arrComponentesDigitais = []; $documento['componentesDigitais'] = []; // Inicializando 'componentesDigitais' como um array - $componetesDigitais['ordem'] = 1; - $componetesDigitais['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); - $componetesDigitais['hash'] = [ + $arrComponentesDigitais['ordem'] = 1; + $arrComponentesDigitais['nome'] = mb_convert_encoding($componenteDigital->getStrNome(), 'UTF-8', 'ISO-8859-1'); + $arrComponentesDigitais['hash'] = [ 'algoritmo' => $componenteDigital->getStrAlgoritmoHash(), 'conteudo' => $componenteDigital->getStrHashConteudo() ]; - $componetesDigitais['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); - $componetesDigitais['mimeType'] = $componenteDigital->getStrMimeType(); - $componetesDigitais['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); - $componetesDigitais['idAnexo'] = $componenteDigital->getNumIdAnexo(); + $arrComponentesDigitais['tamanhoEmBytes'] = $componenteDigital->getNumTamanho(); + $arrComponentesDigitais['mimeType'] = $componenteDigital->getStrMimeType(); + $arrComponentesDigitais['tipoDeConteudo'] = $componenteDigital->getStrTipoConteudo(); + $arrComponentesDigitais['idAnexo'] = $componenteDigital->getNumIdAnexo(); if($componenteDigital->getStrMimeType() == 'outro'){ - $componetesDigitais['dadosComplementaresDoTipoDeArquivo'] = 'outro'; + $arrComponentesDigitais['dadosComplementaresDoTipoDeArquivo'] = 'outro'; } - $documento['componentesDigitais'][] = $componetesDigitais; - $componetesDigitais = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); + $documento['componentesDigitais'][] = $arrComponentesDigitais; + $arrComponentesDigitais = $this->atribuirDadosAssinaturaDigitalREST($documentoDTO, $documento['componentesDigitais'], $componenteDigital->getStrHashConteudo()); }else{ $documento = $this->atribuirComponentesDigitaisREST($documento, $documentoDTO, $dblIdProcedimento); diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 97bbd4a71..b709b3397 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -133,7 +133,7 @@ public function __construct() $this->strClientGuzzle = new Client([ 'base_uri' => $this->strBaseUri, - 'timeout' => 10, + 'timeout' => self::WS_TIMEOUT_CONEXAO, 'headers' => $this->arrheaders, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); @@ -802,11 +802,9 @@ public function consultarEspeciesDocumentais() return $arrEspecies; } - public function enviarProcessoREST($parametros) { $endpoint = "tramites/processo"; - try { $arrResultado = $this->post($endpoint, $parametros['novoTramiteDeProcesso']); @@ -1092,7 +1090,7 @@ public function enviarComponenteDigital($parametros) $strClientGuzzle = new GuzzleHttp\Client([ 'base_uri' => $strBaseUri, 'headers' => $arrheaders, - 'timeout' => 5.0, + 'timeout' => self::WS_TIMEOUT_CONEXAO, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); @@ -1144,7 +1142,7 @@ public function enviarParteDeComponenteDigital($parametros) 'protocolo' => $protocolo ]; - $endpoint = "/interoperabilidade/rest/v3/tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar/partes/{$parte}"; $objConfiguracaoModPEN = ConfiguracaoModPEN::getInstance(); $strLocalizacaoCertificadoDigital = $objConfiguracaoModPEN->getValor("PEN", "LocalizacaoCertificado"); @@ -1160,7 +1158,7 @@ public function enviarParteDeComponenteDigital($parametros) $strClientGuzzle = new GuzzleHttp\Client([ 'base_uri' => $strBaseUri, 'headers' => $arrheaders, - 'timeout' => 5.0, + 'timeout' => self::WS_TIMEOUT_CONEXAO, 'cert' => [$strLocalizacaoCertificadoDigital, $strSenhaCertificadoDigital], ]); From 6c2fed9c352e62f4dae5a26dd51c65dc551f5672 Mon Sep 17 00:00:00 2001 From: Mauro Costa <83025710+Mauro1706@users.noreply.github.com> Date: Thu, 7 Nov 2024 12:19:07 -0300 Subject: [PATCH 19/25] =?UTF-8?q?fix:=20corre=C3=A7=C3=A3o=20para=20campo?= =?UTF-8?q?=20de=20unidade=20em=20restri=C3=A7=C3=A3o=20de=20envio=20(#704?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Campo de id da unidade do Tramita deve receber null quando o mapeamento for apenas para estruturas --- src/scripts/sei_atualizar_versao_modulo_pen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/sei_atualizar_versao_modulo_pen.php b/src/scripts/sei_atualizar_versao_modulo_pen.php index bab41c2a9..550a95c0b 100755 --- a/src/scripts/sei_atualizar_versao_modulo_pen.php +++ b/src/scripts/sei_atualizar_versao_modulo_pen.php @@ -2813,7 +2813,7 @@ protected function instalarV3070() 'id_unidade_rh' => array($objMetaRestricaoBD->tipoNumeroGrande(), PenMetaBD::NNULLO), 'id_unidade_restricao' => array($objMetaRestricaoBD->tipoNumeroGrande(), PenMetaBD::NNULLO), 'nome_unidade_restricao' => array($objMetaRestricaoBD->tipoTextoVariavel(255), $SNULLO), - 'id_unidade_rh_restricao' => array($objMetaRestricaoBD->tipoNumeroGrande(), PenMetaBD::NNULLO), + 'id_unidade_rh_restricao' => array($objMetaRestricaoBD->tipoNumeroGrande(), $SNULLO), 'nome_unidade_rh_restricao' => array($objMetaRestricaoBD->tipoTextoVariavel(255), $SNULLO), ), 'pk' => array('cols' => array('id')), From 244a17a5caaf67bfb26e9d4ee4020e1ffbced48a Mon Sep 17 00:00:00 2001 From: PauloNehme <88497964+PauloNehme@users.noreply.github.com> Date: Thu, 7 Nov 2024 12:22:43 -0300 Subject: [PATCH 20/25] =?UTF-8?q?inclus=C3=A3o=20do=20schema=20-=20tbls=20?= =?UTF-8?q?(#520)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: PauloNehme --- docs/schema/README.md | 56 + docs/schema/md_pen_bloco.md | 61 + docs/schema/md_pen_bloco.svg | 44 + docs/schema/md_pen_bloco_protocolo.md | 54 + docs/schema/md_pen_bloco_protocolo.svg | 38 + docs/schema/md_pen_componente_digital.md | 109 ++ docs/schema/md_pen_componente_digital.svg | 320 +++++ docs/schema/md_pen_envio_comp_digitais.md | 52 + docs/schema/md_pen_envio_comp_digitais.svg | 38 + docs/schema/md_pen_especie_documental.md | 43 + docs/schema/md_pen_especie_documental.svg | 77 ++ docs/schema/md_pen_expedir_lote.md | 67 ++ docs/schema/md_pen_expedir_lote.svg | 83 ++ docs/schema/md_pen_hipotese_legal.md | 47 + docs/schema/md_pen_hipotese_legal.svg | 65 + docs/schema/md_pen_map_tipo_processo.md | 63 + docs/schema/md_pen_map_tipo_processo.svg | 92 ++ docs/schema/md_pen_orgao_externo.md | 63 + docs/schema/md_pen_orgao_externo.svg | 92 ++ docs/schema/md_pen_parametro.md | 47 + docs/schema/md_pen_parametro.svg | 35 + docs/schema/md_pen_procedimento_andamento.md | 57 + docs/schema/md_pen_procedimento_andamento.svg | 50 + docs/schema/md_pen_processo_eletronico.md | 52 + docs/schema/md_pen_processo_eletronico.svg | 320 +++++ docs/schema/md_pen_protocolo.md | 45 + docs/schema/md_pen_protocolo.svg | 29 + docs/schema/md_pen_recibo_tramite.md | 51 + docs/schema/md_pen_recibo_tramite.svg | 290 +++++ docs/schema/md_pen_recibo_tramite_enviado.md | 51 + docs/schema/md_pen_recibo_tramite_enviado.svg | 290 +++++ docs/schema/md_pen_recibo_tramite_hash.md | 53 + docs/schema/md_pen_recibo_tramite_hash.svg | 290 +++++ docs/schema/md_pen_recibo_tramite_recebido.md | 51 + .../schema/md_pen_recibo_tramite_recebido.svg | 290 +++++ docs/schema/md_pen_rel_doc_map_enviado.md | 53 + docs/schema/md_pen_rel_doc_map_enviado.svg | 77 ++ docs/schema/md_pen_rel_doc_map_recebido.md | 53 + docs/schema/md_pen_rel_doc_map_recebido.svg | 77 ++ docs/schema/md_pen_rel_expedir_lote.md | 55 + docs/schema/md_pen_rel_expedir_lote.svg | 83 ++ docs/schema/md_pen_rel_hipotese_legal.md | 58 + docs/schema/md_pen_rel_hipotese_legal.svg | 65 + docs/schema/md_pen_rel_processo_apensado.md | 51 + docs/schema/md_pen_rel_processo_apensado.svg | 194 +++ docs/schema/md_pen_rel_tarefa_operacao.md | 49 + docs/schema/md_pen_rel_tarefa_operacao.svg | 29 + docs/schema/md_pen_rel_tipo_doc_map_rec.md | 51 + docs/schema/md_pen_rel_tipo_doc_map_rec.svg | 32 + docs/schema/md_pen_seq_bloco.md | 43 + docs/schema/md_pen_seq_bloco.svg | 29 + docs/schema/md_pen_seq_bloco_protocolo.md | 43 + docs/schema/md_pen_seq_bloco_protocolo.svg | 29 + docs/schema/md_pen_seq_envio_comp_digitais.md | 43 + .../schema/md_pen_seq_envio_comp_digitais.svg | 29 + docs/schema/md_pen_seq_expedir_lote.md | 43 + docs/schema/md_pen_seq_expedir_lote.svg | 29 + docs/schema/md_pen_seq_hipotese_legal.md | 43 + docs/schema/md_pen_seq_hipotese_legal.svg | 29 + docs/schema/md_pen_seq_map_tp_procedimento.md | 43 + .../schema/md_pen_seq_map_tp_procedimento.svg | 29 + docs/schema/md_pen_seq_orgao_externo.md | 43 + docs/schema/md_pen_seq_orgao_externo.svg | 29 + docs/schema/md_pen_seq_procedimento_andam.md | 43 + docs/schema/md_pen_seq_procedimento_andam.svg | 29 + docs/schema/md_pen_seq_recibo_tramite_hash.md | 43 + .../schema/md_pen_seq_recibo_tramite_hash.svg | 29 + docs/schema/md_pen_seq_rel_doc_map_enviado.md | 43 + .../schema/md_pen_seq_rel_doc_map_enviado.svg | 29 + docs/schema/md_pen_seq_rel_doc_map_recebid.md | 43 + .../schema/md_pen_seq_rel_doc_map_recebid.svg | 29 + docs/schema/md_pen_seq_rel_hipotese_legal.md | 43 + docs/schema/md_pen_seq_rel_hipotese_legal.svg | 29 + docs/schema/md_pen_seq_tramite_pendente.md | 43 + docs/schema/md_pen_seq_tramite_pendente.svg | 29 + docs/schema/md_pen_tramite.md | 76 ++ docs/schema/md_pen_tramite.svg | 320 +++++ docs/schema/md_pen_tramite_pendente.md | 45 + docs/schema/md_pen_tramite_pendente.svg | 32 + docs/schema/md_pen_tramite_processado.md | 49 + docs/schema/md_pen_tramite_processado.svg | 38 + docs/schema/md_pen_tramite_recibo_envio.md | 47 + docs/schema/md_pen_tramite_recibo_envio.svg | 35 + docs/schema/md_pen_unidade.md | 49 + docs/schema/md_pen_unidade.svg | 35 + docs/schema/schema.json | 1 + docs/schema/schema.svg | 1042 +++++++++++++++++ 87 files changed, 7097 insertions(+) create mode 100644 docs/schema/README.md create mode 100644 docs/schema/md_pen_bloco.md create mode 100644 docs/schema/md_pen_bloco.svg create mode 100644 docs/schema/md_pen_bloco_protocolo.md create mode 100644 docs/schema/md_pen_bloco_protocolo.svg create mode 100644 docs/schema/md_pen_componente_digital.md create mode 100644 docs/schema/md_pen_componente_digital.svg create mode 100644 docs/schema/md_pen_envio_comp_digitais.md create mode 100644 docs/schema/md_pen_envio_comp_digitais.svg create mode 100644 docs/schema/md_pen_especie_documental.md create mode 100644 docs/schema/md_pen_especie_documental.svg create mode 100644 docs/schema/md_pen_expedir_lote.md create mode 100644 docs/schema/md_pen_expedir_lote.svg create mode 100644 docs/schema/md_pen_hipotese_legal.md create mode 100644 docs/schema/md_pen_hipotese_legal.svg create mode 100644 docs/schema/md_pen_map_tipo_processo.md create mode 100644 docs/schema/md_pen_map_tipo_processo.svg create mode 100644 docs/schema/md_pen_orgao_externo.md create mode 100644 docs/schema/md_pen_orgao_externo.svg create mode 100644 docs/schema/md_pen_parametro.md create mode 100644 docs/schema/md_pen_parametro.svg create mode 100644 docs/schema/md_pen_procedimento_andamento.md create mode 100644 docs/schema/md_pen_procedimento_andamento.svg create mode 100644 docs/schema/md_pen_processo_eletronico.md create mode 100644 docs/schema/md_pen_processo_eletronico.svg create mode 100644 docs/schema/md_pen_protocolo.md create mode 100644 docs/schema/md_pen_protocolo.svg create mode 100644 docs/schema/md_pen_recibo_tramite.md create mode 100644 docs/schema/md_pen_recibo_tramite.svg create mode 100644 docs/schema/md_pen_recibo_tramite_enviado.md create mode 100644 docs/schema/md_pen_recibo_tramite_enviado.svg create mode 100644 docs/schema/md_pen_recibo_tramite_hash.md create mode 100644 docs/schema/md_pen_recibo_tramite_hash.svg create mode 100644 docs/schema/md_pen_recibo_tramite_recebido.md create mode 100644 docs/schema/md_pen_recibo_tramite_recebido.svg create mode 100644 docs/schema/md_pen_rel_doc_map_enviado.md create mode 100644 docs/schema/md_pen_rel_doc_map_enviado.svg create mode 100644 docs/schema/md_pen_rel_doc_map_recebido.md create mode 100644 docs/schema/md_pen_rel_doc_map_recebido.svg create mode 100644 docs/schema/md_pen_rel_expedir_lote.md create mode 100644 docs/schema/md_pen_rel_expedir_lote.svg create mode 100644 docs/schema/md_pen_rel_hipotese_legal.md create mode 100644 docs/schema/md_pen_rel_hipotese_legal.svg create mode 100644 docs/schema/md_pen_rel_processo_apensado.md create mode 100644 docs/schema/md_pen_rel_processo_apensado.svg create mode 100644 docs/schema/md_pen_rel_tarefa_operacao.md create mode 100644 docs/schema/md_pen_rel_tarefa_operacao.svg create mode 100644 docs/schema/md_pen_rel_tipo_doc_map_rec.md create mode 100644 docs/schema/md_pen_rel_tipo_doc_map_rec.svg create mode 100644 docs/schema/md_pen_seq_bloco.md create mode 100644 docs/schema/md_pen_seq_bloco.svg create mode 100644 docs/schema/md_pen_seq_bloco_protocolo.md create mode 100644 docs/schema/md_pen_seq_bloco_protocolo.svg create mode 100644 docs/schema/md_pen_seq_envio_comp_digitais.md create mode 100644 docs/schema/md_pen_seq_envio_comp_digitais.svg create mode 100644 docs/schema/md_pen_seq_expedir_lote.md create mode 100644 docs/schema/md_pen_seq_expedir_lote.svg create mode 100644 docs/schema/md_pen_seq_hipotese_legal.md create mode 100644 docs/schema/md_pen_seq_hipotese_legal.svg create mode 100644 docs/schema/md_pen_seq_map_tp_procedimento.md create mode 100644 docs/schema/md_pen_seq_map_tp_procedimento.svg create mode 100644 docs/schema/md_pen_seq_orgao_externo.md create mode 100644 docs/schema/md_pen_seq_orgao_externo.svg create mode 100644 docs/schema/md_pen_seq_procedimento_andam.md create mode 100644 docs/schema/md_pen_seq_procedimento_andam.svg create mode 100644 docs/schema/md_pen_seq_recibo_tramite_hash.md create mode 100644 docs/schema/md_pen_seq_recibo_tramite_hash.svg create mode 100644 docs/schema/md_pen_seq_rel_doc_map_enviado.md create mode 100644 docs/schema/md_pen_seq_rel_doc_map_enviado.svg create mode 100644 docs/schema/md_pen_seq_rel_doc_map_recebid.md create mode 100644 docs/schema/md_pen_seq_rel_doc_map_recebid.svg create mode 100644 docs/schema/md_pen_seq_rel_hipotese_legal.md create mode 100644 docs/schema/md_pen_seq_rel_hipotese_legal.svg create mode 100644 docs/schema/md_pen_seq_tramite_pendente.md create mode 100644 docs/schema/md_pen_seq_tramite_pendente.svg create mode 100644 docs/schema/md_pen_tramite.md create mode 100644 docs/schema/md_pen_tramite.svg create mode 100644 docs/schema/md_pen_tramite_pendente.md create mode 100644 docs/schema/md_pen_tramite_pendente.svg create mode 100644 docs/schema/md_pen_tramite_processado.md create mode 100644 docs/schema/md_pen_tramite_processado.svg create mode 100644 docs/schema/md_pen_tramite_recibo_envio.md create mode 100644 docs/schema/md_pen_tramite_recibo_envio.svg create mode 100644 docs/schema/md_pen_unidade.md create mode 100644 docs/schema/md_pen_unidade.svg create mode 100644 docs/schema/schema.json create mode 100644 docs/schema/schema.svg diff --git a/docs/schema/README.md b/docs/schema/README.md new file mode 100644 index 000000000..c7c3c5cd5 --- /dev/null +++ b/docs/schema/README.md @@ -0,0 +1,56 @@ +# sei + +## Tables + +| Name | Columns | Comment | Type | +| ---- | ------- | ------- | ---- | +| [md_pen_bloco](md_pen_bloco.md) | 7 | | BASE TABLE | +| [md_pen_bloco_protocolo](md_pen_bloco_protocolo.md) | 5 | | BASE TABLE | +| [md_pen_componente_digital](md_pen_componente_digital.md) | 24 | | BASE TABLE | +| [md_pen_envio_comp_digitais](md_pen_envio_comp_digitais.md) | 5 | | BASE TABLE | +| [md_pen_especie_documental](md_pen_especie_documental.md) | 2 | | BASE TABLE | +| [md_pen_expedir_lote](md_pen_expedir_lote.md) | 10 | | BASE TABLE | +| [md_pen_hipotese_legal](md_pen_hipotese_legal.md) | 4 | | BASE TABLE | +| [md_pen_map_tipo_processo](md_pen_map_tipo_processo.md) | 8 | | BASE TABLE | +| [md_pen_orgao_externo](md_pen_orgao_externo.md) | 10 | | BASE TABLE | +| [md_pen_parametro](md_pen_parametro.md) | 4 | | BASE TABLE | +| [md_pen_procedimento_andamento](md_pen_procedimento_andamento.md) | 9 | | BASE TABLE | +| [md_pen_processo_eletronico](md_pen_processo_eletronico.md) | 3 | | BASE TABLE | +| [md_pen_protocolo](md_pen_protocolo.md) | 2 | | BASE TABLE | +| [md_pen_recibo_tramite](md_pen_recibo_tramite.md) | 5 | | BASE TABLE | +| [md_pen_recibo_tramite_enviado](md_pen_recibo_tramite_enviado.md) | 5 | | BASE TABLE | +| [md_pen_recibo_tramite_hash](md_pen_recibo_tramite_hash.md) | 5 | | BASE TABLE | +| [md_pen_recibo_tramite_recebido](md_pen_recibo_tramite_recebido.md) | 5 | | BASE TABLE | +| [md_pen_rel_doc_map_enviado](md_pen_rel_doc_map_enviado.md) | 3 | | BASE TABLE | +| [md_pen_rel_doc_map_recebido](md_pen_rel_doc_map_recebido.md) | 3 | | BASE TABLE | +| [md_pen_rel_expedir_lote](md_pen_rel_expedir_lote.md) | 5 | | BASE TABLE | +| [md_pen_rel_hipotese_legal](md_pen_rel_hipotese_legal.md) | 5 | | BASE TABLE | +| [md_pen_rel_processo_apensado](md_pen_rel_processo_apensado.md) | 3 | | BASE TABLE | +| [md_pen_rel_tarefa_operacao](md_pen_rel_tarefa_operacao.md) | 2 | | BASE TABLE | +| [md_pen_rel_tipo_doc_map_rec](md_pen_rel_tipo_doc_map_rec.md) | 3 | | BASE TABLE | +| [md_pen_seq_bloco](md_pen_seq_bloco.md) | 2 | | BASE TABLE | +| [md_pen_seq_bloco_protocolo](md_pen_seq_bloco_protocolo.md) | 2 | | BASE TABLE | +| [md_pen_seq_envio_comp_digitais](md_pen_seq_envio_comp_digitais.md) | 2 | | BASE TABLE | +| [md_pen_seq_expedir_lote](md_pen_seq_expedir_lote.md) | 2 | | BASE TABLE | +| [md_pen_seq_hipotese_legal](md_pen_seq_hipotese_legal.md) | 2 | | BASE TABLE | +| [md_pen_seq_map_tp_procedimento](md_pen_seq_map_tp_procedimento.md) | 2 | | BASE TABLE | +| [md_pen_seq_orgao_externo](md_pen_seq_orgao_externo.md) | 2 | | BASE TABLE | +| [md_pen_seq_procedimento_andam](md_pen_seq_procedimento_andam.md) | 2 | | BASE TABLE | +| [md_pen_seq_recibo_tramite_hash](md_pen_seq_recibo_tramite_hash.md) | 2 | | BASE TABLE | +| [md_pen_seq_rel_doc_map_enviado](md_pen_seq_rel_doc_map_enviado.md) | 2 | | BASE TABLE | +| [md_pen_seq_rel_doc_map_recebid](md_pen_seq_rel_doc_map_recebid.md) | 2 | | BASE TABLE | +| [md_pen_seq_rel_hipotese_legal](md_pen_seq_rel_hipotese_legal.md) | 2 | | BASE TABLE | +| [md_pen_seq_tramite_pendente](md_pen_seq_tramite_pendente.md) | 2 | | BASE TABLE | +| [md_pen_tramite](md_pen_tramite.md) | 12 | | BASE TABLE | +| [md_pen_tramite_pendente](md_pen_tramite_pendente.md) | 3 | | BASE TABLE | +| [md_pen_tramite_processado](md_pen_tramite_processado.md) | 5 | | BASE TABLE | +| [md_pen_tramite_recibo_envio](md_pen_tramite_recibo_envio.md) | 4 | | BASE TABLE | +| [md_pen_unidade](md_pen_unidade.md) | 4 | | BASE TABLE | + +## Relations + +![er](schema.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_bloco.md b/docs/schema/md_pen_bloco.md new file mode 100644 index 000000000..2ea8a56cb --- /dev/null +++ b/docs/schema/md_pen_bloco.md @@ -0,0 +1,61 @@ +# md_pen_bloco + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_bloco` ( + `id` int(11) NOT NULL, + `id_unidade` int(11) DEFAULT NULL, + `id_usuario` int(11) DEFAULT NULL, + `descricao` varchar(255) DEFAULT NULL, + `idx_bloco` varchar(500) DEFAULT NULL, + `sta_tipo` char(1) DEFAULT NULL, + `sta_estado` char(1) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `fk_tramite_bloco_unidade` (`id_unidade`), + KEY `fk_tramite_bloco_usuario` (`id_usuario`), + CONSTRAINT `fk_tramite_bloco_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`), + CONSTRAINT `fk_tramite_bloco_usuario` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`id_usuario`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id | int(11) | | false | | | | +| id_unidade | int(11) | NULL | true | | | | +| id_usuario | int(11) | NULL | true | | | | +| descricao | varchar(255) | NULL | true | | | | +| idx_bloco | varchar(500) | NULL | true | | | | +| sta_tipo | char(1) | NULL | true | | | | +| sta_estado | char(1) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_tramite_bloco_unidade | FOREIGN KEY | FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade) | +| fk_tramite_bloco_usuario | FOREIGN KEY | FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_tramite_bloco_unidade | KEY fk_tramite_bloco_unidade (id_unidade) USING BTREE | +| fk_tramite_bloco_usuario | KEY fk_tramite_bloco_usuario (id_usuario) USING BTREE | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_bloco.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_bloco.svg b/docs/schema/md_pen_bloco.svg new file mode 100644 index 000000000..510df7604 --- /dev/null +++ b/docs/schema/md_pen_bloco.svg @@ -0,0 +1,44 @@ + + + + + + +md_pen_bloco + + + +md_pen_bloco + + +md_pen_bloco +     +[BASE TABLE] + +id +[int(11)] + +id_unidade +[int(11)] + +id_usuario +[int(11)] + +descricao +[varchar(255)] + +idx_bloco +[varchar(500)] + +sta_tipo +[char(1)] + +sta_estado +[char(1)] + + + + diff --git a/docs/schema/md_pen_bloco_protocolo.md b/docs/schema/md_pen_bloco_protocolo.md new file mode 100644 index 000000000..2a6eb9302 --- /dev/null +++ b/docs/schema/md_pen_bloco_protocolo.md @@ -0,0 +1,54 @@ +# md_pen_bloco_protocolo + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_bloco_protocolo` ( + `id` int(11) NOT NULL, + `id_protocolo` bigint(20) NOT NULL, + `id_tramita_em_bloco` int(11) NOT NULL, + `sequencia` int(11) DEFAULT NULL, + `idx_rel_bloco_protocolo` varchar(4000) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `UK_md_pen_bloco_protocolo` (`id_protocolo`,`id_tramita_em_bloco`,`sequencia`), + CONSTRAINT `fk_bloco_protocolo` FOREIGN KEY (`id_protocolo`) REFERENCES `protocolo` (`id_protocolo`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id | int(11) | | false | | | | +| id_protocolo | bigint(20) | | false | | | | +| id_tramita_em_bloco | int(11) | | false | | | | +| sequencia | int(11) | NULL | true | | | | +| idx_rel_bloco_protocolo | varchar(4000) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_bloco_protocolo | FOREIGN KEY | FOREIGN KEY (id_protocolo) REFERENCES protocolo (id_protocolo) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | +| UK_md_pen_bloco_protocolo | UNIQUE | UNIQUE KEY UK_md_pen_bloco_protocolo (id_protocolo, id_tramita_em_bloco, sequencia) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | +| UK_md_pen_bloco_protocolo | UNIQUE KEY UK_md_pen_bloco_protocolo (id_protocolo, id_tramita_em_bloco, sequencia) USING BTREE | + +## Relations + +![er](md_pen_bloco_protocolo.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_bloco_protocolo.svg b/docs/schema/md_pen_bloco_protocolo.svg new file mode 100644 index 000000000..ea1dc2564 --- /dev/null +++ b/docs/schema/md_pen_bloco_protocolo.svg @@ -0,0 +1,38 @@ + + + + + + +md_pen_bloco_protocolo + + + +md_pen_bloco_protocolo + + +md_pen_bloco_protocolo +     +[BASE TABLE] + +id +[int(11)] + +id_protocolo +[bigint(20)] + +id_tramita_em_bloco +[int(11)] + +sequencia +[int(11)] + +idx_rel_bloco_protocolo +[varchar(4000)] + + + + diff --git a/docs/schema/md_pen_componente_digital.md b/docs/schema/md_pen_componente_digital.md new file mode 100644 index 000000000..f94b6f10e --- /dev/null +++ b/docs/schema/md_pen_componente_digital.md @@ -0,0 +1,109 @@ +# md_pen_componente_digital + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_componente_digital` ( + `numero_registro` char(16) NOT NULL, + `id_procedimento` bigint(20) NOT NULL, + `id_documento` bigint(20) NOT NULL, + `id_tramite` bigint(20) NOT NULL, + `id_anexo` int(11) DEFAULT NULL, + `protocolo` varchar(50) NOT NULL, + `nome` varchar(255) NOT NULL, + `hash_conteudo` varchar(255) NOT NULL, + `algoritmo_hash` varchar(20) NOT NULL, + `tipo_conteudo` char(3) NOT NULL, + `mime_type` varchar(100) NOT NULL, + `dados_complementares` varchar(1000) DEFAULT NULL, + `tamanho` bigint(20) NOT NULL, + `ordem` int(11) NOT NULL, + `sin_enviar` char(1) NOT NULL DEFAULT 'N', + `codigo_especie` int(11) DEFAULT NULL, + `nome_especie_produtor` varchar(255) DEFAULT NULL, + `ordem_documento` int(11) NOT NULL, + `id_procedimento_anexado` bigint(20) DEFAULT NULL, + `protocolo_procedimento_anexado` varchar(50) DEFAULT NULL, + `ordem_documento_anexado` int(11) DEFAULT NULL, + `ordem_documento_referenciado` int(11) DEFAULT NULL, + `id_anexo_imutavel` bigint(20) DEFAULT NULL, + `tarja_legada` char(1) DEFAULT NULL, + PRIMARY KEY (`numero_registro`,`id_procedimento`,`id_documento`,`id_tramite`,`ordem_documento`,`ordem`), + KEY `i01_md_pen_componente_digital` (`numero_registro`), + KEY `i02_md_pen_componente_digital` (`id_procedimento`), + KEY `i03_md_pen_componente_digital` (`id_documento`), + KEY `i04_md_pen_componente_digital` (`id_tramite`), + KEY `fk_md_pen_comp_dig_anexo` (`id_anexo`), + KEY `fk_md_pen_comp_dig_tramite` (`numero_registro`,`id_tramite`), + CONSTRAINT `fk_md_pen_comp_dig_anexo` FOREIGN KEY (`id_anexo`) REFERENCES `anexo` (`id_anexo`), + CONSTRAINT `fk_md_pen_comp_dig_documento` FOREIGN KEY (`id_documento`) REFERENCES `documento` (`id_documento`), + CONSTRAINT `fk_md_pen_comp_dig_proc_eletr` FOREIGN KEY (`numero_registro`) REFERENCES `md_pen_processo_eletronico` (`numero_registro`), + CONSTRAINT `fk_md_pen_comp_dig_procediment` FOREIGN KEY (`id_procedimento`) REFERENCES `procedimento` (`id_procedimento`), + CONSTRAINT `fk_md_pen_comp_dig_tramite` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | | [md_pen_processo_eletronico](md_pen_processo_eletronico.md) [md_pen_tramite](md_pen_tramite.md) | | +| id_procedimento | bigint(20) | | false | | | | +| id_documento | bigint(20) | | false | | | | +| id_tramite | bigint(20) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| id_anexo | int(11) | NULL | true | | | | +| protocolo | varchar(50) | | false | | | | +| nome | varchar(255) | | false | | | | +| hash_conteudo | varchar(255) | | false | | | | +| algoritmo_hash | varchar(20) | | false | | | | +| tipo_conteudo | char(3) | | false | | | | +| mime_type | varchar(100) | | false | | | | +| dados_complementares | varchar(1000) | NULL | true | | | | +| tamanho | bigint(20) | | false | | | | +| ordem | int(11) | | false | | | | +| sin_enviar | char(1) | 'N' | false | | | | +| codigo_especie | int(11) | NULL | true | | | | +| nome_especie_produtor | varchar(255) | NULL | true | | | | +| ordem_documento | int(11) | | false | | | | +| id_procedimento_anexado | bigint(20) | NULL | true | | | | +| protocolo_procedimento_anexado | varchar(50) | NULL | true | | | | +| ordem_documento_anexado | int(11) | NULL | true | | | | +| ordem_documento_referenciado | int(11) | NULL | true | | | | +| id_anexo_imutavel | bigint(20) | NULL | true | | | | +| tarja_legada | char(1) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_comp_dig_anexo | FOREIGN KEY | FOREIGN KEY (id_anexo) REFERENCES anexo (id_anexo) | +| fk_md_pen_comp_dig_documento | FOREIGN KEY | FOREIGN KEY (id_documento) REFERENCES documento (id_documento) | +| fk_md_pen_comp_dig_procediment | FOREIGN KEY | FOREIGN KEY (id_procedimento) REFERENCES procedimento (id_procedimento) | +| fk_md_pen_comp_dig_proc_eletr | FOREIGN KEY | FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro) | +| fk_md_pen_comp_dig_tramite | FOREIGN KEY | FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (numero_registro, id_procedimento, id_documento, id_tramite, ordem_documento, ordem) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_comp_dig_anexo | KEY fk_md_pen_comp_dig_anexo (id_anexo) USING BTREE | +| fk_md_pen_comp_dig_tramite | KEY fk_md_pen_comp_dig_tramite (numero_registro, id_tramite) USING BTREE | +| i01_md_pen_componente_digital | KEY i01_md_pen_componente_digital (numero_registro) USING BTREE | +| i02_md_pen_componente_digital | KEY i02_md_pen_componente_digital (id_procedimento) USING BTREE | +| i03_md_pen_componente_digital | KEY i03_md_pen_componente_digital (id_documento) USING BTREE | +| i04_md_pen_componente_digital | KEY i04_md_pen_componente_digital (id_tramite) USING BTREE | +| PRIMARY | PRIMARY KEY (numero_registro, id_procedimento, id_documento, id_tramite, ordem_documento, ordem) USING BTREE | + +## Relations + +![er](md_pen_componente_digital.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_componente_digital.svg b/docs/schema/md_pen_componente_digital.svg new file mode 100644 index 000000000..cbbd72d80 --- /dev/null +++ b/docs/schema/md_pen_componente_digital.svg @@ -0,0 +1,320 @@ + + + + + + +md_pen_componente_digital + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_procedimento +[bigint(20)] + +id_documento +[bigint(20)] + +id_tramite +[bigint(20)] + +id_anexo +[int(11)] + +protocolo +[varchar(50)] + +nome +[varchar(255)] + +hash_conteudo +[varchar(255)] + +algoritmo_hash +[varchar(20)] + +tipo_conteudo +[char(3)] + +mime_type +[varchar(100)] + +dados_complementares +[varchar(1000)] + +tamanho +[bigint(20)] + +ordem +[int(11)] + +sin_enviar +[char(1)] + +codigo_especie +[int(11)] + +nome_especie_produtor +[varchar(255)] + +ordem_documento +[int(11)] + +id_procedimento_anexado +[bigint(20)] + +protocolo_procedimento_anexado +[varchar(50)] + +ordem_documento_anexado +[int(11)] + +ordem_documento_referenciado +[int(11)] + +id_anexo_imutavel +[bigint(20)] + +tarja_legada +[char(1)] + + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_rel_processo_apensado + + +md_pen_rel_processo_apensado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento_apensado     +[bigint(20)] + +protocolo     +[varchar(50)] + + + +md_pen_rel_processo_apensado:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash     +[bigint(20)] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +tipo_recibo     +[char(1)] + +hash_componente_digital     +[varchar(255)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + diff --git a/docs/schema/md_pen_envio_comp_digitais.md b/docs/schema/md_pen_envio_comp_digitais.md new file mode 100644 index 000000000..00b450d64 --- /dev/null +++ b/docs/schema/md_pen_envio_comp_digitais.md @@ -0,0 +1,52 @@ +# md_pen_envio_comp_digitais + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_envio_comp_digitais` ( + `id_comp_digitais` bigint(20) NOT NULL, + `id_estrutura` int(11) NOT NULL, + `str_estrutura` longtext NOT NULL, + `id_unidade_pen` int(11) NOT NULL, + `str_unidade_pen` longtext NOT NULL, + PRIMARY KEY (`id_comp_digitais`), + UNIQUE KEY `UK_md_pen_envio_comp_digitais` (`id_estrutura`,`id_unidade_pen`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_comp_digitais | bigint(20) | | false | | | | +| id_estrutura | int(11) | | false | | | | +| str_estrutura | longtext | | false | | | | +| id_unidade_pen | int(11) | | false | | | | +| str_unidade_pen | longtext | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_comp_digitais) | +| UK_md_pen_envio_comp_digitais | UNIQUE | UNIQUE KEY UK_md_pen_envio_comp_digitais (id_estrutura, id_unidade_pen) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id_comp_digitais) USING BTREE | +| UK_md_pen_envio_comp_digitais | UNIQUE KEY UK_md_pen_envio_comp_digitais (id_estrutura, id_unidade_pen) USING BTREE | + +## Relations + +![er](md_pen_envio_comp_digitais.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_envio_comp_digitais.svg b/docs/schema/md_pen_envio_comp_digitais.svg new file mode 100644 index 000000000..09a3bb517 --- /dev/null +++ b/docs/schema/md_pen_envio_comp_digitais.svg @@ -0,0 +1,38 @@ + + + + + + +md_pen_envio_comp_digitais + + + +md_pen_envio_comp_digitais + + +md_pen_envio_comp_digitais +     +[BASE TABLE] + +id_comp_digitais +[bigint(20)] + +id_estrutura +[int(11)] + +str_estrutura +[longtext] + +id_unidade_pen +[int(11)] + +str_unidade_pen +[longtext] + + + + diff --git a/docs/schema/md_pen_especie_documental.md b/docs/schema/md_pen_especie_documental.md new file mode 100644 index 000000000..69577ebd8 --- /dev/null +++ b/docs/schema/md_pen_especie_documental.md @@ -0,0 +1,43 @@ +# md_pen_especie_documental + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_especie_documental` ( + `id_especie` int(11) NOT NULL, + `nome_especie` varchar(255) NOT NULL, + PRIMARY KEY (`id_especie`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_especie | int(11) | | false | [md_pen_rel_doc_map_enviado](md_pen_rel_doc_map_enviado.md) [md_pen_rel_doc_map_recebido](md_pen_rel_doc_map_recebido.md) | | | +| nome_especie | varchar(255) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_especie) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id_especie) USING BTREE | + +## Relations + +![er](md_pen_especie_documental.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_especie_documental.svg b/docs/schema/md_pen_especie_documental.svg new file mode 100644 index 000000000..e523b58c3 --- /dev/null +++ b/docs/schema/md_pen_especie_documental.svg @@ -0,0 +1,77 @@ + + + + + + +md_pen_especie_documental + + + +md_pen_especie_documental + + +md_pen_especie_documental +     +[BASE TABLE] + +id_especie +[int(11)] + +nome_especie +[varchar(255)] + + + + +md_pen_rel_doc_map_enviado + + +md_pen_rel_doc_map_enviado +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +codigo_especie     +[int(11)] + +id_serie     +[int(11)] + + + +md_pen_rel_doc_map_enviado:codigo_especie->md_pen_especie_documental:id_especie + + + + + +md_pen_rel_doc_map_recebido + + +md_pen_rel_doc_map_recebido +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +codigo_especie     +[int(11)] + +id_serie     +[int(11)] + + + +md_pen_rel_doc_map_recebido:codigo_especie->md_pen_especie_documental:id_especie + + + + + diff --git a/docs/schema/md_pen_expedir_lote.md b/docs/schema/md_pen_expedir_lote.md new file mode 100644 index 000000000..1e0d4bcb6 --- /dev/null +++ b/docs/schema/md_pen_expedir_lote.md @@ -0,0 +1,67 @@ +# md_pen_expedir_lote + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_expedir_lote` ( + `id_lote` int(11) NOT NULL, + `id_repositorio_destino` int(11) NOT NULL, + `str_repositorio_destino` varchar(250) NOT NULL, + `id_repositorio_origem` int(11) NOT NULL, + `id_unidade_origem` int(11) NOT NULL, + `id_unidade_destino` int(11) NOT NULL, + `str_unidade_destino` varchar(250) NOT NULL, + `id_usuario` int(11) NOT NULL, + `id_unidade` int(11) NOT NULL, + `dth_registro` datetime NOT NULL, + PRIMARY KEY (`id_lote`), + KEY `fk_md_pen_expedir_lote_usuario` (`id_usuario`), + KEY `fk_md_pen_expedir_lote_unidade` (`id_unidade`), + CONSTRAINT `fk_md_pen_expedir_lote_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`), + CONSTRAINT `fk_md_pen_expedir_lote_usuario` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`id_usuario`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_lote | int(11) | | false | [md_pen_rel_expedir_lote](md_pen_rel_expedir_lote.md) | | | +| id_repositorio_destino | int(11) | | false | | | | +| str_repositorio_destino | varchar(250) | | false | | | | +| id_repositorio_origem | int(11) | | false | | | | +| id_unidade_origem | int(11) | | false | | | | +| id_unidade_destino | int(11) | | false | | | | +| str_unidade_destino | varchar(250) | | false | | | | +| id_usuario | int(11) | | false | | | | +| id_unidade | int(11) | | false | | | | +| dth_registro | datetime | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_expedir_lote_unidade | FOREIGN KEY | FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade) | +| fk_md_pen_expedir_lote_usuario | FOREIGN KEY | FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_lote) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_expedir_lote_unidade | KEY fk_md_pen_expedir_lote_unidade (id_unidade) USING BTREE | +| fk_md_pen_expedir_lote_usuario | KEY fk_md_pen_expedir_lote_usuario (id_usuario) USING BTREE | +| PRIMARY | PRIMARY KEY (id_lote) USING BTREE | + +## Relations + +![er](md_pen_expedir_lote.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_expedir_lote.svg b/docs/schema/md_pen_expedir_lote.svg new file mode 100644 index 000000000..9fefa10de --- /dev/null +++ b/docs/schema/md_pen_expedir_lote.svg @@ -0,0 +1,83 @@ + + + + + + +md_pen_expedir_lote + + + +md_pen_expedir_lote + + +md_pen_expedir_lote +     +[BASE TABLE] + +id_lote +[int(11)] + +id_repositorio_destino +[int(11)] + +str_repositorio_destino +[varchar(250)] + +id_repositorio_origem +[int(11)] + +id_unidade_origem +[int(11)] + +id_unidade_destino +[int(11)] + +str_unidade_destino +[varchar(250)] + +id_usuario +[int(11)] + +id_unidade +[int(11)] + +dth_registro +[datetime] + + + + +md_pen_rel_expedir_lote + + +md_pen_rel_expedir_lote +     +[BASE TABLE] + +id_lote     +[int(11)] + +id_procedimento     +[bigint(20)] + +id_andamento     +[int(11)] + +id_atividade_expedicao     +[int(11)] + +tentativas     +[int(11)] + + + +md_pen_rel_expedir_lote:id_lote->md_pen_expedir_lote:id_lote + + + + + diff --git a/docs/schema/md_pen_hipotese_legal.md b/docs/schema/md_pen_hipotese_legal.md new file mode 100644 index 000000000..dd787d3cf --- /dev/null +++ b/docs/schema/md_pen_hipotese_legal.md @@ -0,0 +1,47 @@ +# md_pen_hipotese_legal + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_hipotese_legal` ( + `id_hipotese_legal` int(11) NOT NULL, + `nome` varchar(255) NOT NULL, + `sin_ativo` char(1) NOT NULL DEFAULT 'S', + `identificacao` int(11) DEFAULT NULL, + PRIMARY KEY (`id_hipotese_legal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_hipotese_legal | int(11) | | false | [md_pen_rel_hipotese_legal](md_pen_rel_hipotese_legal.md) | | | +| nome | varchar(255) | | false | | | | +| sin_ativo | char(1) | 'S' | false | | | | +| identificacao | int(11) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_hipotese_legal) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id_hipotese_legal) USING BTREE | + +## Relations + +![er](md_pen_hipotese_legal.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_hipotese_legal.svg b/docs/schema/md_pen_hipotese_legal.svg new file mode 100644 index 000000000..70e520962 --- /dev/null +++ b/docs/schema/md_pen_hipotese_legal.svg @@ -0,0 +1,65 @@ + + + + + + +md_pen_hipotese_legal + + + +md_pen_hipotese_legal + + +md_pen_hipotese_legal +     +[BASE TABLE] + +id_hipotese_legal +[int(11)] + +nome +[varchar(255)] + +sin_ativo +[char(1)] + +identificacao +[int(11)] + + + + +md_pen_rel_hipotese_legal + + +md_pen_rel_hipotese_legal +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +id_hipotese_legal     +[int(11)] + +id_hipotese_legal_pen     +[int(11)] + +tipo     +[char(1)] + +sin_ativo     +[char(1)] + + + +md_pen_rel_hipotese_legal:id_hipotese_legal_pen->md_pen_hipotese_legal:id_hipotese_legal + + + + + diff --git a/docs/schema/md_pen_map_tipo_processo.md b/docs/schema/md_pen_map_tipo_processo.md new file mode 100644 index 000000000..de2db492a --- /dev/null +++ b/docs/schema/md_pen_map_tipo_processo.md @@ -0,0 +1,63 @@ +# md_pen_map_tipo_processo + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_map_tipo_processo` ( + `id` int(11) NOT NULL, + `id_map_orgao` int(11) NOT NULL, + `id_tipo_processo_origem` int(11) NOT NULL, + `id_tipo_processo_destino` int(11) DEFAULT NULL, + `nome_tipo_processo` varchar(250) DEFAULT NULL, + `sin_ativo` char(1) NOT NULL DEFAULT 'S', + `id_unidade` int(11) NOT NULL, + `dth_criacao` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `fk_md_pen_map_tipo_processo` (`id_unidade`), + KEY `fk_md_pen_mapeamento_orgao` (`id_map_orgao`), + CONSTRAINT `fk_md_pen_map_tipo_processo` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`), + CONSTRAINT `fk_md_pen_mapeamento_orgao` FOREIGN KEY (`id_map_orgao`) REFERENCES `md_pen_orgao_externo` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id | int(11) | | false | | | | +| id_map_orgao | int(11) | | false | | [md_pen_orgao_externo](md_pen_orgao_externo.md) | | +| id_tipo_processo_origem | int(11) | | false | | | | +| id_tipo_processo_destino | int(11) | NULL | true | | | | +| nome_tipo_processo | varchar(250) | NULL | true | | | | +| sin_ativo | char(1) | 'S' | false | | | | +| id_unidade | int(11) | | false | | | | +| dth_criacao | datetime | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_mapeamento_orgao | FOREIGN KEY | FOREIGN KEY (id_map_orgao) REFERENCES md_pen_orgao_externo (id) | +| fk_md_pen_map_tipo_processo | FOREIGN KEY | FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_mapeamento_orgao | KEY fk_md_pen_mapeamento_orgao (id_map_orgao) USING BTREE | +| fk_md_pen_map_tipo_processo | KEY fk_md_pen_map_tipo_processo (id_unidade) USING BTREE | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_map_tipo_processo.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_map_tipo_processo.svg b/docs/schema/md_pen_map_tipo_processo.svg new file mode 100644 index 000000000..a03fb2d1d --- /dev/null +++ b/docs/schema/md_pen_map_tipo_processo.svg @@ -0,0 +1,92 @@ + + + + + + +md_pen_map_tipo_processo + + + +md_pen_map_tipo_processo + + +md_pen_map_tipo_processo +     +[BASE TABLE] + +id +[int(11)] + +id_map_orgao +[int(11)] + +id_tipo_processo_origem +[int(11)] + +id_tipo_processo_destino +[int(11)] + +nome_tipo_processo +[varchar(250)] + +sin_ativo +[char(1)] + +id_unidade +[int(11)] + +dth_criacao +[datetime] + + + + +md_pen_orgao_externo + + +md_pen_orgao_externo +     +[BASE TABLE] + +id     +[int(11)] + +id_orgao_origem     +[int(11)] + +str_orgao_origem     +[varchar(250)] + +id_estrutura_origem     +[int(11)] + +str_estrutura_origem     +[varchar(250)] + +id_orgao_destino     +[int(11)] + +str_orgao_destino     +[varchar(250)] + +sin_ativo     +[char(1)] + +id_unidade     +[int(11)] + +dth_criacao     +[datetime] + + + +md_pen_map_tipo_processo:id_map_orgao->md_pen_orgao_externo:id + + + + + diff --git a/docs/schema/md_pen_orgao_externo.md b/docs/schema/md_pen_orgao_externo.md new file mode 100644 index 000000000..1ddaab910 --- /dev/null +++ b/docs/schema/md_pen_orgao_externo.md @@ -0,0 +1,63 @@ +# md_pen_orgao_externo + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_orgao_externo` ( + `id` int(11) NOT NULL, + `id_orgao_origem` int(11) NOT NULL, + `str_orgao_origem` varchar(250) NOT NULL, + `id_estrutura_origem` int(11) NOT NULL, + `str_estrutura_origem` varchar(250) NOT NULL, + `id_orgao_destino` int(11) NOT NULL, + `str_orgao_destino` varchar(250) NOT NULL, + `sin_ativo` char(1) NOT NULL DEFAULT 'S', + `id_unidade` int(11) NOT NULL, + `dth_criacao` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `fk_md_pen_orgao_externo` (`id_unidade`), + CONSTRAINT `fk_md_pen_orgao_externo` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id | int(11) | | false | [md_pen_map_tipo_processo](md_pen_map_tipo_processo.md) | | | +| id_orgao_origem | int(11) | | false | | | | +| str_orgao_origem | varchar(250) | | false | | | | +| id_estrutura_origem | int(11) | | false | | | | +| str_estrutura_origem | varchar(250) | | false | | | | +| id_orgao_destino | int(11) | | false | | | | +| str_orgao_destino | varchar(250) | | false | | | | +| sin_ativo | char(1) | 'S' | false | | | | +| id_unidade | int(11) | | false | | | | +| dth_criacao | datetime | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_orgao_externo | FOREIGN KEY | FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_orgao_externo | KEY fk_md_pen_orgao_externo (id_unidade) USING BTREE | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_orgao_externo.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_orgao_externo.svg b/docs/schema/md_pen_orgao_externo.svg new file mode 100644 index 000000000..b1b614bd0 --- /dev/null +++ b/docs/schema/md_pen_orgao_externo.svg @@ -0,0 +1,92 @@ + + + + + + +md_pen_orgao_externo + + + +md_pen_orgao_externo + + +md_pen_orgao_externo +     +[BASE TABLE] + +id +[int(11)] + +id_orgao_origem +[int(11)] + +str_orgao_origem +[varchar(250)] + +id_estrutura_origem +[int(11)] + +str_estrutura_origem +[varchar(250)] + +id_orgao_destino +[int(11)] + +str_orgao_destino +[varchar(250)] + +sin_ativo +[char(1)] + +id_unidade +[int(11)] + +dth_criacao +[datetime] + + + + +md_pen_map_tipo_processo + + +md_pen_map_tipo_processo +     +[BASE TABLE] + +id     +[int(11)] + +id_map_orgao     +[int(11)] + +id_tipo_processo_origem     +[int(11)] + +id_tipo_processo_destino     +[int(11)] + +nome_tipo_processo     +[varchar(250)] + +sin_ativo     +[char(1)] + +id_unidade     +[int(11)] + +dth_criacao     +[datetime] + + + +md_pen_map_tipo_processo:id_map_orgao->md_pen_orgao_externo:id + + + + + diff --git a/docs/schema/md_pen_parametro.md b/docs/schema/md_pen_parametro.md new file mode 100644 index 000000000..281247e81 --- /dev/null +++ b/docs/schema/md_pen_parametro.md @@ -0,0 +1,47 @@ +# md_pen_parametro + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_parametro` ( + `nome` varchar(100) NOT NULL, + `descricao` varchar(255) DEFAULT NULL, + `sequencia` int(11) DEFAULT NULL, + `valor` longtext DEFAULT NULL, + PRIMARY KEY (`nome`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| nome | varchar(100) | | false | | | | +| descricao | varchar(255) | NULL | true | | | | +| sequencia | int(11) | NULL | true | | | | +| valor | longtext | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (nome) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (nome) USING BTREE | + +## Relations + +![er](md_pen_parametro.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_parametro.svg b/docs/schema/md_pen_parametro.svg new file mode 100644 index 000000000..6c2c6c30e --- /dev/null +++ b/docs/schema/md_pen_parametro.svg @@ -0,0 +1,35 @@ + + + + + + +md_pen_parametro + + + +md_pen_parametro + + +md_pen_parametro +     +[BASE TABLE] + +nome +[varchar(100)] + +descricao +[varchar(255)] + +sequencia +[int(11)] + +valor +[longtext] + + + + diff --git a/docs/schema/md_pen_procedimento_andamento.md b/docs/schema/md_pen_procedimento_andamento.md new file mode 100644 index 000000000..0b30cd150 --- /dev/null +++ b/docs/schema/md_pen_procedimento_andamento.md @@ -0,0 +1,57 @@ +# md_pen_procedimento_andamento + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_procedimento_andamento` ( + `id_andamento` bigint(20) NOT NULL, + `id_procedimento` bigint(20) DEFAULT NULL, + `id_tramite` bigint(20) NOT NULL, + `situacao` char(1) NOT NULL DEFAULT 'N', + `data` datetime NOT NULL, + `mensagem` varchar(255) NOT NULL, + `hash` char(32) NOT NULL, + `id_tarefa` varchar(255) NOT NULL, + `numero_registro` char(16) DEFAULT NULL, + PRIMARY KEY (`id_andamento`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_andamento | bigint(20) | | false | | | | +| id_procedimento | bigint(20) | NULL | true | | | | +| id_tramite | bigint(20) | | false | | | | +| situacao | char(1) | 'N' | false | | | | +| data | datetime | | false | | | | +| mensagem | varchar(255) | | false | | | | +| hash | char(32) | | false | | | | +| id_tarefa | varchar(255) | | false | | | | +| numero_registro | char(16) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_andamento) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id_andamento) USING BTREE | + +## Relations + +![er](md_pen_procedimento_andamento.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_procedimento_andamento.svg b/docs/schema/md_pen_procedimento_andamento.svg new file mode 100644 index 000000000..8faf3fb98 --- /dev/null +++ b/docs/schema/md_pen_procedimento_andamento.svg @@ -0,0 +1,50 @@ + + + + + + +md_pen_procedimento_andamento + + + +md_pen_procedimento_andamento + + +md_pen_procedimento_andamento +     +[BASE TABLE] + +id_andamento +[bigint(20)] + +id_procedimento +[bigint(20)] + +id_tramite +[bigint(20)] + +situacao +[char(1)] + +data +[datetime] + +mensagem +[varchar(255)] + +hash +[char(32)] + +id_tarefa +[varchar(255)] + +numero_registro +[char(16)] + + + + diff --git a/docs/schema/md_pen_processo_eletronico.md b/docs/schema/md_pen_processo_eletronico.md new file mode 100644 index 000000000..d23d9dba6 --- /dev/null +++ b/docs/schema/md_pen_processo_eletronico.md @@ -0,0 +1,52 @@ +# md_pen_processo_eletronico + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_processo_eletronico` ( + `numero_registro` char(16) NOT NULL, + `id_procedimento` bigint(20) NOT NULL, + `sta_tipo_protocolo` varchar(1) NOT NULL DEFAULT 'P', + PRIMARY KEY (`numero_registro`), + UNIQUE KEY `UK_md_pen_processo_eletronico` (`numero_registro`,`id_procedimento`), + KEY `fk_md_pen_proc_eletr_procedim` (`id_procedimento`), + CONSTRAINT `fk_md_pen_proc_eletr_procedim` FOREIGN KEY (`id_procedimento`) REFERENCES `procedimento` (`id_procedimento`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | [md_pen_componente_digital](md_pen_componente_digital.md) [md_pen_rel_processo_apensado](md_pen_rel_processo_apensado.md) [md_pen_tramite](md_pen_tramite.md) | | | +| id_procedimento | bigint(20) | | false | | | | +| sta_tipo_protocolo | varchar(1) | 'P' | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_proc_eletr_procedim | FOREIGN KEY | FOREIGN KEY (id_procedimento) REFERENCES procedimento (id_procedimento) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (numero_registro) | +| UK_md_pen_processo_eletronico | UNIQUE | UNIQUE KEY UK_md_pen_processo_eletronico (numero_registro, id_procedimento) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_proc_eletr_procedim | KEY fk_md_pen_proc_eletr_procedim (id_procedimento) USING BTREE | +| PRIMARY | PRIMARY KEY (numero_registro) USING BTREE | +| UK_md_pen_processo_eletronico | UNIQUE KEY UK_md_pen_processo_eletronico (numero_registro, id_procedimento) USING BTREE | + +## Relations + +![er](md_pen_processo_eletronico.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_processo_eletronico.svg b/docs/schema/md_pen_processo_eletronico.svg new file mode 100644 index 000000000..0f5bf72cb --- /dev/null +++ b/docs/schema/md_pen_processo_eletronico.svg @@ -0,0 +1,320 @@ + + + + + + +md_pen_processo_eletronico + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_procedimento +[bigint(20)] + +sta_tipo_protocolo +[varchar(1)] + + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_rel_processo_apensado + + +md_pen_rel_processo_apensado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento_apensado     +[bigint(20)] + +protocolo     +[varchar(50)] + + + +md_pen_rel_processo_apensado:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash     +[bigint(20)] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +tipo_recibo     +[char(1)] + +hash_componente_digital     +[varchar(255)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + diff --git a/docs/schema/md_pen_protocolo.md b/docs/schema/md_pen_protocolo.md new file mode 100644 index 000000000..ca3bff25b --- /dev/null +++ b/docs/schema/md_pen_protocolo.md @@ -0,0 +1,45 @@ +# md_pen_protocolo + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_protocolo` ( + `id_protocolo` bigint(20) NOT NULL, + `sin_obteve_recusa` char(1) NOT NULL DEFAULT 'N', + PRIMARY KEY (`id_protocolo`), + CONSTRAINT `fk_md_pen_protocolo_protocolo` FOREIGN KEY (`id_protocolo`) REFERENCES `protocolo` (`id_protocolo`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_protocolo | bigint(20) | | false | | | | +| sin_obteve_recusa | char(1) | 'N' | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_protocolo_protocolo | FOREIGN KEY | FOREIGN KEY (id_protocolo) REFERENCES protocolo (id_protocolo) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_protocolo) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id_protocolo) USING BTREE | + +## Relations + +![er](md_pen_protocolo.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_protocolo.svg b/docs/schema/md_pen_protocolo.svg new file mode 100644 index 000000000..64f3915e3 --- /dev/null +++ b/docs/schema/md_pen_protocolo.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_protocolo + + + +md_pen_protocolo + + +md_pen_protocolo +     +[BASE TABLE] + +id_protocolo +[bigint(20)] + +sin_obteve_recusa +[char(1)] + + + + diff --git a/docs/schema/md_pen_recibo_tramite.md b/docs/schema/md_pen_recibo_tramite.md new file mode 100644 index 000000000..eebb1dc16 --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite.md @@ -0,0 +1,51 @@ +# md_pen_recibo_tramite + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_recibo_tramite` ( + `numero_registro` char(16) NOT NULL, + `id_tramite` bigint(20) NOT NULL, + `dth_recebimento` datetime NOT NULL, + `hash_assinatura` varchar(1000) NOT NULL, + `cadeia_certificado` longtext DEFAULT NULL, + PRIMARY KEY (`numero_registro`,`id_tramite`), + CONSTRAINT `fk_md_pen_rec_tramite_tramite` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| id_tramite | bigint(20) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| dth_recebimento | datetime | | false | | | | +| hash_assinatura | varchar(1000) | | false | | | | +| cadeia_certificado | longtext | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rec_tramite_tramite | FOREIGN KEY | FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (numero_registro, id_tramite) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (numero_registro, id_tramite) USING BTREE | + +## Relations + +![er](md_pen_recibo_tramite.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_recibo_tramite.svg b/docs/schema/md_pen_recibo_tramite.svg new file mode 100644 index 000000000..7054d1bee --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite.svg @@ -0,0 +1,290 @@ + + + + + + +md_pen_recibo_tramite + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_tramite +[bigint(20)] + +dth_recebimento +[datetime] + +hash_assinatura +[varchar(1000)] + +cadeia_certificado +[longtext] + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash     +[bigint(20)] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +tipo_recibo     +[char(1)] + +hash_componente_digital     +[varchar(255)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + diff --git a/docs/schema/md_pen_recibo_tramite_enviado.md b/docs/schema/md_pen_recibo_tramite_enviado.md new file mode 100644 index 000000000..859f3a500 --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite_enviado.md @@ -0,0 +1,51 @@ +# md_pen_recibo_tramite_enviado + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_recibo_tramite_enviado` ( + `numero_registro` char(16) NOT NULL, + `id_tramite` bigint(20) NOT NULL, + `dth_recebimento` datetime NOT NULL, + `hash_assinatura` varchar(1000) NOT NULL, + `cadeia_certificado` longtext DEFAULT NULL, + PRIMARY KEY (`numero_registro`,`id_tramite`), + CONSTRAINT `fk_md_pen_rec_tram_env_tram` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| id_tramite | bigint(20) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| dth_recebimento | datetime | | false | | | | +| hash_assinatura | varchar(1000) | | false | | | | +| cadeia_certificado | longtext | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rec_tram_env_tram | FOREIGN KEY | FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (numero_registro, id_tramite) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (numero_registro, id_tramite) USING BTREE | + +## Relations + +![er](md_pen_recibo_tramite_enviado.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_recibo_tramite_enviado.svg b/docs/schema/md_pen_recibo_tramite_enviado.svg new file mode 100644 index 000000000..b54cb7d4d --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite_enviado.svg @@ -0,0 +1,290 @@ + + + + + + +md_pen_recibo_tramite_enviado + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_tramite +[bigint(20)] + +dth_recebimento +[datetime] + +hash_assinatura +[varchar(1000)] + +cadeia_certificado +[longtext] + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash     +[bigint(20)] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +tipo_recibo     +[char(1)] + +hash_componente_digital     +[varchar(255)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + diff --git a/docs/schema/md_pen_recibo_tramite_hash.md b/docs/schema/md_pen_recibo_tramite_hash.md new file mode 100644 index 000000000..93fd44b25 --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite_hash.md @@ -0,0 +1,53 @@ +# md_pen_recibo_tramite_hash + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_recibo_tramite_hash` ( + `id_tramite_hash` bigint(20) NOT NULL, + `numero_registro` char(16) NOT NULL, + `id_tramite` bigint(20) NOT NULL, + `tipo_recibo` char(1) NOT NULL, + `hash_componente_digital` varchar(255) NOT NULL, + PRIMARY KEY (`id_tramite_hash`), + KEY `fk_md_pen_rec_tram_hash_tram` (`numero_registro`,`id_tramite`), + CONSTRAINT `fk_md_pen_rec_tram_hash_tram` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_tramite_hash | bigint(20) | | false | | | | +| numero_registro | char(16) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| id_tramite | bigint(20) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| tipo_recibo | char(1) | | false | | | | +| hash_componente_digital | varchar(255) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rec_tram_hash_tram | FOREIGN KEY | FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_tramite_hash) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_rec_tram_hash_tram | KEY fk_md_pen_rec_tram_hash_tram (numero_registro, id_tramite) USING BTREE | +| PRIMARY | PRIMARY KEY (id_tramite_hash) USING BTREE | + +## Relations + +![er](md_pen_recibo_tramite_hash.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_recibo_tramite_hash.svg b/docs/schema/md_pen_recibo_tramite_hash.svg new file mode 100644 index 000000000..ee8100d7d --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite_hash.svg @@ -0,0 +1,290 @@ + + + + + + +md_pen_recibo_tramite_hash + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash +[bigint(20)] + +numero_registro +[char(16)] + +id_tramite +[bigint(20)] + +tipo_recibo +[char(1)] + +hash_componente_digital +[varchar(255)] + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + diff --git a/docs/schema/md_pen_recibo_tramite_recebido.md b/docs/schema/md_pen_recibo_tramite_recebido.md new file mode 100644 index 000000000..3284f9a35 --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite_recebido.md @@ -0,0 +1,51 @@ +# md_pen_recibo_tramite_recebido + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_recibo_tramite_recebido` ( + `numero_registro` char(16) NOT NULL, + `id_tramite` bigint(20) NOT NULL, + `dth_recebimento` datetime NOT NULL, + `hash_assinatura` varchar(1000) NOT NULL, + `cadeia_certificado` longtext DEFAULT NULL, + PRIMARY KEY (`numero_registro`,`id_tramite`), + CONSTRAINT `fk_md_pen_recibo_receb_tram` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| id_tramite | bigint(20) | | false | | [md_pen_tramite](md_pen_tramite.md) | | +| dth_recebimento | datetime | | false | | | | +| hash_assinatura | varchar(1000) | | false | | | | +| cadeia_certificado | longtext | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_recibo_receb_tram | FOREIGN KEY | FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (numero_registro, id_tramite) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (numero_registro, id_tramite) USING BTREE | + +## Relations + +![er](md_pen_recibo_tramite_recebido.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_recibo_tramite_recebido.svg b/docs/schema/md_pen_recibo_tramite_recebido.svg new file mode 100644 index 000000000..01d14c29e --- /dev/null +++ b/docs/schema/md_pen_recibo_tramite_recebido.svg @@ -0,0 +1,290 @@ + + + + + + +md_pen_recibo_tramite_recebido + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_tramite +[bigint(20)] + +dth_recebimento +[datetime] + +hash_assinatura +[varchar(1000)] + +cadeia_certificado +[longtext] + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash     +[bigint(20)] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +tipo_recibo     +[char(1)] + +hash_componente_digital     +[varchar(255)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + diff --git a/docs/schema/md_pen_rel_doc_map_enviado.md b/docs/schema/md_pen_rel_doc_map_enviado.md new file mode 100644 index 000000000..e81631bbd --- /dev/null +++ b/docs/schema/md_pen_rel_doc_map_enviado.md @@ -0,0 +1,53 @@ +# md_pen_rel_doc_map_enviado + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_rel_doc_map_enviado` ( + `id_mapeamento` bigint(20) NOT NULL, + `codigo_especie` int(11) NOT NULL, + `id_serie` int(11) NOT NULL, + PRIMARY KEY (`id_mapeamento`), + KEY `fk_md_pen_rel_doc_map_env_seri` (`id_serie`), + KEY `fk_md_pen_rel_doc_map_env_espe` (`codigo_especie`), + CONSTRAINT `fk_md_pen_rel_doc_map_env_espe` FOREIGN KEY (`codigo_especie`) REFERENCES `md_pen_especie_documental` (`id_especie`), + CONSTRAINT `fk_md_pen_rel_doc_map_env_seri` FOREIGN KEY (`id_serie`) REFERENCES `serie` (`id_serie`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_mapeamento | bigint(20) | | false | | | | +| codigo_especie | int(11) | | false | | [md_pen_especie_documental](md_pen_especie_documental.md) | | +| id_serie | int(11) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rel_doc_map_env_espe | FOREIGN KEY | FOREIGN KEY (codigo_especie) REFERENCES md_pen_especie_documental (id_especie) | +| fk_md_pen_rel_doc_map_env_seri | FOREIGN KEY | FOREIGN KEY (id_serie) REFERENCES serie (id_serie) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_mapeamento) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_rel_doc_map_env_espe | KEY fk_md_pen_rel_doc_map_env_espe (codigo_especie) USING BTREE | +| fk_md_pen_rel_doc_map_env_seri | KEY fk_md_pen_rel_doc_map_env_seri (id_serie) USING BTREE | +| PRIMARY | PRIMARY KEY (id_mapeamento) USING BTREE | + +## Relations + +![er](md_pen_rel_doc_map_enviado.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_rel_doc_map_enviado.svg b/docs/schema/md_pen_rel_doc_map_enviado.svg new file mode 100644 index 000000000..f87b7a51a --- /dev/null +++ b/docs/schema/md_pen_rel_doc_map_enviado.svg @@ -0,0 +1,77 @@ + + + + + + +md_pen_rel_doc_map_enviado + + + +md_pen_rel_doc_map_enviado + + +md_pen_rel_doc_map_enviado +     +[BASE TABLE] + +id_mapeamento +[bigint(20)] + +codigo_especie +[int(11)] + +id_serie +[int(11)] + + + + +md_pen_especie_documental + + +md_pen_especie_documental +     +[BASE TABLE] + +id_especie     +[int(11)] + +nome_especie     +[varchar(255)] + + + +md_pen_rel_doc_map_enviado:codigo_especie->md_pen_especie_documental:id_especie + + + + + +md_pen_rel_doc_map_recebido + + +md_pen_rel_doc_map_recebido +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +codigo_especie     +[int(11)] + +id_serie     +[int(11)] + + + +md_pen_rel_doc_map_recebido:codigo_especie->md_pen_especie_documental:id_especie + + + + + diff --git a/docs/schema/md_pen_rel_doc_map_recebido.md b/docs/schema/md_pen_rel_doc_map_recebido.md new file mode 100644 index 000000000..02dee7e38 --- /dev/null +++ b/docs/schema/md_pen_rel_doc_map_recebido.md @@ -0,0 +1,53 @@ +# md_pen_rel_doc_map_recebido + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_rel_doc_map_recebido` ( + `id_mapeamento` bigint(20) NOT NULL, + `codigo_especie` int(11) NOT NULL, + `id_serie` int(11) NOT NULL, + PRIMARY KEY (`id_mapeamento`), + KEY `fk_md_pen_rel_doc_map_rec_seri` (`id_serie`), + KEY `fk_md_pen_rel_doc_map_rec_espe` (`codigo_especie`), + CONSTRAINT `fk_md_pen_rel_doc_map_rec_espe` FOREIGN KEY (`codigo_especie`) REFERENCES `md_pen_especie_documental` (`id_especie`), + CONSTRAINT `fk_md_pen_rel_doc_map_rec_seri` FOREIGN KEY (`id_serie`) REFERENCES `serie` (`id_serie`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_mapeamento | bigint(20) | | false | | | | +| codigo_especie | int(11) | | false | | [md_pen_especie_documental](md_pen_especie_documental.md) | | +| id_serie | int(11) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rel_doc_map_rec_espe | FOREIGN KEY | FOREIGN KEY (codigo_especie) REFERENCES md_pen_especie_documental (id_especie) | +| fk_md_pen_rel_doc_map_rec_seri | FOREIGN KEY | FOREIGN KEY (id_serie) REFERENCES serie (id_serie) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_mapeamento) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_rel_doc_map_rec_espe | KEY fk_md_pen_rel_doc_map_rec_espe (codigo_especie) USING BTREE | +| fk_md_pen_rel_doc_map_rec_seri | KEY fk_md_pen_rel_doc_map_rec_seri (id_serie) USING BTREE | +| PRIMARY | PRIMARY KEY (id_mapeamento) USING BTREE | + +## Relations + +![er](md_pen_rel_doc_map_recebido.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_rel_doc_map_recebido.svg b/docs/schema/md_pen_rel_doc_map_recebido.svg new file mode 100644 index 000000000..0e9bd0d17 --- /dev/null +++ b/docs/schema/md_pen_rel_doc_map_recebido.svg @@ -0,0 +1,77 @@ + + + + + + +md_pen_rel_doc_map_recebido + + + +md_pen_rel_doc_map_recebido + + +md_pen_rel_doc_map_recebido +     +[BASE TABLE] + +id_mapeamento +[bigint(20)] + +codigo_especie +[int(11)] + +id_serie +[int(11)] + + + + +md_pen_especie_documental + + +md_pen_especie_documental +     +[BASE TABLE] + +id_especie     +[int(11)] + +nome_especie     +[varchar(255)] + + + +md_pen_rel_doc_map_recebido:codigo_especie->md_pen_especie_documental:id_especie + + + + + +md_pen_rel_doc_map_enviado + + +md_pen_rel_doc_map_enviado +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +codigo_especie     +[int(11)] + +id_serie     +[int(11)] + + + +md_pen_rel_doc_map_enviado:codigo_especie->md_pen_especie_documental:id_especie + + + + + diff --git a/docs/schema/md_pen_rel_expedir_lote.md b/docs/schema/md_pen_rel_expedir_lote.md new file mode 100644 index 000000000..fbfb4a170 --- /dev/null +++ b/docs/schema/md_pen_rel_expedir_lote.md @@ -0,0 +1,55 @@ +# md_pen_rel_expedir_lote + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_rel_expedir_lote` ( + `id_lote` int(11) NOT NULL, + `id_procedimento` bigint(20) NOT NULL, + `id_andamento` int(11) NOT NULL, + `id_atividade_expedicao` int(11) NOT NULL, + `tentativas` int(11) DEFAULT NULL, + PRIMARY KEY (`id_procedimento`,`id_lote`), + KEY `i01_md_pen_rel_expedir_lote` (`id_procedimento`), + KEY `i02_md_pen_rel_expedir_lote` (`id_lote`), + CONSTRAINT `fk_md_pen_rel_expedir_lote` FOREIGN KEY (`id_lote`) REFERENCES `md_pen_expedir_lote` (`id_lote`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_lote | int(11) | | false | | [md_pen_expedir_lote](md_pen_expedir_lote.md) | | +| id_procedimento | bigint(20) | | false | | | | +| id_andamento | int(11) | | false | | | | +| id_atividade_expedicao | int(11) | | false | | | | +| tentativas | int(11) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rel_expedir_lote | FOREIGN KEY | FOREIGN KEY (id_lote) REFERENCES md_pen_expedir_lote (id_lote) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_procedimento, id_lote) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| i01_md_pen_rel_expedir_lote | KEY i01_md_pen_rel_expedir_lote (id_procedimento) USING BTREE | +| i02_md_pen_rel_expedir_lote | KEY i02_md_pen_rel_expedir_lote (id_lote) USING BTREE | +| PRIMARY | PRIMARY KEY (id_procedimento, id_lote) USING BTREE | + +## Relations + +![er](md_pen_rel_expedir_lote.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_rel_expedir_lote.svg b/docs/schema/md_pen_rel_expedir_lote.svg new file mode 100644 index 000000000..0eacd417e --- /dev/null +++ b/docs/schema/md_pen_rel_expedir_lote.svg @@ -0,0 +1,83 @@ + + + + + + +md_pen_rel_expedir_lote + + + +md_pen_rel_expedir_lote + + +md_pen_rel_expedir_lote +     +[BASE TABLE] + +id_lote +[int(11)] + +id_procedimento +[bigint(20)] + +id_andamento +[int(11)] + +id_atividade_expedicao +[int(11)] + +tentativas +[int(11)] + + + + +md_pen_expedir_lote + + +md_pen_expedir_lote +     +[BASE TABLE] + +id_lote     +[int(11)] + +id_repositorio_destino     +[int(11)] + +str_repositorio_destino     +[varchar(250)] + +id_repositorio_origem     +[int(11)] + +id_unidade_origem     +[int(11)] + +id_unidade_destino     +[int(11)] + +str_unidade_destino     +[varchar(250)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +dth_registro     +[datetime] + + + +md_pen_rel_expedir_lote:id_lote->md_pen_expedir_lote:id_lote + + + + + diff --git a/docs/schema/md_pen_rel_hipotese_legal.md b/docs/schema/md_pen_rel_hipotese_legal.md new file mode 100644 index 000000000..9249f1b38 --- /dev/null +++ b/docs/schema/md_pen_rel_hipotese_legal.md @@ -0,0 +1,58 @@ +# md_pen_rel_hipotese_legal + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_rel_hipotese_legal` ( + `id_mapeamento` bigint(20) NOT NULL, + `id_hipotese_legal` int(11) NOT NULL, + `id_hipotese_legal_pen` int(11) DEFAULT NULL, + `tipo` char(1) NOT NULL DEFAULT 'E', + `sin_ativo` char(1) NOT NULL DEFAULT 'S', + PRIMARY KEY (`id_mapeamento`), + UNIQUE KEY `ak1_rel_hipotese_legal` (`id_hipotese_legal`,`id_hipotese_legal_pen`,`tipo`), + KEY `fk_md_pen_rel_hipotese_pen` (`id_hipotese_legal_pen`), + CONSTRAINT `fk_md_pen_rel_hipotese_legal` FOREIGN KEY (`id_hipotese_legal`) REFERENCES `hipotese_legal` (`id_hipotese_legal`), + CONSTRAINT `fk_md_pen_rel_hipotese_pen` FOREIGN KEY (`id_hipotese_legal_pen`) REFERENCES `md_pen_hipotese_legal` (`id_hipotese_legal`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_mapeamento | bigint(20) | | false | | | | +| id_hipotese_legal | int(11) | | false | | | | +| id_hipotese_legal_pen | int(11) | NULL | true | | [md_pen_hipotese_legal](md_pen_hipotese_legal.md) | | +| tipo | char(1) | 'E' | false | | | | +| sin_ativo | char(1) | 'S' | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| ak1_rel_hipotese_legal | UNIQUE | UNIQUE KEY ak1_rel_hipotese_legal (id_hipotese_legal, id_hipotese_legal_pen, tipo) | +| fk_md_pen_rel_hipotese_legal | FOREIGN KEY | FOREIGN KEY (id_hipotese_legal) REFERENCES hipotese_legal (id_hipotese_legal) | +| fk_md_pen_rel_hipotese_pen | FOREIGN KEY | FOREIGN KEY (id_hipotese_legal_pen) REFERENCES md_pen_hipotese_legal (id_hipotese_legal) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_mapeamento) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_rel_hipotese_pen | KEY fk_md_pen_rel_hipotese_pen (id_hipotese_legal_pen) USING BTREE | +| PRIMARY | PRIMARY KEY (id_mapeamento) USING BTREE | +| ak1_rel_hipotese_legal | UNIQUE KEY ak1_rel_hipotese_legal (id_hipotese_legal, id_hipotese_legal_pen, tipo) USING BTREE | + +## Relations + +![er](md_pen_rel_hipotese_legal.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_rel_hipotese_legal.svg b/docs/schema/md_pen_rel_hipotese_legal.svg new file mode 100644 index 000000000..03a34acbb --- /dev/null +++ b/docs/schema/md_pen_rel_hipotese_legal.svg @@ -0,0 +1,65 @@ + + + + + + +md_pen_rel_hipotese_legal + + + +md_pen_rel_hipotese_legal + + +md_pen_rel_hipotese_legal +     +[BASE TABLE] + +id_mapeamento +[bigint(20)] + +id_hipotese_legal +[int(11)] + +id_hipotese_legal_pen +[int(11)] + +tipo +[char(1)] + +sin_ativo +[char(1)] + + + + +md_pen_hipotese_legal + + +md_pen_hipotese_legal +     +[BASE TABLE] + +id_hipotese_legal     +[int(11)] + +nome     +[varchar(255)] + +sin_ativo     +[char(1)] + +identificacao     +[int(11)] + + + +md_pen_rel_hipotese_legal:id_hipotese_legal_pen->md_pen_hipotese_legal:id_hipotese_legal + + + + + diff --git a/docs/schema/md_pen_rel_processo_apensado.md b/docs/schema/md_pen_rel_processo_apensado.md new file mode 100644 index 000000000..334e570e8 --- /dev/null +++ b/docs/schema/md_pen_rel_processo_apensado.md @@ -0,0 +1,51 @@ +# md_pen_rel_processo_apensado + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_rel_processo_apensado` ( + `numero_registro` char(16) NOT NULL, + `id_procedimento_apensado` bigint(20) NOT NULL, + `protocolo` varchar(50) NOT NULL, + PRIMARY KEY (`numero_registro`,`id_procedimento_apensado`), + KEY `i01_md_pen_rel_processo_apensa` (`numero_registro`), + KEY `i02_md_pen_rel_processo_apensa` (`id_procedimento_apensado`), + CONSTRAINT `fk_md_pen_proc_eletr_apensado` FOREIGN KEY (`numero_registro`) REFERENCES `md_pen_processo_eletronico` (`numero_registro`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | | [md_pen_processo_eletronico](md_pen_processo_eletronico.md) | | +| id_procedimento_apensado | bigint(20) | | false | | | | +| protocolo | varchar(50) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_proc_eletr_apensado | FOREIGN KEY | FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (numero_registro, id_procedimento_apensado) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| i01_md_pen_rel_processo_apensa | KEY i01_md_pen_rel_processo_apensa (numero_registro) USING BTREE | +| i02_md_pen_rel_processo_apensa | KEY i02_md_pen_rel_processo_apensa (id_procedimento_apensado) USING BTREE | +| PRIMARY | PRIMARY KEY (numero_registro, id_procedimento_apensado) USING BTREE | + +## Relations + +![er](md_pen_rel_processo_apensado.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_rel_processo_apensado.svg b/docs/schema/md_pen_rel_processo_apensado.svg new file mode 100644 index 000000000..3c61d3f02 --- /dev/null +++ b/docs/schema/md_pen_rel_processo_apensado.svg @@ -0,0 +1,194 @@ + + + + + + +md_pen_rel_processo_apensado + + + +md_pen_rel_processo_apensado + + +md_pen_rel_processo_apensado +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_procedimento_apensado +[bigint(20)] + +protocolo +[varchar(50)] + + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_rel_processo_apensado:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + diff --git a/docs/schema/md_pen_rel_tarefa_operacao.md b/docs/schema/md_pen_rel_tarefa_operacao.md new file mode 100644 index 000000000..e3810d121 --- /dev/null +++ b/docs/schema/md_pen_rel_tarefa_operacao.md @@ -0,0 +1,49 @@ +# md_pen_rel_tarefa_operacao + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_rel_tarefa_operacao` ( + `id_tarefa` int(11) NOT NULL, + `codigo_operacao` char(2) NOT NULL, + PRIMARY KEY (`id_tarefa`,`codigo_operacao`), + KEY `i01_md_pen_rel_tarefa_operacao` (`id_tarefa`), + KEY `i02_md_pen_rel_tarefa_operacao` (`codigo_operacao`), + CONSTRAINT `fk_md_pen_rel_operacao_tarefa` FOREIGN KEY (`id_tarefa`) REFERENCES `tarefa` (`id_tarefa`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_tarefa | int(11) | | false | | | | +| codigo_operacao | char(2) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rel_operacao_tarefa | FOREIGN KEY | FOREIGN KEY (id_tarefa) REFERENCES tarefa (id_tarefa) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_tarefa, codigo_operacao) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| i01_md_pen_rel_tarefa_operacao | KEY i01_md_pen_rel_tarefa_operacao (id_tarefa) USING BTREE | +| i02_md_pen_rel_tarefa_operacao | KEY i02_md_pen_rel_tarefa_operacao (codigo_operacao) USING BTREE | +| PRIMARY | PRIMARY KEY (id_tarefa, codigo_operacao) USING BTREE | + +## Relations + +![er](md_pen_rel_tarefa_operacao.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_rel_tarefa_operacao.svg b/docs/schema/md_pen_rel_tarefa_operacao.svg new file mode 100644 index 000000000..fa637a814 --- /dev/null +++ b/docs/schema/md_pen_rel_tarefa_operacao.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_rel_tarefa_operacao + + + +md_pen_rel_tarefa_operacao + + +md_pen_rel_tarefa_operacao +     +[BASE TABLE] + +id_tarefa +[int(11)] + +codigo_operacao +[char(2)] + + + + diff --git a/docs/schema/md_pen_rel_tipo_doc_map_rec.md b/docs/schema/md_pen_rel_tipo_doc_map_rec.md new file mode 100644 index 000000000..c06ee916d --- /dev/null +++ b/docs/schema/md_pen_rel_tipo_doc_map_rec.md @@ -0,0 +1,51 @@ +# md_pen_rel_tipo_doc_map_rec + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_rel_tipo_doc_map_rec` ( + `codigo_especie` int(11) NOT NULL, + `id_serie` int(11) NOT NULL, + `sin_padrao` char(2) NOT NULL, + PRIMARY KEY (`codigo_especie`,`id_serie`), + KEY `i01_md_pen_rel_tipo_doc_map_re` (`codigo_especie`), + KEY `i02_md_pen_rel_tipo_doc_map_re` (`id_serie`), + CONSTRAINT `fk_md_pen_rel_tipo_doc_serie` FOREIGN KEY (`id_serie`) REFERENCES `serie` (`id_serie`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| codigo_especie | int(11) | | false | | | | +| id_serie | int(11) | | false | | | | +| sin_padrao | char(2) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_rel_tipo_doc_serie | FOREIGN KEY | FOREIGN KEY (id_serie) REFERENCES serie (id_serie) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (codigo_especie, id_serie) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| i01_md_pen_rel_tipo_doc_map_re | KEY i01_md_pen_rel_tipo_doc_map_re (codigo_especie) USING BTREE | +| i02_md_pen_rel_tipo_doc_map_re | KEY i02_md_pen_rel_tipo_doc_map_re (id_serie) USING BTREE | +| PRIMARY | PRIMARY KEY (codigo_especie, id_serie) USING BTREE | + +## Relations + +![er](md_pen_rel_tipo_doc_map_rec.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_rel_tipo_doc_map_rec.svg b/docs/schema/md_pen_rel_tipo_doc_map_rec.svg new file mode 100644 index 000000000..b86d2c2c2 --- /dev/null +++ b/docs/schema/md_pen_rel_tipo_doc_map_rec.svg @@ -0,0 +1,32 @@ + + + + + + +md_pen_rel_tipo_doc_map_rec + + + +md_pen_rel_tipo_doc_map_rec + + +md_pen_rel_tipo_doc_map_rec +     +[BASE TABLE] + +codigo_especie +[int(11)] + +id_serie +[int(11)] + +sin_padrao +[char(2)] + + + + diff --git a/docs/schema/md_pen_seq_bloco.md b/docs/schema/md_pen_seq_bloco.md new file mode 100644 index 000000000..0fa70b72e --- /dev/null +++ b/docs/schema/md_pen_seq_bloco.md @@ -0,0 +1,43 @@ +# md_pen_seq_bloco + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_bloco` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_bloco.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_bloco.svg b/docs/schema/md_pen_seq_bloco.svg new file mode 100644 index 000000000..2cb0ae14a --- /dev/null +++ b/docs/schema/md_pen_seq_bloco.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_bloco + + + +md_pen_seq_bloco + + +md_pen_seq_bloco +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_bloco_protocolo.md b/docs/schema/md_pen_seq_bloco_protocolo.md new file mode 100644 index 000000000..80ad79dea --- /dev/null +++ b/docs/schema/md_pen_seq_bloco_protocolo.md @@ -0,0 +1,43 @@ +# md_pen_seq_bloco_protocolo + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_bloco_protocolo` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_bloco_protocolo.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_bloco_protocolo.svg b/docs/schema/md_pen_seq_bloco_protocolo.svg new file mode 100644 index 000000000..e8ec47955 --- /dev/null +++ b/docs/schema/md_pen_seq_bloco_protocolo.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_bloco_protocolo + + + +md_pen_seq_bloco_protocolo + + +md_pen_seq_bloco_protocolo +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_envio_comp_digitais.md b/docs/schema/md_pen_seq_envio_comp_digitais.md new file mode 100644 index 000000000..b87336def --- /dev/null +++ b/docs/schema/md_pen_seq_envio_comp_digitais.md @@ -0,0 +1,43 @@ +# md_pen_seq_envio_comp_digitais + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_envio_comp_digitais` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_envio_comp_digitais.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_envio_comp_digitais.svg b/docs/schema/md_pen_seq_envio_comp_digitais.svg new file mode 100644 index 000000000..6f8070585 --- /dev/null +++ b/docs/schema/md_pen_seq_envio_comp_digitais.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_envio_comp_digitais + + + +md_pen_seq_envio_comp_digitais + + +md_pen_seq_envio_comp_digitais +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_expedir_lote.md b/docs/schema/md_pen_seq_expedir_lote.md new file mode 100644 index 000000000..4cb20b553 --- /dev/null +++ b/docs/schema/md_pen_seq_expedir_lote.md @@ -0,0 +1,43 @@ +# md_pen_seq_expedir_lote + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_expedir_lote` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_expedir_lote.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_expedir_lote.svg b/docs/schema/md_pen_seq_expedir_lote.svg new file mode 100644 index 000000000..2a186787e --- /dev/null +++ b/docs/schema/md_pen_seq_expedir_lote.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_expedir_lote + + + +md_pen_seq_expedir_lote + + +md_pen_seq_expedir_lote +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_hipotese_legal.md b/docs/schema/md_pen_seq_hipotese_legal.md new file mode 100644 index 000000000..a83d0f019 --- /dev/null +++ b/docs/schema/md_pen_seq_hipotese_legal.md @@ -0,0 +1,43 @@ +# md_pen_seq_hipotese_legal + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_hipotese_legal` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_hipotese_legal.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_hipotese_legal.svg b/docs/schema/md_pen_seq_hipotese_legal.svg new file mode 100644 index 000000000..037bde364 --- /dev/null +++ b/docs/schema/md_pen_seq_hipotese_legal.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_hipotese_legal + + + +md_pen_seq_hipotese_legal + + +md_pen_seq_hipotese_legal +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_map_tp_procedimento.md b/docs/schema/md_pen_seq_map_tp_procedimento.md new file mode 100644 index 000000000..f6bcb538c --- /dev/null +++ b/docs/schema/md_pen_seq_map_tp_procedimento.md @@ -0,0 +1,43 @@ +# md_pen_seq_map_tp_procedimento + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_map_tp_procedimento` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_map_tp_procedimento.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_map_tp_procedimento.svg b/docs/schema/md_pen_seq_map_tp_procedimento.svg new file mode 100644 index 000000000..f5fb63df3 --- /dev/null +++ b/docs/schema/md_pen_seq_map_tp_procedimento.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_map_tp_procedimento + + + +md_pen_seq_map_tp_procedimento + + +md_pen_seq_map_tp_procedimento +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_orgao_externo.md b/docs/schema/md_pen_seq_orgao_externo.md new file mode 100644 index 000000000..6b45d39ec --- /dev/null +++ b/docs/schema/md_pen_seq_orgao_externo.md @@ -0,0 +1,43 @@ +# md_pen_seq_orgao_externo + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_orgao_externo` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_orgao_externo.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_orgao_externo.svg b/docs/schema/md_pen_seq_orgao_externo.svg new file mode 100644 index 000000000..7882e1873 --- /dev/null +++ b/docs/schema/md_pen_seq_orgao_externo.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_orgao_externo + + + +md_pen_seq_orgao_externo + + +md_pen_seq_orgao_externo +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_procedimento_andam.md b/docs/schema/md_pen_seq_procedimento_andam.md new file mode 100644 index 000000000..bcad5b5e7 --- /dev/null +++ b/docs/schema/md_pen_seq_procedimento_andam.md @@ -0,0 +1,43 @@ +# md_pen_seq_procedimento_andam + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_procedimento_andam` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_procedimento_andam.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_procedimento_andam.svg b/docs/schema/md_pen_seq_procedimento_andam.svg new file mode 100644 index 000000000..46365c494 --- /dev/null +++ b/docs/schema/md_pen_seq_procedimento_andam.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_procedimento_andam + + + +md_pen_seq_procedimento_andam + + +md_pen_seq_procedimento_andam +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_recibo_tramite_hash.md b/docs/schema/md_pen_seq_recibo_tramite_hash.md new file mode 100644 index 000000000..9436b2d60 --- /dev/null +++ b/docs/schema/md_pen_seq_recibo_tramite_hash.md @@ -0,0 +1,43 @@ +# md_pen_seq_recibo_tramite_hash + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_recibo_tramite_hash` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_recibo_tramite_hash.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_recibo_tramite_hash.svg b/docs/schema/md_pen_seq_recibo_tramite_hash.svg new file mode 100644 index 000000000..5dc378a05 --- /dev/null +++ b/docs/schema/md_pen_seq_recibo_tramite_hash.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_recibo_tramite_hash + + + +md_pen_seq_recibo_tramite_hash + + +md_pen_seq_recibo_tramite_hash +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_rel_doc_map_enviado.md b/docs/schema/md_pen_seq_rel_doc_map_enviado.md new file mode 100644 index 000000000..7dc70f21a --- /dev/null +++ b/docs/schema/md_pen_seq_rel_doc_map_enviado.md @@ -0,0 +1,43 @@ +# md_pen_seq_rel_doc_map_enviado + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_rel_doc_map_enviado` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=[Redacted by tbls] DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_rel_doc_map_enviado.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_rel_doc_map_enviado.svg b/docs/schema/md_pen_seq_rel_doc_map_enviado.svg new file mode 100644 index 000000000..46b0de6c4 --- /dev/null +++ b/docs/schema/md_pen_seq_rel_doc_map_enviado.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_rel_doc_map_enviado + + + +md_pen_seq_rel_doc_map_enviado + + +md_pen_seq_rel_doc_map_enviado +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_rel_doc_map_recebid.md b/docs/schema/md_pen_seq_rel_doc_map_recebid.md new file mode 100644 index 000000000..29611245c --- /dev/null +++ b/docs/schema/md_pen_seq_rel_doc_map_recebid.md @@ -0,0 +1,43 @@ +# md_pen_seq_rel_doc_map_recebid + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_rel_doc_map_recebid` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=[Redacted by tbls] DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_rel_doc_map_recebid.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_rel_doc_map_recebid.svg b/docs/schema/md_pen_seq_rel_doc_map_recebid.svg new file mode 100644 index 000000000..6a6b7a807 --- /dev/null +++ b/docs/schema/md_pen_seq_rel_doc_map_recebid.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_rel_doc_map_recebid + + + +md_pen_seq_rel_doc_map_recebid + + +md_pen_seq_rel_doc_map_recebid +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_rel_hipotese_legal.md b/docs/schema/md_pen_seq_rel_hipotese_legal.md new file mode 100644 index 000000000..65e1a5689 --- /dev/null +++ b/docs/schema/md_pen_seq_rel_hipotese_legal.md @@ -0,0 +1,43 @@ +# md_pen_seq_rel_hipotese_legal + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_rel_hipotese_legal` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_rel_hipotese_legal.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_rel_hipotese_legal.svg b/docs/schema/md_pen_seq_rel_hipotese_legal.svg new file mode 100644 index 000000000..213f4b795 --- /dev/null +++ b/docs/schema/md_pen_seq_rel_hipotese_legal.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_rel_hipotese_legal + + + +md_pen_seq_rel_hipotese_legal + + +md_pen_seq_rel_hipotese_legal +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_seq_tramite_pendente.md b/docs/schema/md_pen_seq_tramite_pendente.md new file mode 100644 index 000000000..ff2ec67d8 --- /dev/null +++ b/docs/schema/md_pen_seq_tramite_pendente.md @@ -0,0 +1,43 @@ +# md_pen_seq_tramite_pendente + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_seq_tramite_pendente` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `campo` char(1) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Extra Definition | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | ---------------- | -------- | ------- | ------- | +| id | int(11) | | false | auto_increment | | | | +| campo | char(1) | NULL | true | | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_seq_tramite_pendente.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_seq_tramite_pendente.svg b/docs/schema/md_pen_seq_tramite_pendente.svg new file mode 100644 index 000000000..b17e5a627 --- /dev/null +++ b/docs/schema/md_pen_seq_tramite_pendente.svg @@ -0,0 +1,29 @@ + + + + + + +md_pen_seq_tramite_pendente + + + +md_pen_seq_tramite_pendente + + +md_pen_seq_tramite_pendente +     +[BASE TABLE] + +id +[int(11)] + +campo +[char(1)] + + + + diff --git a/docs/schema/md_pen_tramite.md b/docs/schema/md_pen_tramite.md new file mode 100644 index 000000000..cc44f201a --- /dev/null +++ b/docs/schema/md_pen_tramite.md @@ -0,0 +1,76 @@ +# md_pen_tramite + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_tramite` ( + `numero_registro` char(16) NOT NULL, + `id_tramite` bigint(20) NOT NULL, + `dth_registro` datetime DEFAULT NULL, + `id_andamento` int(11) DEFAULT NULL, + `id_usuario` int(11) DEFAULT NULL, + `id_unidade` int(11) DEFAULT NULL, + `id_repositorio_origem` int(11) DEFAULT NULL, + `id_estrutura_origem` int(11) DEFAULT NULL, + `id_repositorio_destino` int(11) DEFAULT NULL, + `id_estrutura_destino` int(11) DEFAULT NULL, + `sta_tipo_tramite` char(1) DEFAULT NULL, + `ticket_envio_componentes` varchar(10) DEFAULT NULL, + PRIMARY KEY (`id_tramite`), + UNIQUE KEY `UK_md_pen_tramite` (`numero_registro`,`id_tramite`), + KEY `fk_md_pen_tramite_usuario` (`id_usuario`), + KEY `fk_md_pen_tramite_unidade` (`id_unidade`), + CONSTRAINT `fk_md_pen_tramite_proc_eletr` FOREIGN KEY (`numero_registro`) REFERENCES `md_pen_processo_eletronico` (`numero_registro`), + CONSTRAINT `fk_md_pen_tramite_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`), + CONSTRAINT `fk_md_pen_tramite_usuario` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`id_usuario`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | [md_pen_componente_digital](md_pen_componente_digital.md) [md_pen_recibo_tramite](md_pen_recibo_tramite.md) [md_pen_recibo_tramite_enviado](md_pen_recibo_tramite_enviado.md) [md_pen_recibo_tramite_hash](md_pen_recibo_tramite_hash.md) [md_pen_recibo_tramite_recebido](md_pen_recibo_tramite_recebido.md) | [md_pen_processo_eletronico](md_pen_processo_eletronico.md) | | +| id_tramite | bigint(20) | | false | [md_pen_componente_digital](md_pen_componente_digital.md) [md_pen_recibo_tramite](md_pen_recibo_tramite.md) [md_pen_recibo_tramite_enviado](md_pen_recibo_tramite_enviado.md) [md_pen_recibo_tramite_hash](md_pen_recibo_tramite_hash.md) [md_pen_recibo_tramite_recebido](md_pen_recibo_tramite_recebido.md) | | | +| dth_registro | datetime | NULL | true | | | | +| id_andamento | int(11) | NULL | true | | | | +| id_usuario | int(11) | NULL | true | | | | +| id_unidade | int(11) | NULL | true | | | | +| id_repositorio_origem | int(11) | NULL | true | | | | +| id_estrutura_origem | int(11) | NULL | true | | | | +| id_repositorio_destino | int(11) | NULL | true | | | | +| id_estrutura_destino | int(11) | NULL | true | | | | +| sta_tipo_tramite | char(1) | NULL | true | | | | +| ticket_envio_componentes | varchar(10) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_tramite_proc_eletr | FOREIGN KEY | FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro) | +| fk_md_pen_tramite_unidade | FOREIGN KEY | FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade) | +| fk_md_pen_tramite_usuario | FOREIGN KEY | FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_tramite) | +| UK_md_pen_tramite | UNIQUE | UNIQUE KEY UK_md_pen_tramite (numero_registro, id_tramite) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| fk_md_pen_tramite_unidade | KEY fk_md_pen_tramite_unidade (id_unidade) USING BTREE | +| fk_md_pen_tramite_usuario | KEY fk_md_pen_tramite_usuario (id_usuario) USING BTREE | +| PRIMARY | PRIMARY KEY (id_tramite) USING BTREE | +| UK_md_pen_tramite | UNIQUE KEY UK_md_pen_tramite (numero_registro, id_tramite) USING BTREE | + +## Relations + +![er](md_pen_tramite.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_tramite.svg b/docs/schema/md_pen_tramite.svg new file mode 100644 index 000000000..23b48ebaa --- /dev/null +++ b/docs/schema/md_pen_tramite.svg @@ -0,0 +1,320 @@ + + + + + + +md_pen_tramite + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_tramite +[bigint(20)] + +dth_registro +[datetime] + +id_andamento +[int(11)] + +id_usuario +[int(11)] + +id_unidade +[int(11)] + +id_repositorio_origem +[int(11)] + +id_estrutura_origem +[int(11)] + +id_repositorio_destino +[int(11)] + +id_estrutura_destino +[int(11)] + +sta_tipo_tramite +[char(1)] + +ticket_envio_componentes +[varchar(10)] + + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_componente_digital:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_rel_processo_apensado + + +md_pen_rel_processo_apensado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento_apensado     +[bigint(20)] + +protocolo     +[varchar(50)] + + + +md_pen_rel_processo_apensado:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash     +[bigint(20)] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +tipo_recibo     +[char(1)] + +hash_componente_digital     +[varchar(255)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + diff --git a/docs/schema/md_pen_tramite_pendente.md b/docs/schema/md_pen_tramite_pendente.md new file mode 100644 index 000000000..83afe54a7 --- /dev/null +++ b/docs/schema/md_pen_tramite_pendente.md @@ -0,0 +1,45 @@ +# md_pen_tramite_pendente + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_tramite_pendente` ( + `id` int(11) NOT NULL, + `numero_tramite` varchar(255) NOT NULL DEFAULT '', + `id_atividade_expedicao` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id | int(11) | | false | | | | +| numero_tramite | varchar(255) | '' | false | | | | +| id_atividade_expedicao | int(11) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id) USING BTREE | + +## Relations + +![er](md_pen_tramite_pendente.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_tramite_pendente.svg b/docs/schema/md_pen_tramite_pendente.svg new file mode 100644 index 000000000..8e5e86e16 --- /dev/null +++ b/docs/schema/md_pen_tramite_pendente.svg @@ -0,0 +1,32 @@ + + + + + + +md_pen_tramite_pendente + + + +md_pen_tramite_pendente + + +md_pen_tramite_pendente +     +[BASE TABLE] + +id +[int(11)] + +numero_tramite +[varchar(255)] + +id_atividade_expedicao +[int(11)] + + + + diff --git a/docs/schema/md_pen_tramite_processado.md b/docs/schema/md_pen_tramite_processado.md new file mode 100644 index 000000000..05b703eeb --- /dev/null +++ b/docs/schema/md_pen_tramite_processado.md @@ -0,0 +1,49 @@ +# md_pen_tramite_processado + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_tramite_processado` ( + `id_tramite` bigint(20) NOT NULL, + `dth_ultimo_processamento` datetime NOT NULL, + `numero_tentativas` int(11) NOT NULL, + `sin_recebimento_concluido` char(1) NOT NULL, + `tipo_tramite_processo` char(2) NOT NULL DEFAULT 'RP', + PRIMARY KEY (`id_tramite`,`tipo_tramite_processo`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_tramite | bigint(20) | | false | | | | +| dth_ultimo_processamento | datetime | | false | | | | +| numero_tentativas | int(11) | | false | | | | +| sin_recebimento_concluido | char(1) | | false | | | | +| tipo_tramite_processo | char(2) | 'RP' | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_tramite, tipo_tramite_processo) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id_tramite, tipo_tramite_processo) USING BTREE | + +## Relations + +![er](md_pen_tramite_processado.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_tramite_processado.svg b/docs/schema/md_pen_tramite_processado.svg new file mode 100644 index 000000000..c45e0dd8f --- /dev/null +++ b/docs/schema/md_pen_tramite_processado.svg @@ -0,0 +1,38 @@ + + + + + + +md_pen_tramite_processado + + + +md_pen_tramite_processado + + +md_pen_tramite_processado +     +[BASE TABLE] + +id_tramite +[bigint(20)] + +dth_ultimo_processamento +[datetime] + +numero_tentativas +[int(11)] + +sin_recebimento_concluido +[char(1)] + +tipo_tramite_processo +[char(2)] + + + + diff --git a/docs/schema/md_pen_tramite_recibo_envio.md b/docs/schema/md_pen_tramite_recibo_envio.md new file mode 100644 index 000000000..44f67b158 --- /dev/null +++ b/docs/schema/md_pen_tramite_recibo_envio.md @@ -0,0 +1,47 @@ +# md_pen_tramite_recibo_envio + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_tramite_recibo_envio` ( + `numero_registro` char(16) NOT NULL, + `id_tramite` bigint(20) NOT NULL, + `dth_recebimento` datetime NOT NULL, + `hash_assinatura` varchar(1000) NOT NULL, + PRIMARY KEY (`numero_registro`,`id_tramite`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| numero_registro | char(16) | | false | | | | +| id_tramite | bigint(20) | | false | | | | +| dth_recebimento | datetime | | false | | | | +| hash_assinatura | varchar(1000) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (numero_registro, id_tramite) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (numero_registro, id_tramite) USING BTREE | + +## Relations + +![er](md_pen_tramite_recibo_envio.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_tramite_recibo_envio.svg b/docs/schema/md_pen_tramite_recibo_envio.svg new file mode 100644 index 000000000..bce35097c --- /dev/null +++ b/docs/schema/md_pen_tramite_recibo_envio.svg @@ -0,0 +1,35 @@ + + + + + + +md_pen_tramite_recibo_envio + + + +md_pen_tramite_recibo_envio + + +md_pen_tramite_recibo_envio +     +[BASE TABLE] + +numero_registro +[char(16)] + +id_tramite +[bigint(20)] + +dth_recebimento +[datetime] + +hash_assinatura +[varchar(1000)] + + + + diff --git a/docs/schema/md_pen_unidade.md b/docs/schema/md_pen_unidade.md new file mode 100644 index 000000000..e054533c9 --- /dev/null +++ b/docs/schema/md_pen_unidade.md @@ -0,0 +1,49 @@ +# md_pen_unidade + +## Description + +
+Table Definition + +```sql +CREATE TABLE `md_pen_unidade` ( + `id_unidade` int(11) NOT NULL, + `id_unidade_rh` bigint(20) NOT NULL, + `sigla_unidade_rh` varchar(20) DEFAULT NULL, + `nome_unidade_rh` varchar(250) DEFAULT NULL, + PRIMARY KEY (`id_unidade`), + CONSTRAINT `fk_md_pen_unidade_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +``` + +
+ +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| id_unidade | int(11) | | false | | | | +| id_unidade_rh | bigint(20) | | false | | | | +| sigla_unidade_rh | varchar(20) | NULL | true | | | | +| nome_unidade_rh | varchar(250) | NULL | true | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| fk_md_pen_unidade_unidade | FOREIGN KEY | FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade) | +| PRIMARY | PRIMARY KEY | PRIMARY KEY (id_unidade) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| PRIMARY | PRIMARY KEY (id_unidade) USING BTREE | + +## Relations + +![er](md_pen_unidade.svg) + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/schema/md_pen_unidade.svg b/docs/schema/md_pen_unidade.svg new file mode 100644 index 000000000..ffe9c697b --- /dev/null +++ b/docs/schema/md_pen_unidade.svg @@ -0,0 +1,35 @@ + + + + + + +md_pen_unidade + + + +md_pen_unidade + + +md_pen_unidade +     +[BASE TABLE] + +id_unidade +[int(11)] + +id_unidade_rh +[bigint(20)] + +sigla_unidade_rh +[varchar(20)] + +nome_unidade_rh +[varchar(250)] + + + + diff --git a/docs/schema/schema.json b/docs/schema/schema.json new file mode 100644 index 000000000..bb898e52c --- /dev/null +++ b/docs/schema/schema.json @@ -0,0 +1 @@ +{"name":"sei","desc":"","tables":[{"name":"md_pen_bloco","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_unidade","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_usuario","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"descricao","type":"varchar(255)","nullable":true,"default":"NULL","comment":""},{"name":"idx_bloco","type":"varchar(500)","nullable":true,"default":"NULL","comment":""},{"name":"sta_tipo","type":"char(1)","nullable":true,"default":"NULL","comment":""},{"name":"sta_estado","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"fk_tramite_bloco_unidade","def":"KEY fk_tramite_bloco_unidade (id_unidade) USING BTREE","table":"md_pen_bloco","columns":["id_unidade"],"comment":""},{"name":"fk_tramite_bloco_usuario","def":"KEY fk_tramite_bloco_usuario (id_usuario) USING BTREE","table":"md_pen_bloco","columns":["id_usuario"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_bloco","columns":["id"],"comment":""}],"constraints":[{"name":"fk_tramite_bloco_unidade","type":"FOREIGN KEY","def":"FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade)","table":"md_pen_bloco","referenced_table":"unidade","columns":["id_unidade"],"referenced_columns":["id_unidade"],"comment":""},{"name":"fk_tramite_bloco_usuario","type":"FOREIGN KEY","def":"FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario)","table":"md_pen_bloco","referenced_table":"usuario","columns":["id_usuario"],"referenced_columns":["id_usuario"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_bloco","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_bloco` (\n `id` int(11) NOT NULL,\n `id_unidade` int(11) DEFAULT NULL,\n `id_usuario` int(11) DEFAULT NULL,\n `descricao` varchar(255) DEFAULT NULL,\n `idx_bloco` varchar(500) DEFAULT NULL,\n `sta_tipo` char(1) DEFAULT NULL,\n `sta_estado` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`),\n KEY `fk_tramite_bloco_unidade` (`id_unidade`),\n KEY `fk_tramite_bloco_usuario` (`id_usuario`),\n CONSTRAINT `fk_tramite_bloco_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`),\n CONSTRAINT `fk_tramite_bloco_usuario` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`id_usuario`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_bloco_protocolo","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_protocolo","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_tramita_em_bloco","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"sequencia","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"idx_rel_bloco_protocolo","type":"varchar(4000)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_bloco_protocolo","columns":["id"],"comment":""},{"name":"UK_md_pen_bloco_protocolo","def":"UNIQUE KEY UK_md_pen_bloco_protocolo (id_protocolo, id_tramita_em_bloco, sequencia) USING BTREE","table":"md_pen_bloco_protocolo","columns":["id_protocolo","id_tramita_em_bloco","sequencia"],"comment":""}],"constraints":[{"name":"fk_bloco_protocolo","type":"FOREIGN KEY","def":"FOREIGN KEY (id_protocolo) REFERENCES protocolo (id_protocolo)","table":"md_pen_bloco_protocolo","referenced_table":"protocolo","columns":["id_protocolo"],"referenced_columns":["id_protocolo"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_bloco_protocolo","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""},{"name":"UK_md_pen_bloco_protocolo","type":"UNIQUE","def":"UNIQUE KEY UK_md_pen_bloco_protocolo (id_protocolo, id_tramita_em_bloco, sequencia)","table":"md_pen_bloco_protocolo","referenced_table":null,"columns":["id_protocolo","id_tramita_em_bloco","sequencia"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_bloco_protocolo` (\n `id` int(11) NOT NULL,\n `id_protocolo` bigint(20) NOT NULL,\n `id_tramita_em_bloco` int(11) NOT NULL,\n `sequencia` int(11) DEFAULT NULL,\n `idx_rel_bloco_protocolo` varchar(4000) DEFAULT NULL,\n PRIMARY KEY (`id`),\n UNIQUE KEY `UK_md_pen_bloco_protocolo` (`id_protocolo`,`id_tramita_em_bloco`,`sequencia`),\n CONSTRAINT `fk_bloco_protocolo` FOREIGN KEY (`id_protocolo`) REFERENCES `protocolo` (`id_protocolo`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_componente_digital","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_procedimento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_documento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_anexo","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"protocolo","type":"varchar(50)","nullable":false,"default":null,"comment":""},{"name":"nome","type":"varchar(255)","nullable":false,"default":null,"comment":""},{"name":"hash_conteudo","type":"varchar(255)","nullable":false,"default":null,"comment":""},{"name":"algoritmo_hash","type":"varchar(20)","nullable":false,"default":null,"comment":""},{"name":"tipo_conteudo","type":"char(3)","nullable":false,"default":null,"comment":""},{"name":"mime_type","type":"varchar(100)","nullable":false,"default":null,"comment":""},{"name":"dados_complementares","type":"varchar(1000)","nullable":true,"default":"NULL","comment":""},{"name":"tamanho","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"ordem","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"sin_enviar","type":"char(1)","nullable":false,"default":"'N'","comment":""},{"name":"codigo_especie","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"nome_especie_produtor","type":"varchar(255)","nullable":true,"default":"NULL","comment":""},{"name":"ordem_documento","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_procedimento_anexado","type":"bigint(20)","nullable":true,"default":"NULL","comment":""},{"name":"protocolo_procedimento_anexado","type":"varchar(50)","nullable":true,"default":"NULL","comment":""},{"name":"ordem_documento_anexado","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"ordem_documento_referenciado","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_anexo_imutavel","type":"bigint(20)","nullable":true,"default":"NULL","comment":""},{"name":"tarja_legada","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"fk_md_pen_comp_dig_anexo","def":"KEY fk_md_pen_comp_dig_anexo (id_anexo) USING BTREE","table":"md_pen_componente_digital","columns":["id_anexo"],"comment":""},{"name":"fk_md_pen_comp_dig_tramite","def":"KEY fk_md_pen_comp_dig_tramite (numero_registro, id_tramite) USING BTREE","table":"md_pen_componente_digital","columns":["numero_registro","id_tramite"],"comment":""},{"name":"i01_md_pen_componente_digital","def":"KEY i01_md_pen_componente_digital (numero_registro) USING BTREE","table":"md_pen_componente_digital","columns":["numero_registro"],"comment":""},{"name":"i02_md_pen_componente_digital","def":"KEY i02_md_pen_componente_digital (id_procedimento) USING BTREE","table":"md_pen_componente_digital","columns":["id_procedimento"],"comment":""},{"name":"i03_md_pen_componente_digital","def":"KEY i03_md_pen_componente_digital (id_documento) USING BTREE","table":"md_pen_componente_digital","columns":["id_documento"],"comment":""},{"name":"i04_md_pen_componente_digital","def":"KEY i04_md_pen_componente_digital (id_tramite) USING BTREE","table":"md_pen_componente_digital","columns":["id_tramite"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (numero_registro, id_procedimento, id_documento, id_tramite, ordem_documento, ordem) USING BTREE","table":"md_pen_componente_digital","columns":["numero_registro","id_procedimento","id_documento","id_tramite","ordem_documento","ordem"],"comment":""}],"constraints":[{"name":"fk_md_pen_comp_dig_anexo","type":"FOREIGN KEY","def":"FOREIGN KEY (id_anexo) REFERENCES anexo (id_anexo)","table":"md_pen_componente_digital","referenced_table":"anexo","columns":["id_anexo"],"referenced_columns":["id_anexo"],"comment":""},{"name":"fk_md_pen_comp_dig_documento","type":"FOREIGN KEY","def":"FOREIGN KEY (id_documento) REFERENCES documento (id_documento)","table":"md_pen_componente_digital","referenced_table":"documento","columns":["id_documento"],"referenced_columns":["id_documento"],"comment":""},{"name":"fk_md_pen_comp_dig_procediment","type":"FOREIGN KEY","def":"FOREIGN KEY (id_procedimento) REFERENCES procedimento (id_procedimento)","table":"md_pen_componente_digital","referenced_table":"procedimento","columns":["id_procedimento"],"referenced_columns":["id_procedimento"],"comment":""},{"name":"fk_md_pen_comp_dig_proc_eletr","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro)","table":"md_pen_componente_digital","referenced_table":"md_pen_processo_eletronico","columns":["numero_registro"],"referenced_columns":["numero_registro"],"comment":""},{"name":"fk_md_pen_comp_dig_tramite","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","table":"md_pen_componente_digital","referenced_table":"md_pen_tramite","columns":["numero_registro","id_tramite"],"referenced_columns":["numero_registro","id_tramite"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (numero_registro, id_procedimento, id_documento, id_tramite, ordem_documento, ordem)","table":"md_pen_componente_digital","referenced_table":null,"columns":["numero_registro","id_procedimento","id_documento","id_tramite","ordem_documento","ordem"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_componente_digital` (\n `numero_registro` char(16) NOT NULL,\n `id_procedimento` bigint(20) NOT NULL,\n `id_documento` bigint(20) NOT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `id_anexo` int(11) DEFAULT NULL,\n `protocolo` varchar(50) NOT NULL,\n `nome` varchar(255) NOT NULL,\n `hash_conteudo` varchar(255) NOT NULL,\n `algoritmo_hash` varchar(20) NOT NULL,\n `tipo_conteudo` char(3) NOT NULL,\n `mime_type` varchar(100) NOT NULL,\n `dados_complementares` varchar(1000) DEFAULT NULL,\n `tamanho` bigint(20) NOT NULL,\n `ordem` int(11) NOT NULL,\n `sin_enviar` char(1) NOT NULL DEFAULT 'N',\n `codigo_especie` int(11) DEFAULT NULL,\n `nome_especie_produtor` varchar(255) DEFAULT NULL,\n `ordem_documento` int(11) NOT NULL,\n `id_procedimento_anexado` bigint(20) DEFAULT NULL,\n `protocolo_procedimento_anexado` varchar(50) DEFAULT NULL,\n `ordem_documento_anexado` int(11) DEFAULT NULL,\n `ordem_documento_referenciado` int(11) DEFAULT NULL,\n `id_anexo_imutavel` bigint(20) DEFAULT NULL,\n `tarja_legada` char(1) DEFAULT NULL,\n PRIMARY KEY (`numero_registro`,`id_procedimento`,`id_documento`,`id_tramite`,`ordem_documento`,`ordem`),\n KEY `i01_md_pen_componente_digital` (`numero_registro`),\n KEY `i02_md_pen_componente_digital` (`id_procedimento`),\n KEY `i03_md_pen_componente_digital` (`id_documento`),\n KEY `i04_md_pen_componente_digital` (`id_tramite`),\n KEY `fk_md_pen_comp_dig_anexo` (`id_anexo`),\n KEY `fk_md_pen_comp_dig_tramite` (`numero_registro`,`id_tramite`),\n CONSTRAINT `fk_md_pen_comp_dig_anexo` FOREIGN KEY (`id_anexo`) REFERENCES `anexo` (`id_anexo`),\n CONSTRAINT `fk_md_pen_comp_dig_documento` FOREIGN KEY (`id_documento`) REFERENCES `documento` (`id_documento`),\n CONSTRAINT `fk_md_pen_comp_dig_proc_eletr` FOREIGN KEY (`numero_registro`) REFERENCES `md_pen_processo_eletronico` (`numero_registro`),\n CONSTRAINT `fk_md_pen_comp_dig_procediment` FOREIGN KEY (`id_procedimento`) REFERENCES `procedimento` (`id_procedimento`),\n CONSTRAINT `fk_md_pen_comp_dig_tramite` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_envio_comp_digitais","type":"BASE TABLE","comment":"","columns":[{"name":"id_comp_digitais","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_estrutura","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"str_estrutura","type":"longtext","nullable":false,"default":null,"comment":""},{"name":"id_unidade_pen","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"str_unidade_pen","type":"longtext","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id_comp_digitais) USING BTREE","table":"md_pen_envio_comp_digitais","columns":["id_comp_digitais"],"comment":""},{"name":"UK_md_pen_envio_comp_digitais","def":"UNIQUE KEY UK_md_pen_envio_comp_digitais (id_estrutura, id_unidade_pen) USING BTREE","table":"md_pen_envio_comp_digitais","columns":["id_estrutura","id_unidade_pen"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_comp_digitais)","table":"md_pen_envio_comp_digitais","referenced_table":null,"columns":["id_comp_digitais"],"referenced_columns":null,"comment":""},{"name":"UK_md_pen_envio_comp_digitais","type":"UNIQUE","def":"UNIQUE KEY UK_md_pen_envio_comp_digitais (id_estrutura, id_unidade_pen)","table":"md_pen_envio_comp_digitais","referenced_table":null,"columns":["id_estrutura","id_unidade_pen"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_envio_comp_digitais` (\n `id_comp_digitais` bigint(20) NOT NULL,\n `id_estrutura` int(11) NOT NULL,\n `str_estrutura` longtext NOT NULL,\n `id_unidade_pen` int(11) NOT NULL,\n `str_unidade_pen` longtext NOT NULL,\n PRIMARY KEY (`id_comp_digitais`),\n UNIQUE KEY `UK_md_pen_envio_comp_digitais` (`id_estrutura`,`id_unidade_pen`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_especie_documental","type":"BASE TABLE","comment":"","columns":[{"name":"id_especie","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"nome_especie","type":"varchar(255)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id_especie) USING BTREE","table":"md_pen_especie_documental","columns":["id_especie"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_especie)","table":"md_pen_especie_documental","referenced_table":null,"columns":["id_especie"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_especie_documental` (\n `id_especie` int(11) NOT NULL,\n `nome_especie` varchar(255) NOT NULL,\n PRIMARY KEY (`id_especie`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_expedir_lote","type":"BASE TABLE","comment":"","columns":[{"name":"id_lote","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_repositorio_destino","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"str_repositorio_destino","type":"varchar(250)","nullable":false,"default":null,"comment":""},{"name":"id_repositorio_origem","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_unidade_origem","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_unidade_destino","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"str_unidade_destino","type":"varchar(250)","nullable":false,"default":null,"comment":""},{"name":"id_usuario","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_unidade","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"dth_registro","type":"datetime","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"fk_md_pen_expedir_lote_unidade","def":"KEY fk_md_pen_expedir_lote_unidade (id_unidade) USING BTREE","table":"md_pen_expedir_lote","columns":["id_unidade"],"comment":""},{"name":"fk_md_pen_expedir_lote_usuario","def":"KEY fk_md_pen_expedir_lote_usuario (id_usuario) USING BTREE","table":"md_pen_expedir_lote","columns":["id_usuario"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_lote) USING BTREE","table":"md_pen_expedir_lote","columns":["id_lote"],"comment":""}],"constraints":[{"name":"fk_md_pen_expedir_lote_unidade","type":"FOREIGN KEY","def":"FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade)","table":"md_pen_expedir_lote","referenced_table":"unidade","columns":["id_unidade"],"referenced_columns":["id_unidade"],"comment":""},{"name":"fk_md_pen_expedir_lote_usuario","type":"FOREIGN KEY","def":"FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario)","table":"md_pen_expedir_lote","referenced_table":"usuario","columns":["id_usuario"],"referenced_columns":["id_usuario"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_lote)","table":"md_pen_expedir_lote","referenced_table":null,"columns":["id_lote"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_expedir_lote` (\n `id_lote` int(11) NOT NULL,\n `id_repositorio_destino` int(11) NOT NULL,\n `str_repositorio_destino` varchar(250) NOT NULL,\n `id_repositorio_origem` int(11) NOT NULL,\n `id_unidade_origem` int(11) NOT NULL,\n `id_unidade_destino` int(11) NOT NULL,\n `str_unidade_destino` varchar(250) NOT NULL,\n `id_usuario` int(11) NOT NULL,\n `id_unidade` int(11) NOT NULL,\n `dth_registro` datetime NOT NULL,\n PRIMARY KEY (`id_lote`),\n KEY `fk_md_pen_expedir_lote_usuario` (`id_usuario`),\n KEY `fk_md_pen_expedir_lote_unidade` (`id_unidade`),\n CONSTRAINT `fk_md_pen_expedir_lote_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`),\n CONSTRAINT `fk_md_pen_expedir_lote_usuario` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`id_usuario`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_hipotese_legal","type":"BASE TABLE","comment":"","columns":[{"name":"id_hipotese_legal","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"nome","type":"varchar(255)","nullable":false,"default":null,"comment":""},{"name":"sin_ativo","type":"char(1)","nullable":false,"default":"'S'","comment":""},{"name":"identificacao","type":"int(11)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id_hipotese_legal) USING BTREE","table":"md_pen_hipotese_legal","columns":["id_hipotese_legal"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_hipotese_legal)","table":"md_pen_hipotese_legal","referenced_table":null,"columns":["id_hipotese_legal"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_hipotese_legal` (\n `id_hipotese_legal` int(11) NOT NULL,\n `nome` varchar(255) NOT NULL,\n `sin_ativo` char(1) NOT NULL DEFAULT 'S',\n `identificacao` int(11) DEFAULT NULL,\n PRIMARY KEY (`id_hipotese_legal`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_map_tipo_processo","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_map_orgao","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_tipo_processo_origem","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_tipo_processo_destino","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"nome_tipo_processo","type":"varchar(250)","nullable":true,"default":"NULL","comment":""},{"name":"sin_ativo","type":"char(1)","nullable":false,"default":"'S'","comment":""},{"name":"id_unidade","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"dth_criacao","type":"datetime","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"fk_md_pen_mapeamento_orgao","def":"KEY fk_md_pen_mapeamento_orgao (id_map_orgao) USING BTREE","table":"md_pen_map_tipo_processo","columns":["id_map_orgao"],"comment":""},{"name":"fk_md_pen_map_tipo_processo","def":"KEY fk_md_pen_map_tipo_processo (id_unidade) USING BTREE","table":"md_pen_map_tipo_processo","columns":["id_unidade"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_map_tipo_processo","columns":["id"],"comment":""}],"constraints":[{"name":"fk_md_pen_mapeamento_orgao","type":"FOREIGN KEY","def":"FOREIGN KEY (id_map_orgao) REFERENCES md_pen_orgao_externo (id)","table":"md_pen_map_tipo_processo","referenced_table":"md_pen_orgao_externo","columns":["id_map_orgao"],"referenced_columns":["id"],"comment":""},{"name":"fk_md_pen_map_tipo_processo","type":"FOREIGN KEY","def":"FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade)","table":"md_pen_map_tipo_processo","referenced_table":"unidade","columns":["id_unidade"],"referenced_columns":["id_unidade"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_map_tipo_processo","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_map_tipo_processo` (\n `id` int(11) NOT NULL,\n `id_map_orgao` int(11) NOT NULL,\n `id_tipo_processo_origem` int(11) NOT NULL,\n `id_tipo_processo_destino` int(11) DEFAULT NULL,\n `nome_tipo_processo` varchar(250) DEFAULT NULL,\n `sin_ativo` char(1) NOT NULL DEFAULT 'S',\n `id_unidade` int(11) NOT NULL,\n `dth_criacao` datetime NOT NULL,\n PRIMARY KEY (`id`),\n KEY `fk_md_pen_map_tipo_processo` (`id_unidade`),\n KEY `fk_md_pen_mapeamento_orgao` (`id_map_orgao`),\n CONSTRAINT `fk_md_pen_map_tipo_processo` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`),\n CONSTRAINT `fk_md_pen_mapeamento_orgao` FOREIGN KEY (`id_map_orgao`) REFERENCES `md_pen_orgao_externo` (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_orgao_externo","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_orgao_origem","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"str_orgao_origem","type":"varchar(250)","nullable":false,"default":null,"comment":""},{"name":"id_estrutura_origem","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"str_estrutura_origem","type":"varchar(250)","nullable":false,"default":null,"comment":""},{"name":"id_orgao_destino","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"str_orgao_destino","type":"varchar(250)","nullable":false,"default":null,"comment":""},{"name":"sin_ativo","type":"char(1)","nullable":false,"default":"'S'","comment":""},{"name":"id_unidade","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"dth_criacao","type":"datetime","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"fk_md_pen_orgao_externo","def":"KEY fk_md_pen_orgao_externo (id_unidade) USING BTREE","table":"md_pen_orgao_externo","columns":["id_unidade"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_orgao_externo","columns":["id"],"comment":""}],"constraints":[{"name":"fk_md_pen_orgao_externo","type":"FOREIGN KEY","def":"FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade)","table":"md_pen_orgao_externo","referenced_table":"unidade","columns":["id_unidade"],"referenced_columns":["id_unidade"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_orgao_externo","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_orgao_externo` (\n `id` int(11) NOT NULL,\n `id_orgao_origem` int(11) NOT NULL,\n `str_orgao_origem` varchar(250) NOT NULL,\n `id_estrutura_origem` int(11) NOT NULL,\n `str_estrutura_origem` varchar(250) NOT NULL,\n `id_orgao_destino` int(11) NOT NULL,\n `str_orgao_destino` varchar(250) NOT NULL,\n `sin_ativo` char(1) NOT NULL DEFAULT 'S',\n `id_unidade` int(11) NOT NULL,\n `dth_criacao` datetime NOT NULL,\n PRIMARY KEY (`id`),\n KEY `fk_md_pen_orgao_externo` (`id_unidade`),\n CONSTRAINT `fk_md_pen_orgao_externo` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_parametro","type":"BASE TABLE","comment":"","columns":[{"name":"nome","type":"varchar(100)","nullable":false,"default":null,"comment":""},{"name":"descricao","type":"varchar(255)","nullable":true,"default":"NULL","comment":""},{"name":"sequencia","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"valor","type":"longtext","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (nome) USING BTREE","table":"md_pen_parametro","columns":["nome"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (nome)","table":"md_pen_parametro","referenced_table":null,"columns":["nome"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_parametro` (\n `nome` varchar(100) NOT NULL,\n `descricao` varchar(255) DEFAULT NULL,\n `sequencia` int(11) DEFAULT NULL,\n `valor` longtext DEFAULT NULL,\n PRIMARY KEY (`nome`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_procedimento_andamento","type":"BASE TABLE","comment":"","columns":[{"name":"id_andamento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_procedimento","type":"bigint(20)","nullable":true,"default":"NULL","comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"situacao","type":"char(1)","nullable":false,"default":"'N'","comment":""},{"name":"data","type":"datetime","nullable":false,"default":null,"comment":""},{"name":"mensagem","type":"varchar(255)","nullable":false,"default":null,"comment":""},{"name":"hash","type":"char(32)","nullable":false,"default":null,"comment":""},{"name":"id_tarefa","type":"varchar(255)","nullable":false,"default":null,"comment":""},{"name":"numero_registro","type":"char(16)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id_andamento) USING BTREE","table":"md_pen_procedimento_andamento","columns":["id_andamento"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_andamento)","table":"md_pen_procedimento_andamento","referenced_table":null,"columns":["id_andamento"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_procedimento_andamento` (\n `id_andamento` bigint(20) NOT NULL,\n `id_procedimento` bigint(20) DEFAULT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `situacao` char(1) NOT NULL DEFAULT 'N',\n `data` datetime NOT NULL,\n `mensagem` varchar(255) NOT NULL,\n `hash` char(32) NOT NULL,\n `id_tarefa` varchar(255) NOT NULL,\n `numero_registro` char(16) DEFAULT NULL,\n PRIMARY KEY (`id_andamento`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_processo_eletronico","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_procedimento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"sta_tipo_protocolo","type":"varchar(1)","nullable":false,"default":"'P'","comment":""}],"indexes":[{"name":"fk_md_pen_proc_eletr_procedim","def":"KEY fk_md_pen_proc_eletr_procedim (id_procedimento) USING BTREE","table":"md_pen_processo_eletronico","columns":["id_procedimento"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (numero_registro) USING BTREE","table":"md_pen_processo_eletronico","columns":["numero_registro"],"comment":""},{"name":"UK_md_pen_processo_eletronico","def":"UNIQUE KEY UK_md_pen_processo_eletronico (numero_registro, id_procedimento) USING BTREE","table":"md_pen_processo_eletronico","columns":["numero_registro","id_procedimento"],"comment":""}],"constraints":[{"name":"fk_md_pen_proc_eletr_procedim","type":"FOREIGN KEY","def":"FOREIGN KEY (id_procedimento) REFERENCES procedimento (id_procedimento)","table":"md_pen_processo_eletronico","referenced_table":"procedimento","columns":["id_procedimento"],"referenced_columns":["id_procedimento"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (numero_registro)","table":"md_pen_processo_eletronico","referenced_table":null,"columns":["numero_registro"],"referenced_columns":null,"comment":""},{"name":"UK_md_pen_processo_eletronico","type":"UNIQUE","def":"UNIQUE KEY UK_md_pen_processo_eletronico (numero_registro, id_procedimento)","table":"md_pen_processo_eletronico","referenced_table":null,"columns":["numero_registro","id_procedimento"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_processo_eletronico` (\n `numero_registro` char(16) NOT NULL,\n `id_procedimento` bigint(20) NOT NULL,\n `sta_tipo_protocolo` varchar(1) NOT NULL DEFAULT 'P',\n PRIMARY KEY (`numero_registro`),\n UNIQUE KEY `UK_md_pen_processo_eletronico` (`numero_registro`,`id_procedimento`),\n KEY `fk_md_pen_proc_eletr_procedim` (`id_procedimento`),\n CONSTRAINT `fk_md_pen_proc_eletr_procedim` FOREIGN KEY (`id_procedimento`) REFERENCES `procedimento` (`id_procedimento`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_protocolo","type":"BASE TABLE","comment":"","columns":[{"name":"id_protocolo","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"sin_obteve_recusa","type":"char(1)","nullable":false,"default":"'N'","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id_protocolo) USING BTREE","table":"md_pen_protocolo","columns":["id_protocolo"],"comment":""}],"constraints":[{"name":"fk_md_pen_protocolo_protocolo","type":"FOREIGN KEY","def":"FOREIGN KEY (id_protocolo) REFERENCES protocolo (id_protocolo)","table":"md_pen_protocolo","referenced_table":"protocolo","columns":["id_protocolo"],"referenced_columns":["id_protocolo"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_protocolo)","table":"md_pen_protocolo","referenced_table":null,"columns":["id_protocolo"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_protocolo` (\n `id_protocolo` bigint(20) NOT NULL,\n `sin_obteve_recusa` char(1) NOT NULL DEFAULT 'N',\n PRIMARY KEY (`id_protocolo`),\n CONSTRAINT `fk_md_pen_protocolo_protocolo` FOREIGN KEY (`id_protocolo`) REFERENCES `protocolo` (`id_protocolo`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_recibo_tramite","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"dth_recebimento","type":"datetime","nullable":false,"default":null,"comment":""},{"name":"hash_assinatura","type":"varchar(1000)","nullable":false,"default":null,"comment":""},{"name":"cadeia_certificado","type":"longtext","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (numero_registro, id_tramite) USING BTREE","table":"md_pen_recibo_tramite","columns":["numero_registro","id_tramite"],"comment":""}],"constraints":[{"name":"fk_md_pen_rec_tramite_tramite","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","table":"md_pen_recibo_tramite","referenced_table":"md_pen_tramite","columns":["numero_registro","id_tramite"],"referenced_columns":["numero_registro","id_tramite"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (numero_registro, id_tramite)","table":"md_pen_recibo_tramite","referenced_table":null,"columns":["numero_registro","id_tramite"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_recibo_tramite` (\n `numero_registro` char(16) NOT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `dth_recebimento` datetime NOT NULL,\n `hash_assinatura` varchar(1000) NOT NULL,\n `cadeia_certificado` longtext DEFAULT NULL,\n PRIMARY KEY (`numero_registro`,`id_tramite`),\n CONSTRAINT `fk_md_pen_rec_tramite_tramite` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_recibo_tramite_enviado","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"dth_recebimento","type":"datetime","nullable":false,"default":null,"comment":""},{"name":"hash_assinatura","type":"varchar(1000)","nullable":false,"default":null,"comment":""},{"name":"cadeia_certificado","type":"longtext","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (numero_registro, id_tramite) USING BTREE","table":"md_pen_recibo_tramite_enviado","columns":["numero_registro","id_tramite"],"comment":""}],"constraints":[{"name":"fk_md_pen_rec_tram_env_tram","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","table":"md_pen_recibo_tramite_enviado","referenced_table":"md_pen_tramite","columns":["numero_registro","id_tramite"],"referenced_columns":["numero_registro","id_tramite"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (numero_registro, id_tramite)","table":"md_pen_recibo_tramite_enviado","referenced_table":null,"columns":["numero_registro","id_tramite"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_recibo_tramite_enviado` (\n `numero_registro` char(16) NOT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `dth_recebimento` datetime NOT NULL,\n `hash_assinatura` varchar(1000) NOT NULL,\n `cadeia_certificado` longtext DEFAULT NULL,\n PRIMARY KEY (`numero_registro`,`id_tramite`),\n CONSTRAINT `fk_md_pen_rec_tram_env_tram` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_recibo_tramite_hash","type":"BASE TABLE","comment":"","columns":[{"name":"id_tramite_hash","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"tipo_recibo","type":"char(1)","nullable":false,"default":null,"comment":""},{"name":"hash_componente_digital","type":"varchar(255)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"fk_md_pen_rec_tram_hash_tram","def":"KEY fk_md_pen_rec_tram_hash_tram (numero_registro, id_tramite) USING BTREE","table":"md_pen_recibo_tramite_hash","columns":["numero_registro","id_tramite"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_tramite_hash) USING BTREE","table":"md_pen_recibo_tramite_hash","columns":["id_tramite_hash"],"comment":""}],"constraints":[{"name":"fk_md_pen_rec_tram_hash_tram","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","table":"md_pen_recibo_tramite_hash","referenced_table":"md_pen_tramite","columns":["numero_registro","id_tramite"],"referenced_columns":["numero_registro","id_tramite"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_tramite_hash)","table":"md_pen_recibo_tramite_hash","referenced_table":null,"columns":["id_tramite_hash"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_recibo_tramite_hash` (\n `id_tramite_hash` bigint(20) NOT NULL,\n `numero_registro` char(16) NOT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `tipo_recibo` char(1) NOT NULL,\n `hash_componente_digital` varchar(255) NOT NULL,\n PRIMARY KEY (`id_tramite_hash`),\n KEY `fk_md_pen_rec_tram_hash_tram` (`numero_registro`,`id_tramite`),\n CONSTRAINT `fk_md_pen_rec_tram_hash_tram` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_recibo_tramite_recebido","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"dth_recebimento","type":"datetime","nullable":false,"default":null,"comment":""},{"name":"hash_assinatura","type":"varchar(1000)","nullable":false,"default":null,"comment":""},{"name":"cadeia_certificado","type":"longtext","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (numero_registro, id_tramite) USING BTREE","table":"md_pen_recibo_tramite_recebido","columns":["numero_registro","id_tramite"],"comment":""}],"constraints":[{"name":"fk_md_pen_recibo_receb_tram","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","table":"md_pen_recibo_tramite_recebido","referenced_table":"md_pen_tramite","columns":["numero_registro","id_tramite"],"referenced_columns":["numero_registro","id_tramite"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (numero_registro, id_tramite)","table":"md_pen_recibo_tramite_recebido","referenced_table":null,"columns":["numero_registro","id_tramite"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_recibo_tramite_recebido` (\n `numero_registro` char(16) NOT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `dth_recebimento` datetime NOT NULL,\n `hash_assinatura` varchar(1000) NOT NULL,\n `cadeia_certificado` longtext DEFAULT NULL,\n PRIMARY KEY (`numero_registro`,`id_tramite`),\n CONSTRAINT `fk_md_pen_recibo_receb_tram` FOREIGN KEY (`numero_registro`, `id_tramite`) REFERENCES `md_pen_tramite` (`numero_registro`, `id_tramite`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_rel_doc_map_enviado","type":"BASE TABLE","comment":"","columns":[{"name":"id_mapeamento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"codigo_especie","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_serie","type":"int(11)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"fk_md_pen_rel_doc_map_env_espe","def":"KEY fk_md_pen_rel_doc_map_env_espe (codigo_especie) USING BTREE","table":"md_pen_rel_doc_map_enviado","columns":["codigo_especie"],"comment":""},{"name":"fk_md_pen_rel_doc_map_env_seri","def":"KEY fk_md_pen_rel_doc_map_env_seri (id_serie) USING BTREE","table":"md_pen_rel_doc_map_enviado","columns":["id_serie"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_mapeamento) USING BTREE","table":"md_pen_rel_doc_map_enviado","columns":["id_mapeamento"],"comment":""}],"constraints":[{"name":"fk_md_pen_rel_doc_map_env_espe","type":"FOREIGN KEY","def":"FOREIGN KEY (codigo_especie) REFERENCES md_pen_especie_documental (id_especie)","table":"md_pen_rel_doc_map_enviado","referenced_table":"md_pen_especie_documental","columns":["codigo_especie"],"referenced_columns":["id_especie"],"comment":""},{"name":"fk_md_pen_rel_doc_map_env_seri","type":"FOREIGN KEY","def":"FOREIGN KEY (id_serie) REFERENCES serie (id_serie)","table":"md_pen_rel_doc_map_enviado","referenced_table":"serie","columns":["id_serie"],"referenced_columns":["id_serie"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_mapeamento)","table":"md_pen_rel_doc_map_enviado","referenced_table":null,"columns":["id_mapeamento"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_rel_doc_map_enviado` (\n `id_mapeamento` bigint(20) NOT NULL,\n `codigo_especie` int(11) NOT NULL,\n `id_serie` int(11) NOT NULL,\n PRIMARY KEY (`id_mapeamento`),\n KEY `fk_md_pen_rel_doc_map_env_seri` (`id_serie`),\n KEY `fk_md_pen_rel_doc_map_env_espe` (`codigo_especie`),\n CONSTRAINT `fk_md_pen_rel_doc_map_env_espe` FOREIGN KEY (`codigo_especie`) REFERENCES `md_pen_especie_documental` (`id_especie`),\n CONSTRAINT `fk_md_pen_rel_doc_map_env_seri` FOREIGN KEY (`id_serie`) REFERENCES `serie` (`id_serie`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_rel_doc_map_recebido","type":"BASE TABLE","comment":"","columns":[{"name":"id_mapeamento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"codigo_especie","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_serie","type":"int(11)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"fk_md_pen_rel_doc_map_rec_espe","def":"KEY fk_md_pen_rel_doc_map_rec_espe (codigo_especie) USING BTREE","table":"md_pen_rel_doc_map_recebido","columns":["codigo_especie"],"comment":""},{"name":"fk_md_pen_rel_doc_map_rec_seri","def":"KEY fk_md_pen_rel_doc_map_rec_seri (id_serie) USING BTREE","table":"md_pen_rel_doc_map_recebido","columns":["id_serie"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_mapeamento) USING BTREE","table":"md_pen_rel_doc_map_recebido","columns":["id_mapeamento"],"comment":""}],"constraints":[{"name":"fk_md_pen_rel_doc_map_rec_espe","type":"FOREIGN KEY","def":"FOREIGN KEY (codigo_especie) REFERENCES md_pen_especie_documental (id_especie)","table":"md_pen_rel_doc_map_recebido","referenced_table":"md_pen_especie_documental","columns":["codigo_especie"],"referenced_columns":["id_especie"],"comment":""},{"name":"fk_md_pen_rel_doc_map_rec_seri","type":"FOREIGN KEY","def":"FOREIGN KEY (id_serie) REFERENCES serie (id_serie)","table":"md_pen_rel_doc_map_recebido","referenced_table":"serie","columns":["id_serie"],"referenced_columns":["id_serie"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_mapeamento)","table":"md_pen_rel_doc_map_recebido","referenced_table":null,"columns":["id_mapeamento"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_rel_doc_map_recebido` (\n `id_mapeamento` bigint(20) NOT NULL,\n `codigo_especie` int(11) NOT NULL,\n `id_serie` int(11) NOT NULL,\n PRIMARY KEY (`id_mapeamento`),\n KEY `fk_md_pen_rel_doc_map_rec_seri` (`id_serie`),\n KEY `fk_md_pen_rel_doc_map_rec_espe` (`codigo_especie`),\n CONSTRAINT `fk_md_pen_rel_doc_map_rec_espe` FOREIGN KEY (`codigo_especie`) REFERENCES `md_pen_especie_documental` (`id_especie`),\n CONSTRAINT `fk_md_pen_rel_doc_map_rec_seri` FOREIGN KEY (`id_serie`) REFERENCES `serie` (`id_serie`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_rel_expedir_lote","type":"BASE TABLE","comment":"","columns":[{"name":"id_lote","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_procedimento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_andamento","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_atividade_expedicao","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"tentativas","type":"int(11)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"i01_md_pen_rel_expedir_lote","def":"KEY i01_md_pen_rel_expedir_lote (id_procedimento) USING BTREE","table":"md_pen_rel_expedir_lote","columns":["id_procedimento"],"comment":""},{"name":"i02_md_pen_rel_expedir_lote","def":"KEY i02_md_pen_rel_expedir_lote (id_lote) USING BTREE","table":"md_pen_rel_expedir_lote","columns":["id_lote"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_procedimento, id_lote) USING BTREE","table":"md_pen_rel_expedir_lote","columns":["id_procedimento","id_lote"],"comment":""}],"constraints":[{"name":"fk_md_pen_rel_expedir_lote","type":"FOREIGN KEY","def":"FOREIGN KEY (id_lote) REFERENCES md_pen_expedir_lote (id_lote)","table":"md_pen_rel_expedir_lote","referenced_table":"md_pen_expedir_lote","columns":["id_lote"],"referenced_columns":["id_lote"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_procedimento, id_lote)","table":"md_pen_rel_expedir_lote","referenced_table":null,"columns":["id_procedimento","id_lote"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_rel_expedir_lote` (\n `id_lote` int(11) NOT NULL,\n `id_procedimento` bigint(20) NOT NULL,\n `id_andamento` int(11) NOT NULL,\n `id_atividade_expedicao` int(11) NOT NULL,\n `tentativas` int(11) DEFAULT NULL,\n PRIMARY KEY (`id_procedimento`,`id_lote`),\n KEY `i01_md_pen_rel_expedir_lote` (`id_procedimento`),\n KEY `i02_md_pen_rel_expedir_lote` (`id_lote`),\n CONSTRAINT `fk_md_pen_rel_expedir_lote` FOREIGN KEY (`id_lote`) REFERENCES `md_pen_expedir_lote` (`id_lote`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_rel_hipotese_legal","type":"BASE TABLE","comment":"","columns":[{"name":"id_mapeamento","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"id_hipotese_legal","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_hipotese_legal_pen","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"tipo","type":"char(1)","nullable":false,"default":"'E'","comment":""},{"name":"sin_ativo","type":"char(1)","nullable":false,"default":"'S'","comment":""}],"indexes":[{"name":"fk_md_pen_rel_hipotese_pen","def":"KEY fk_md_pen_rel_hipotese_pen (id_hipotese_legal_pen) USING BTREE","table":"md_pen_rel_hipotese_legal","columns":["id_hipotese_legal_pen"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_mapeamento) USING BTREE","table":"md_pen_rel_hipotese_legal","columns":["id_mapeamento"],"comment":""},{"name":"ak1_rel_hipotese_legal","def":"UNIQUE KEY ak1_rel_hipotese_legal (id_hipotese_legal, id_hipotese_legal_pen, tipo) USING BTREE","table":"md_pen_rel_hipotese_legal","columns":["id_hipotese_legal","id_hipotese_legal_pen","tipo"],"comment":""}],"constraints":[{"name":"ak1_rel_hipotese_legal","type":"UNIQUE","def":"UNIQUE KEY ak1_rel_hipotese_legal (id_hipotese_legal, id_hipotese_legal_pen, tipo)","table":"md_pen_rel_hipotese_legal","referenced_table":null,"columns":["id_hipotese_legal","id_hipotese_legal_pen","tipo"],"referenced_columns":null,"comment":""},{"name":"fk_md_pen_rel_hipotese_legal","type":"FOREIGN KEY","def":"FOREIGN KEY (id_hipotese_legal) REFERENCES hipotese_legal (id_hipotese_legal)","table":"md_pen_rel_hipotese_legal","referenced_table":"hipotese_legal","columns":["id_hipotese_legal"],"referenced_columns":["id_hipotese_legal"],"comment":""},{"name":"fk_md_pen_rel_hipotese_pen","type":"FOREIGN KEY","def":"FOREIGN KEY (id_hipotese_legal_pen) REFERENCES md_pen_hipotese_legal (id_hipotese_legal)","table":"md_pen_rel_hipotese_legal","referenced_table":"md_pen_hipotese_legal","columns":["id_hipotese_legal_pen"],"referenced_columns":["id_hipotese_legal"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_mapeamento)","table":"md_pen_rel_hipotese_legal","referenced_table":null,"columns":["id_mapeamento"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_rel_hipotese_legal` (\n `id_mapeamento` bigint(20) NOT NULL,\n `id_hipotese_legal` int(11) NOT NULL,\n `id_hipotese_legal_pen` int(11) DEFAULT NULL,\n `tipo` char(1) NOT NULL DEFAULT 'E',\n `sin_ativo` char(1) NOT NULL DEFAULT 'S',\n PRIMARY KEY (`id_mapeamento`),\n UNIQUE KEY `ak1_rel_hipotese_legal` (`id_hipotese_legal`,`id_hipotese_legal_pen`,`tipo`),\n KEY `fk_md_pen_rel_hipotese_pen` (`id_hipotese_legal_pen`),\n CONSTRAINT `fk_md_pen_rel_hipotese_legal` FOREIGN KEY (`id_hipotese_legal`) REFERENCES `hipotese_legal` (`id_hipotese_legal`),\n CONSTRAINT `fk_md_pen_rel_hipotese_pen` FOREIGN KEY (`id_hipotese_legal_pen`) REFERENCES `md_pen_hipotese_legal` (`id_hipotese_legal`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_rel_processo_apensado","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_procedimento_apensado","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"protocolo","type":"varchar(50)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"i01_md_pen_rel_processo_apensa","def":"KEY i01_md_pen_rel_processo_apensa (numero_registro) USING BTREE","table":"md_pen_rel_processo_apensado","columns":["numero_registro"],"comment":""},{"name":"i02_md_pen_rel_processo_apensa","def":"KEY i02_md_pen_rel_processo_apensa (id_procedimento_apensado) USING BTREE","table":"md_pen_rel_processo_apensado","columns":["id_procedimento_apensado"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (numero_registro, id_procedimento_apensado) USING BTREE","table":"md_pen_rel_processo_apensado","columns":["numero_registro","id_procedimento_apensado"],"comment":""}],"constraints":[{"name":"fk_md_pen_proc_eletr_apensado","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro)","table":"md_pen_rel_processo_apensado","referenced_table":"md_pen_processo_eletronico","columns":["numero_registro"],"referenced_columns":["numero_registro"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (numero_registro, id_procedimento_apensado)","table":"md_pen_rel_processo_apensado","referenced_table":null,"columns":["numero_registro","id_procedimento_apensado"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_rel_processo_apensado` (\n `numero_registro` char(16) NOT NULL,\n `id_procedimento_apensado` bigint(20) NOT NULL,\n `protocolo` varchar(50) NOT NULL,\n PRIMARY KEY (`numero_registro`,`id_procedimento_apensado`),\n KEY `i01_md_pen_rel_processo_apensa` (`numero_registro`),\n KEY `i02_md_pen_rel_processo_apensa` (`id_procedimento_apensado`),\n CONSTRAINT `fk_md_pen_proc_eletr_apensado` FOREIGN KEY (`numero_registro`) REFERENCES `md_pen_processo_eletronico` (`numero_registro`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_rel_tarefa_operacao","type":"BASE TABLE","comment":"","columns":[{"name":"id_tarefa","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"codigo_operacao","type":"char(2)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"i01_md_pen_rel_tarefa_operacao","def":"KEY i01_md_pen_rel_tarefa_operacao (id_tarefa) USING BTREE","table":"md_pen_rel_tarefa_operacao","columns":["id_tarefa"],"comment":""},{"name":"i02_md_pen_rel_tarefa_operacao","def":"KEY i02_md_pen_rel_tarefa_operacao (codigo_operacao) USING BTREE","table":"md_pen_rel_tarefa_operacao","columns":["codigo_operacao"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_tarefa, codigo_operacao) USING BTREE","table":"md_pen_rel_tarefa_operacao","columns":["id_tarefa","codigo_operacao"],"comment":""}],"constraints":[{"name":"fk_md_pen_rel_operacao_tarefa","type":"FOREIGN KEY","def":"FOREIGN KEY (id_tarefa) REFERENCES tarefa (id_tarefa)","table":"md_pen_rel_tarefa_operacao","referenced_table":"tarefa","columns":["id_tarefa"],"referenced_columns":["id_tarefa"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_tarefa, codigo_operacao)","table":"md_pen_rel_tarefa_operacao","referenced_table":null,"columns":["id_tarefa","codigo_operacao"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_rel_tarefa_operacao` (\n `id_tarefa` int(11) NOT NULL,\n `codigo_operacao` char(2) NOT NULL,\n PRIMARY KEY (`id_tarefa`,`codigo_operacao`),\n KEY `i01_md_pen_rel_tarefa_operacao` (`id_tarefa`),\n KEY `i02_md_pen_rel_tarefa_operacao` (`codigo_operacao`),\n CONSTRAINT `fk_md_pen_rel_operacao_tarefa` FOREIGN KEY (`id_tarefa`) REFERENCES `tarefa` (`id_tarefa`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_rel_tipo_doc_map_rec","type":"BASE TABLE","comment":"","columns":[{"name":"codigo_especie","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_serie","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"sin_padrao","type":"char(2)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"i01_md_pen_rel_tipo_doc_map_re","def":"KEY i01_md_pen_rel_tipo_doc_map_re (codigo_especie) USING BTREE","table":"md_pen_rel_tipo_doc_map_rec","columns":["codigo_especie"],"comment":""},{"name":"i02_md_pen_rel_tipo_doc_map_re","def":"KEY i02_md_pen_rel_tipo_doc_map_re (id_serie) USING BTREE","table":"md_pen_rel_tipo_doc_map_rec","columns":["id_serie"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (codigo_especie, id_serie) USING BTREE","table":"md_pen_rel_tipo_doc_map_rec","columns":["codigo_especie","id_serie"],"comment":""}],"constraints":[{"name":"fk_md_pen_rel_tipo_doc_serie","type":"FOREIGN KEY","def":"FOREIGN KEY (id_serie) REFERENCES serie (id_serie)","table":"md_pen_rel_tipo_doc_map_rec","referenced_table":"serie","columns":["id_serie"],"referenced_columns":["id_serie"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (codigo_especie, id_serie)","table":"md_pen_rel_tipo_doc_map_rec","referenced_table":null,"columns":["codigo_especie","id_serie"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_rel_tipo_doc_map_rec` (\n `codigo_especie` int(11) NOT NULL,\n `id_serie` int(11) NOT NULL,\n `sin_padrao` char(2) NOT NULL,\n PRIMARY KEY (`codigo_especie`,`id_serie`),\n KEY `i01_md_pen_rel_tipo_doc_map_re` (`codigo_especie`),\n KEY `i02_md_pen_rel_tipo_doc_map_re` (`id_serie`),\n CONSTRAINT `fk_md_pen_rel_tipo_doc_serie` FOREIGN KEY (`id_serie`) REFERENCES `serie` (`id_serie`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_bloco","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_bloco","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_bloco","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_bloco` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_bloco_protocolo","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_bloco_protocolo","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_bloco_protocolo","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_bloco_protocolo` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_envio_comp_digitais","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_envio_comp_digitais","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_envio_comp_digitais","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_envio_comp_digitais` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_expedir_lote","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_expedir_lote","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_expedir_lote","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_expedir_lote` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_hipotese_legal","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_hipotese_legal","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_hipotese_legal","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_hipotese_legal` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_map_tp_procedimento","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_map_tp_procedimento","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_map_tp_procedimento","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_map_tp_procedimento` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_orgao_externo","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_orgao_externo","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_orgao_externo","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_orgao_externo` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_procedimento_andam","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_procedimento_andam","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_procedimento_andam","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_procedimento_andam` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_recibo_tramite_hash","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_recibo_tramite_hash","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_recibo_tramite_hash","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_recibo_tramite_hash` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_rel_doc_map_enviado","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_rel_doc_map_enviado","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_rel_doc_map_enviado","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_rel_doc_map_enviado` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=[Redacted by tbls] DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_rel_doc_map_recebid","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_rel_doc_map_recebid","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_rel_doc_map_recebid","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_rel_doc_map_recebid` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=[Redacted by tbls] DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_rel_hipotese_legal","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_rel_hipotese_legal","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_rel_hipotese_legal","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_rel_hipotese_legal` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_seq_tramite_pendente","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":"","extra_def":"auto_increment"},{"name":"campo","type":"char(1)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_seq_tramite_pendente","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_seq_tramite_pendente","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_seq_tramite_pendente` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `campo` char(1) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_tramite","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"dth_registro","type":"datetime","nullable":true,"default":"NULL","comment":""},{"name":"id_andamento","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_usuario","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_unidade","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_repositorio_origem","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_estrutura_origem","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_repositorio_destino","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"id_estrutura_destino","type":"int(11)","nullable":true,"default":"NULL","comment":""},{"name":"sta_tipo_tramite","type":"char(1)","nullable":true,"default":"NULL","comment":""},{"name":"ticket_envio_componentes","type":"varchar(10)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"fk_md_pen_tramite_unidade","def":"KEY fk_md_pen_tramite_unidade (id_unidade) USING BTREE","table":"md_pen_tramite","columns":["id_unidade"],"comment":""},{"name":"fk_md_pen_tramite_usuario","def":"KEY fk_md_pen_tramite_usuario (id_usuario) USING BTREE","table":"md_pen_tramite","columns":["id_usuario"],"comment":""},{"name":"PRIMARY","def":"PRIMARY KEY (id_tramite) USING BTREE","table":"md_pen_tramite","columns":["id_tramite"],"comment":""},{"name":"UK_md_pen_tramite","def":"UNIQUE KEY UK_md_pen_tramite (numero_registro, id_tramite) USING BTREE","table":"md_pen_tramite","columns":["numero_registro","id_tramite"],"comment":""}],"constraints":[{"name":"fk_md_pen_tramite_proc_eletr","type":"FOREIGN KEY","def":"FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro)","table":"md_pen_tramite","referenced_table":"md_pen_processo_eletronico","columns":["numero_registro"],"referenced_columns":["numero_registro"],"comment":""},{"name":"fk_md_pen_tramite_unidade","type":"FOREIGN KEY","def":"FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade)","table":"md_pen_tramite","referenced_table":"unidade","columns":["id_unidade"],"referenced_columns":["id_unidade"],"comment":""},{"name":"fk_md_pen_tramite_usuario","type":"FOREIGN KEY","def":"FOREIGN KEY (id_usuario) REFERENCES usuario (id_usuario)","table":"md_pen_tramite","referenced_table":"usuario","columns":["id_usuario"],"referenced_columns":["id_usuario"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_tramite)","table":"md_pen_tramite","referenced_table":null,"columns":["id_tramite"],"referenced_columns":null,"comment":""},{"name":"UK_md_pen_tramite","type":"UNIQUE","def":"UNIQUE KEY UK_md_pen_tramite (numero_registro, id_tramite)","table":"md_pen_tramite","referenced_table":null,"columns":["numero_registro","id_tramite"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_tramite` (\n `numero_registro` char(16) NOT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `dth_registro` datetime DEFAULT NULL,\n `id_andamento` int(11) DEFAULT NULL,\n `id_usuario` int(11) DEFAULT NULL,\n `id_unidade` int(11) DEFAULT NULL,\n `id_repositorio_origem` int(11) DEFAULT NULL,\n `id_estrutura_origem` int(11) DEFAULT NULL,\n `id_repositorio_destino` int(11) DEFAULT NULL,\n `id_estrutura_destino` int(11) DEFAULT NULL,\n `sta_tipo_tramite` char(1) DEFAULT NULL,\n `ticket_envio_componentes` varchar(10) DEFAULT NULL,\n PRIMARY KEY (`id_tramite`),\n UNIQUE KEY `UK_md_pen_tramite` (`numero_registro`,`id_tramite`),\n KEY `fk_md_pen_tramite_usuario` (`id_usuario`),\n KEY `fk_md_pen_tramite_unidade` (`id_unidade`),\n CONSTRAINT `fk_md_pen_tramite_proc_eletr` FOREIGN KEY (`numero_registro`) REFERENCES `md_pen_processo_eletronico` (`numero_registro`),\n CONSTRAINT `fk_md_pen_tramite_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`),\n CONSTRAINT `fk_md_pen_tramite_usuario` FOREIGN KEY (`id_usuario`) REFERENCES `usuario` (`id_usuario`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_tramite_pendente","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"numero_tramite","type":"varchar(255)","nullable":false,"default":"''","comment":""},{"name":"id_atividade_expedicao","type":"int(11)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id) USING BTREE","table":"md_pen_tramite_pendente","columns":["id"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"md_pen_tramite_pendente","referenced_table":null,"columns":["id"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_tramite_pendente` (\n `id` int(11) NOT NULL,\n `numero_tramite` varchar(255) NOT NULL DEFAULT '',\n `id_atividade_expedicao` int(11) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_tramite_processado","type":"BASE TABLE","comment":"","columns":[{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"dth_ultimo_processamento","type":"datetime","nullable":false,"default":null,"comment":""},{"name":"numero_tentativas","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"sin_recebimento_concluido","type":"char(1)","nullable":false,"default":null,"comment":""},{"name":"tipo_tramite_processo","type":"char(2)","nullable":false,"default":"'RP'","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id_tramite, tipo_tramite_processo) USING BTREE","table":"md_pen_tramite_processado","columns":["id_tramite","tipo_tramite_processo"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_tramite, tipo_tramite_processo)","table":"md_pen_tramite_processado","referenced_table":null,"columns":["id_tramite","tipo_tramite_processo"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_tramite_processado` (\n `id_tramite` bigint(20) NOT NULL,\n `dth_ultimo_processamento` datetime NOT NULL,\n `numero_tentativas` int(11) NOT NULL,\n `sin_recebimento_concluido` char(1) NOT NULL,\n `tipo_tramite_processo` char(2) NOT NULL DEFAULT 'RP',\n PRIMARY KEY (`id_tramite`,`tipo_tramite_processo`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_tramite_recibo_envio","type":"BASE TABLE","comment":"","columns":[{"name":"numero_registro","type":"char(16)","nullable":false,"default":null,"comment":""},{"name":"id_tramite","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"dth_recebimento","type":"datetime","nullable":false,"default":null,"comment":""},{"name":"hash_assinatura","type":"varchar(1000)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (numero_registro, id_tramite) USING BTREE","table":"md_pen_tramite_recibo_envio","columns":["numero_registro","id_tramite"],"comment":""}],"constraints":[{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (numero_registro, id_tramite)","table":"md_pen_tramite_recibo_envio","referenced_table":null,"columns":["numero_registro","id_tramite"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_tramite_recibo_envio` (\n `numero_registro` char(16) NOT NULL,\n `id_tramite` bigint(20) NOT NULL,\n `dth_recebimento` datetime NOT NULL,\n `hash_assinatura` varchar(1000) NOT NULL,\n PRIMARY KEY (`numero_registro`,`id_tramite`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"},{"name":"md_pen_unidade","type":"BASE TABLE","comment":"","columns":[{"name":"id_unidade","type":"int(11)","nullable":false,"default":null,"comment":""},{"name":"id_unidade_rh","type":"bigint(20)","nullable":false,"default":null,"comment":""},{"name":"sigla_unidade_rh","type":"varchar(20)","nullable":true,"default":"NULL","comment":""},{"name":"nome_unidade_rh","type":"varchar(250)","nullable":true,"default":"NULL","comment":""}],"indexes":[{"name":"PRIMARY","def":"PRIMARY KEY (id_unidade) USING BTREE","table":"md_pen_unidade","columns":["id_unidade"],"comment":""}],"constraints":[{"name":"fk_md_pen_unidade_unidade","type":"FOREIGN KEY","def":"FOREIGN KEY (id_unidade) REFERENCES unidade (id_unidade)","table":"md_pen_unidade","referenced_table":"unidade","columns":["id_unidade"],"referenced_columns":["id_unidade"],"comment":""},{"name":"PRIMARY","type":"PRIMARY KEY","def":"PRIMARY KEY (id_unidade)","table":"md_pen_unidade","referenced_table":null,"columns":["id_unidade"],"referenced_columns":null,"comment":""}],"triggers":[],"def":"CREATE TABLE `md_pen_unidade` (\n `id_unidade` int(11) NOT NULL,\n `id_unidade_rh` bigint(20) NOT NULL,\n `sigla_unidade_rh` varchar(20) DEFAULT NULL,\n `nome_unidade_rh` varchar(250) DEFAULT NULL,\n PRIMARY KEY (`id_unidade`),\n CONSTRAINT `fk_md_pen_unidade_unidade` FOREIGN KEY (`id_unidade`) REFERENCES `unidade` (`id_unidade`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci"}],"relations":[{"table":"md_pen_componente_digital","columns":["numero_registro"],"cardinality":"Zero or more","parent_table":"md_pen_processo_eletronico","parent_columns":["numero_registro"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro)","virtual":false},{"table":"md_pen_componente_digital","columns":["numero_registro","id_tramite"],"cardinality":"Zero or more","parent_table":"md_pen_tramite","parent_columns":["numero_registro","id_tramite"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","virtual":false},{"table":"md_pen_map_tipo_processo","columns":["id_map_orgao"],"cardinality":"Zero or more","parent_table":"md_pen_orgao_externo","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (id_map_orgao) REFERENCES md_pen_orgao_externo (id)","virtual":false},{"table":"md_pen_recibo_tramite","columns":["numero_registro","id_tramite"],"cardinality":"Zero or one","parent_table":"md_pen_tramite","parent_columns":["numero_registro","id_tramite"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","virtual":false},{"table":"md_pen_recibo_tramite_enviado","columns":["numero_registro","id_tramite"],"cardinality":"Zero or one","parent_table":"md_pen_tramite","parent_columns":["numero_registro","id_tramite"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","virtual":false},{"table":"md_pen_recibo_tramite_hash","columns":["numero_registro","id_tramite"],"cardinality":"Zero or more","parent_table":"md_pen_tramite","parent_columns":["numero_registro","id_tramite"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","virtual":false},{"table":"md_pen_recibo_tramite_recebido","columns":["numero_registro","id_tramite"],"cardinality":"Zero or one","parent_table":"md_pen_tramite","parent_columns":["numero_registro","id_tramite"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro, id_tramite) REFERENCES md_pen_tramite (numero_registro, id_tramite)","virtual":false},{"table":"md_pen_rel_doc_map_enviado","columns":["codigo_especie"],"cardinality":"Zero or more","parent_table":"md_pen_especie_documental","parent_columns":["id_especie"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (codigo_especie) REFERENCES md_pen_especie_documental (id_especie)","virtual":false},{"table":"md_pen_rel_doc_map_recebido","columns":["codigo_especie"],"cardinality":"Zero or more","parent_table":"md_pen_especie_documental","parent_columns":["id_especie"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (codigo_especie) REFERENCES md_pen_especie_documental (id_especie)","virtual":false},{"table":"md_pen_rel_expedir_lote","columns":["id_lote"],"cardinality":"Zero or more","parent_table":"md_pen_expedir_lote","parent_columns":["id_lote"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (id_lote) REFERENCES md_pen_expedir_lote (id_lote)","virtual":false},{"table":"md_pen_rel_hipotese_legal","columns":["id_hipotese_legal_pen"],"cardinality":"Zero or more","parent_table":"md_pen_hipotese_legal","parent_columns":["id_hipotese_legal"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (id_hipotese_legal_pen) REFERENCES md_pen_hipotese_legal (id_hipotese_legal)","virtual":false},{"table":"md_pen_rel_processo_apensado","columns":["numero_registro"],"cardinality":"Zero or more","parent_table":"md_pen_processo_eletronico","parent_columns":["numero_registro"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro)","virtual":false},{"table":"md_pen_tramite","columns":["numero_registro"],"cardinality":"Zero or more","parent_table":"md_pen_processo_eletronico","parent_columns":["numero_registro"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (numero_registro) REFERENCES md_pen_processo_eletronico (numero_registro)","virtual":false}],"functions":[],"driver":{"name":"mariadb","database_version":"10.5.18-MariaDB-1:10.5.18+maria~ubu2004","meta":{"dict":{"Functions":"Stored procedures and functions"}}}} diff --git a/docs/schema/schema.svg b/docs/schema/schema.svg new file mode 100644 index 000000000..f4bf0a7a2 --- /dev/null +++ b/docs/schema/schema.svg @@ -0,0 +1,1042 @@ + + + + + + +sei + + + +md_pen_bloco + + +md_pen_bloco +     +[BASE TABLE] + +id     +[int(11)] + +id_unidade     +[int(11)] + +id_usuario     +[int(11)] + +descricao     +[varchar(255)] + +idx_bloco     +[varchar(500)] + +sta_tipo     +[char(1)] + +sta_estado     +[char(1)] + + + +md_pen_bloco_protocolo + + +md_pen_bloco_protocolo +     +[BASE TABLE] + +id     +[int(11)] + +id_protocolo     +[bigint(20)] + +id_tramita_em_bloco     +[int(11)] + +sequencia     +[int(11)] + +idx_rel_bloco_protocolo     +[varchar(4000)] + + + +md_pen_componente_digital + + +md_pen_componente_digital +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +id_documento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +id_anexo     +[int(11)] + +protocolo     +[varchar(50)] + +nome     +[varchar(255)] + +hash_conteudo     +[varchar(255)] + +algoritmo_hash     +[varchar(20)] + +tipo_conteudo     +[char(3)] + +mime_type     +[varchar(100)] + +dados_complementares     +[varchar(1000)] + +tamanho     +[bigint(20)] + +ordem     +[int(11)] + +sin_enviar     +[char(1)] + +codigo_especie     +[int(11)] + +nome_especie_produtor     +[varchar(255)] + +ordem_documento     +[int(11)] + +id_procedimento_anexado     +[bigint(20)] + +protocolo_procedimento_anexado     +[varchar(50)] + +ordem_documento_anexado     +[int(11)] + +ordem_documento_referenciado     +[int(11)] + +id_anexo_imutavel     +[bigint(20)] + +tarja_legada     +[char(1)] + + + +md_pen_processo_eletronico + + +md_pen_processo_eletronico +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento     +[bigint(20)] + +sta_tipo_protocolo     +[varchar(1)] + + + +md_pen_componente_digital:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_tramite + + +md_pen_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_registro     +[datetime] + +id_andamento     +[int(11)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +id_repositorio_origem     +[int(11)] + +id_estrutura_origem     +[int(11)] + +id_repositorio_destino     +[int(11)] + +id_estrutura_destino     +[int(11)] + +sta_tipo_tramite     +[char(1)] + +ticket_envio_componentes     +[varchar(10)] + + + +md_pen_componente_digital:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_envio_comp_digitais + + +md_pen_envio_comp_digitais +     +[BASE TABLE] + +id_comp_digitais     +[bigint(20)] + +id_estrutura     +[int(11)] + +str_estrutura     +[longtext] + +id_unidade_pen     +[int(11)] + +str_unidade_pen     +[longtext] + + + +md_pen_especie_documental + + +md_pen_especie_documental +     +[BASE TABLE] + +id_especie     +[int(11)] + +nome_especie     +[varchar(255)] + + + +md_pen_expedir_lote + + +md_pen_expedir_lote +     +[BASE TABLE] + +id_lote     +[int(11)] + +id_repositorio_destino     +[int(11)] + +str_repositorio_destino     +[varchar(250)] + +id_repositorio_origem     +[int(11)] + +id_unidade_origem     +[int(11)] + +id_unidade_destino     +[int(11)] + +str_unidade_destino     +[varchar(250)] + +id_usuario     +[int(11)] + +id_unidade     +[int(11)] + +dth_registro     +[datetime] + + + +md_pen_hipotese_legal + + +md_pen_hipotese_legal +     +[BASE TABLE] + +id_hipotese_legal     +[int(11)] + +nome     +[varchar(255)] + +sin_ativo     +[char(1)] + +identificacao     +[int(11)] + + + +md_pen_map_tipo_processo + + +md_pen_map_tipo_processo +     +[BASE TABLE] + +id     +[int(11)] + +id_map_orgao     +[int(11)] + +id_tipo_processo_origem     +[int(11)] + +id_tipo_processo_destino     +[int(11)] + +nome_tipo_processo     +[varchar(250)] + +sin_ativo     +[char(1)] + +id_unidade     +[int(11)] + +dth_criacao     +[datetime] + + + +md_pen_orgao_externo + + +md_pen_orgao_externo +     +[BASE TABLE] + +id     +[int(11)] + +id_orgao_origem     +[int(11)] + +str_orgao_origem     +[varchar(250)] + +id_estrutura_origem     +[int(11)] + +str_estrutura_origem     +[varchar(250)] + +id_orgao_destino     +[int(11)] + +str_orgao_destino     +[varchar(250)] + +sin_ativo     +[char(1)] + +id_unidade     +[int(11)] + +dth_criacao     +[datetime] + + + +md_pen_map_tipo_processo:id_map_orgao->md_pen_orgao_externo:id + + + + + +md_pen_parametro + + +md_pen_parametro +     +[BASE TABLE] + +nome     +[varchar(100)] + +descricao     +[varchar(255)] + +sequencia     +[int(11)] + +valor     +[longtext] + + + +md_pen_procedimento_andamento + + +md_pen_procedimento_andamento +     +[BASE TABLE] + +id_andamento     +[bigint(20)] + +id_procedimento     +[bigint(20)] + +id_tramite     +[bigint(20)] + +situacao     +[char(1)] + +data     +[datetime] + +mensagem     +[varchar(255)] + +hash     +[char(32)] + +id_tarefa     +[varchar(255)] + +numero_registro     +[char(16)] + + + +md_pen_protocolo + + +md_pen_protocolo +     +[BASE TABLE] + +id_protocolo     +[bigint(20)] + +sin_obteve_recusa     +[char(1)] + + + +md_pen_recibo_tramite + + +md_pen_recibo_tramite +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_enviado + + +md_pen_recibo_tramite_enviado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_enviado:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_hash + + +md_pen_recibo_tramite_hash +     +[BASE TABLE] + +id_tramite_hash     +[bigint(20)] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +tipo_recibo     +[char(1)] + +hash_componente_digital     +[varchar(255)] + + + +md_pen_recibo_tramite_hash:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_recibo_tramite_recebido + + +md_pen_recibo_tramite_recebido +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + +cadeia_certificado     +[longtext] + + + +md_pen_recibo_tramite_recebido:numero_registro->md_pen_tramite:numero_registro + + + + + +md_pen_rel_doc_map_enviado + + +md_pen_rel_doc_map_enviado +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +codigo_especie     +[int(11)] + +id_serie     +[int(11)] + + + +md_pen_rel_doc_map_enviado:codigo_especie->md_pen_especie_documental:id_especie + + + + + +md_pen_rel_doc_map_recebido + + +md_pen_rel_doc_map_recebido +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +codigo_especie     +[int(11)] + +id_serie     +[int(11)] + + + +md_pen_rel_doc_map_recebido:codigo_especie->md_pen_especie_documental:id_especie + + + + + +md_pen_rel_expedir_lote + + +md_pen_rel_expedir_lote +     +[BASE TABLE] + +id_lote     +[int(11)] + +id_procedimento     +[bigint(20)] + +id_andamento     +[int(11)] + +id_atividade_expedicao     +[int(11)] + +tentativas     +[int(11)] + + + +md_pen_rel_expedir_lote:id_lote->md_pen_expedir_lote:id_lote + + + + + +md_pen_rel_hipotese_legal + + +md_pen_rel_hipotese_legal +     +[BASE TABLE] + +id_mapeamento     +[bigint(20)] + +id_hipotese_legal     +[int(11)] + +id_hipotese_legal_pen     +[int(11)] + +tipo     +[char(1)] + +sin_ativo     +[char(1)] + + + +md_pen_rel_hipotese_legal:id_hipotese_legal_pen->md_pen_hipotese_legal:id_hipotese_legal + + + + + +md_pen_rel_processo_apensado + + +md_pen_rel_processo_apensado +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_procedimento_apensado     +[bigint(20)] + +protocolo     +[varchar(50)] + + + +md_pen_rel_processo_apensado:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_rel_tarefa_operacao + + +md_pen_rel_tarefa_operacao +     +[BASE TABLE] + +id_tarefa     +[int(11)] + +codigo_operacao     +[char(2)] + + + +md_pen_rel_tipo_doc_map_rec + + +md_pen_rel_tipo_doc_map_rec +     +[BASE TABLE] + +codigo_especie     +[int(11)] + +id_serie     +[int(11)] + +sin_padrao     +[char(2)] + + + +md_pen_seq_bloco + + +md_pen_seq_bloco +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_bloco_protocolo + + +md_pen_seq_bloco_protocolo +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_envio_comp_digitais + + +md_pen_seq_envio_comp_digitais +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_expedir_lote + + +md_pen_seq_expedir_lote +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_hipotese_legal + + +md_pen_seq_hipotese_legal +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_map_tp_procedimento + + +md_pen_seq_map_tp_procedimento +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_orgao_externo + + +md_pen_seq_orgao_externo +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_procedimento_andam + + +md_pen_seq_procedimento_andam +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_recibo_tramite_hash + + +md_pen_seq_recibo_tramite_hash +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_rel_doc_map_enviado + + +md_pen_seq_rel_doc_map_enviado +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_rel_doc_map_recebid + + +md_pen_seq_rel_doc_map_recebid +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_rel_hipotese_legal + + +md_pen_seq_rel_hipotese_legal +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_seq_tramite_pendente + + +md_pen_seq_tramite_pendente +     +[BASE TABLE] + +id     +[int(11)] + +campo     +[char(1)] + + + +md_pen_tramite:numero_registro->md_pen_processo_eletronico:numero_registro + + + + + +md_pen_tramite_pendente + + +md_pen_tramite_pendente +     +[BASE TABLE] + +id     +[int(11)] + +numero_tramite     +[varchar(255)] + +id_atividade_expedicao     +[int(11)] + + + +md_pen_tramite_processado + + +md_pen_tramite_processado +     +[BASE TABLE] + +id_tramite     +[bigint(20)] + +dth_ultimo_processamento     +[datetime] + +numero_tentativas     +[int(11)] + +sin_recebimento_concluido     +[char(1)] + +tipo_tramite_processo     +[char(2)] + + + +md_pen_tramite_recibo_envio + + +md_pen_tramite_recibo_envio +     +[BASE TABLE] + +numero_registro     +[char(16)] + +id_tramite     +[bigint(20)] + +dth_recebimento     +[datetime] + +hash_assinatura     +[varchar(1000)] + + + +md_pen_unidade + + +md_pen_unidade +     +[BASE TABLE] + +id_unidade     +[int(11)] + +id_unidade_rh     +[bigint(20)] + +sigla_unidade_rh     +[varchar(20)] + +nome_unidade_rh     +[varchar(250)] + + + From 7cd97daad7b886b4b62e77ee8c59fbf0dd9d02e6 Mon Sep 17 00:00:00 2001 From: Carlos Vieira <3831408+caduvieira@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:19:19 -0300 Subject: [PATCH 21/25] =?UTF-8?q?chore:=20usa=20vers=C3=A3o=2010.0=20das?= =?UTF-8?q?=20imagens?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests_sei41/funcional/env_mysql | 3 +-- tests_sei41/funcional/env_oracle | 2 +- tests_sei41/funcional/env_sqlserver | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests_sei41/funcional/env_mysql b/tests_sei41/funcional/env_mysql index ba7ce6865..85970b81f 100755 --- a/tests_sei41/funcional/env_mysql +++ b/tests_sei41/funcional/env_mysql @@ -1,7 +1,6 @@ ##### Diretório em que está localizada a instalação do SEI ##### SEI_PATH=../../../../../../ -ENVIRONMENT_VERSION=9.8 - +ENVIRONMENT_VERSION=10.0 SEI_CONFIG=./assets/config/ConfiguracaoSEI.php SEI_DATABASE_NAME=sei SEI_DATABASE_USER=sei_user diff --git a/tests_sei41/funcional/env_oracle b/tests_sei41/funcional/env_oracle index b40863ae2..d56a9a980 100755 --- a/tests_sei41/funcional/env_oracle +++ b/tests_sei41/funcional/env_oracle @@ -1,6 +1,6 @@ ##### Diretório em que está localizada a instalação do SEI ##### SEI_PATH=../../../../../../ -ENVIRONMENT_VERSION=9.8 +ENVIRONMENT_VERSION=10.0 SEI_CONFIG=./assets/config/ConfiguracaoSEI.php SEI_DATABASE_NAME=sei diff --git a/tests_sei41/funcional/env_sqlserver b/tests_sei41/funcional/env_sqlserver index 532d41d26..7da50a36a 100755 --- a/tests_sei41/funcional/env_sqlserver +++ b/tests_sei41/funcional/env_sqlserver @@ -1,6 +1,6 @@ ##### Diretório em que está localizada a instalação do SEI ##### SEI_PATH=../../../../../../ -ENVIRONMENT_VERSION=9.8 +ENVIRONMENT_VERSION=10.0 SEI_CONFIG=./assets/config/ConfiguracaoSEI.php SEI_DATABASE_NAME=sei From 916c77334f8ca9afa98e9f7edcd51b9e3ad9fe1d Mon Sep 17 00:00:00 2001 From: Marcus Dias <31357298+marvdias@users.noreply.github.com> Date: Tue, 12 Nov 2024 11:45:01 -0300 Subject: [PATCH 22/25] fix: script instalacao 3.7.0 para postgresql (#706) --- src/scripts/sei_atualizar_versao_modulo_pen.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scripts/sei_atualizar_versao_modulo_pen.php b/src/scripts/sei_atualizar_versao_modulo_pen.php index 550a95c0b..f19135969 100755 --- a/src/scripts/sei_atualizar_versao_modulo_pen.php +++ b/src/scripts/sei_atualizar_versao_modulo_pen.php @@ -2812,9 +2812,9 @@ protected function instalarV3070() 'id_unidade' => array($objMetaRestricaoBD->tipoNumero(), PenMetaBD::NNULLO), 'id_unidade_rh' => array($objMetaRestricaoBD->tipoNumeroGrande(), PenMetaBD::NNULLO), 'id_unidade_restricao' => array($objMetaRestricaoBD->tipoNumeroGrande(), PenMetaBD::NNULLO), - 'nome_unidade_restricao' => array($objMetaRestricaoBD->tipoTextoVariavel(255), $SNULLO), - 'id_unidade_rh_restricao' => array($objMetaRestricaoBD->tipoNumeroGrande(), $SNULLO), - 'nome_unidade_rh_restricao' => array($objMetaRestricaoBD->tipoTextoVariavel(255), $SNULLO), + 'nome_unidade_restricao' => array($objMetaRestricaoBD->tipoTextoVariavel(255), PenMetaBD::SNULLO), + 'id_unidade_rh_restricao' => array($objMetaRestricaoBD->tipoNumeroGrande(), PenMetaBD::SNULLO), + 'nome_unidade_rh_restricao' => array($objMetaRestricaoBD->tipoTextoVariavel(255), PenMetaBD::SNULLO), ), 'pk' => array('cols' => array('id')), 'fks' => array( From f3d62bbfa4d2d9443ed0fc99e5dc304d75077d11 Mon Sep 17 00:00:00 2001 From: Carlos Vieira <3831408+caduvieira@users.noreply.github.com> Date: Tue, 12 Nov 2024 11:50:04 -0300 Subject: [PATCH 23/25] =?UTF-8?q?chore:=20vers=C3=A3o=20compat=C3=ADvel=20?= =?UTF-8?q?com=204.1.3=20e=204.1.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/changelogs/CHANGELOG-3.7.0.md | 2 +- src/rn/VerificadorInstalacaoRN.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changelogs/CHANGELOG-3.7.0.md b/docs/changelogs/CHANGELOG-3.7.0.md index ec84bc7eb..7063719d0 100644 --- a/docs/changelogs/CHANGELOG-3.7.0.md +++ b/docs/changelogs/CHANGELOG-3.7.0.md @@ -7,7 +7,7 @@ As melhorias entregues em cada uma das versões são cumulativas, ou seja, cont ## Compatibilidade de versões * O módulo é compatível com as seguintes versões do **SEI**: * 4.0.0 até 4.0.12, - * 4.1.1. + * 4.1.1, 4.1.2, 4.1.3 e 4.1.4 Para maiores informações sobre os procedimentos de instalação ou atualização, acesse os seguintes documentos localizados no pacote de distribuição mod-sei-pen-VERSAO.zip: > Atenção: É impreterível seguir rigorosamente o disposto no README.md do Módulo para instalação ou atualização com sucesso. diff --git a/src/rn/VerificadorInstalacaoRN.php b/src/rn/VerificadorInstalacaoRN.php index d3ffeeaa4..80965376d 100755 --- a/src/rn/VerificadorInstalacaoRN.php +++ b/src/rn/VerificadorInstalacaoRN.php @@ -34,7 +34,7 @@ class VerificadorInstalacaoRN extends InfraRN // Versões SEI '3.1.0', '3.1.1', '3.1.2', '3.1.3', '3.1.4', '3.1.5', '3.1.6', '3.1.7', '4.0.0', '4.0.1' , '4.0.2' , '4.0.3', '4.0.4', '4.0.5', '4.0.6', '4.0.7', - '4.0.8', '4.0.9', '4.0.10', '4.0.11', '4.0.12', '4.1.1', '4.1.2', '4.1.3', + '4.0.8', '4.0.9', '4.0.10', '4.0.11', '4.0.12', '4.1.1', '4.1.2', '4.1.3', '4.1.4', // Versões SUPER '4.0.3.1', '4.0.3.2', '4.0.3.3', '4.0.3.4', '4.0.3.5', '4.0.4.6', '4.0.5.7', '4.0.6.8', '4.0.7.9', '4.0.8.10', '4.0.9.11', '4.0.9.12', '4.0.9.13', '4.0.9.14', '4.0.12.15' From 17d766d253b9c93af4468252437c6b5cebe29fb4 Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Thu, 2 Jan 2025 09:20:47 -0300 Subject: [PATCH 24/25] =?UTF-8?q?feat:=20adicionar=20estrutrura=20para=20t?= =?UTF-8?q?estes=20unit=C3=A1rios=20e=20testes=20iniciais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/coveralls.yml | 42 ++++++ .gitignore | 1 + Makefile | 4 +- src/rn/ProcessoEletronicoRN.php | 50 +++---- tests_sei4/unitario/bootstrap.php | 8 +- tests_sei4/unitario/composer.json | 5 +- tests_sei4/unitario/phpunit.xml | 9 ++ .../unitario/rn/CompararVersoesTest.php | 17 +++ .../BuscarEstruturaTest.php | 140 ++++++++++++++++++ .../BuscarEstruturasPorEstruturaPaiTest.php | 136 +++++++++++++++++ .../CancelarTramiteTest.php | 87 +++++++++++ .../CienciaRecusaTest.php | 96 ++++++++++++ .../ConsultarEspeciesDocumentaisTest.php | 131 ++++++++++++++++ .../ConsultarEstruturaTest.php | 108 ++++++++++++++ ...ConsultarEstruturasPorEstruturaPaiTest.php | 122 +++++++++++++++ .../ConsultarEstruturasTest.php | 82 ++++++++++ .../ConsultarHipotesesLegaisTest.php | 111 ++++++++++++++ .../ConsultarMotivosUrgenciaTest.php | 126 ++++++++++++++++ .../ConsultarRepositoriosDeEstruturasTest.php | 125 ++++++++++++++++ .../ListarEstruturasAutoCompletarTest.php | 130 ++++++++++++++++ .../ListarEstruturasBuscaTextualTest.php | 124 ++++++++++++++++ .../ListarPendenciasTest.php | 67 +++++++++ .../ListarRepositorioTest.php | 97 ++++++++++++ .../LitarEstruturasTest.php | 120 +++++++++++++++ .../ReceberReciboDeTramiteTest.php | 103 +++++++++++++ .../SolicitarMetadadosTest.php | 117 +++++++++++++++ .../unitario/rn/ProcessoEletronicoRNTest.php | 96 ------------ tests_sei41/unitario/bootstrap.php | 8 +- tests_sei41/unitario/composer.json | 5 +- tests_sei41/unitario/phpunit.xml | 9 ++ .../unitario/rn/CompararVersoesTest.php | 17 +++ .../BuscarEstruturaTest.php | 140 ++++++++++++++++++ .../BuscarEstruturasPorEstruturaPaiTest.php | 136 +++++++++++++++++ .../CancelarTramiteTest.php | 87 +++++++++++ .../CienciaRecusaTest.php | 96 ++++++++++++ .../ConsultarEspeciesDocumentaisTest.php | 131 ++++++++++++++++ .../ConsultarEstruturaTest.php | 108 ++++++++++++++ ...ConsultarEstruturasPorEstruturaPaiTest.php | 122 +++++++++++++++ .../ConsultarEstruturasTest.php | 82 ++++++++++ .../ConsultarHipotesesLegaisTest.php | 111 ++++++++++++++ .../ConsultarMotivosUrgenciaTest.php | 126 ++++++++++++++++ .../ConsultarRepositoriosDeEstruturasTest.php | 125 ++++++++++++++++ .../ListarEstruturasAutoCompletarTest.php | 130 ++++++++++++++++ .../ListarEstruturasBuscaTextualTest.php | 124 ++++++++++++++++ .../ListarPendenciasTest.php | 67 +++++++++ .../ListarRepositorioTest.php | 97 ++++++++++++ .../LitarEstruturasTest.php | 120 +++++++++++++++ .../ReceberReciboDeTramiteTest.php | 103 +++++++++++++ .../SolicitarMetadadosTest.php | 117 +++++++++++++++ .../unitario/rn/ProcessoEletronicoRNTest.php | 96 ------------ tests_super/unitario/bootstrap.php | 8 +- tests_super/unitario/composer.json | 5 +- tests_super/unitario/phpunit.xml | 9 ++ .../unitario/rn/CompararVersoesTest.php | 17 +++ .../BuscarEstruturaTest.php | 140 ++++++++++++++++++ .../BuscarEstruturasPorEstruturaPaiTest.php | 136 +++++++++++++++++ .../CancelarTramiteTest.php | 87 +++++++++++ .../CienciaRecusaTest.php | 96 ++++++++++++ .../ConsultarEspeciesDocumentaisTest.php | 131 ++++++++++++++++ .../ConsultarEstruturaTest.php | 108 ++++++++++++++ ...ConsultarEstruturasPorEstruturaPaiTest.php | 122 +++++++++++++++ .../ConsultarEstruturasTest.php | 82 ++++++++++ .../ConsultarHipotesesLegaisTest.php | 111 ++++++++++++++ .../ConsultarMotivosUrgenciaTest.php | 126 ++++++++++++++++ .../ConsultarRepositoriosDeEstruturasTest.php | 125 ++++++++++++++++ .../ListarEstruturasAutoCompletarTest.php | 130 ++++++++++++++++ .../ListarEstruturasBuscaTextualTest.php | 124 ++++++++++++++++ .../ListarPendenciasTest.php | 67 +++++++++ .../ListarRepositorioTest.php | 97 ++++++++++++ .../LitarEstruturasTest.php | 120 +++++++++++++++ .../ReceberReciboDeTramiteTest.php | 103 +++++++++++++ .../SolicitarMetadadosTest.php | 117 +++++++++++++++ .../unitario/rn/ProcessoEletronicoRNTest.php | 114 -------------- 73 files changed, 6232 insertions(+), 354 deletions(-) create mode 100644 .github/workflows/coveralls.yml create mode 100644 tests_sei4/unitario/rn/CompararVersoesTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php create mode 100644 tests_sei4/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php delete mode 100755 tests_sei4/unitario/rn/ProcessoEletronicoRNTest.php create mode 100644 tests_sei41/unitario/rn/CompararVersoesTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php create mode 100644 tests_sei41/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php delete mode 100755 tests_sei41/unitario/rn/ProcessoEletronicoRNTest.php create mode 100644 tests_super/unitario/rn/CompararVersoesTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php create mode 100644 tests_super/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php delete mode 100755 tests_super/unitario/rn/ProcessoEletronicoRNTest.php diff --git a/.github/workflows/coveralls.yml b/.github/workflows/coveralls.yml new file mode 100644 index 000000000..4d2654c84 --- /dev/null +++ b/.github/workflows/coveralls.yml @@ -0,0 +1,42 @@ +on: + push: + paths: + - "**.php" + - "phpunit.xml" + - ".github/workflows/coveralls.yml" + pull_request: + paths: + - "**.php" + - "phpunit.xml" + - ".github/workflows/coveralls.yml" + +name: Test Coveralls +env: + github-token: ${{ secrets.GITHUB_TOKEN }} + +jobs: + + build: + name: Build + runs-on: ubuntu-latest + steps: + + - name: Fetch Pull Request branch + uses: actions/checkout@v4 + with: + repository: pengovbr/sei + token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT + path: sei + - name: Checkout + uses: actions/checkout@v4 + with: + path: sei/src/sei/web/modulos/mod-sei-pen + + - name: make test-unit + run: | + cd sei/src/sei/web/modulos/mod-sei-pen + make test-unit + - name: Coveralls + uses: coverallsapp/github-action@v2 + with: + file: sei/src/sei/web/modulos/mod-sei-pen/tests_super/unitario/cobertura.xml \ No newline at end of file diff --git a/.gitignore b/.gitignore index 64a8a8b8f..bddcffd98 100755 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ src/config/supervisor.ini .vscode +cobertura.xml .env *.pem *.cache diff --git a/Makefile b/Makefile index 50032fe69..dd967eb88 100755 --- a/Makefile +++ b/Makefile @@ -203,8 +203,8 @@ test-parallel-otimizado: .env $(FILE_VENDOR_FUNCIONAL) up make -j2 test-functional-parallel tramitar-pendencias-silent -test-unit: $(FILE_VENDOR_UNITARIO) - $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'vendor/bin/phpunit rn/$(addsuffix .php,$(teste))' +test-unit: .env $(FILE_VENDOR_UNITARIO) + $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml run --rm -w /tests php-test-unit bash -c 'XDEBUG_MODE=coverage vendor/bin/phpunit --testdox --coverage-html html rn/$(addsuffix .php,$(teste))' test: test-unit test-functional diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index b709b3397..cb7ee9396 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -271,7 +271,7 @@ public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificac } } - return self::converterArrayParaObjeto($arrResultado); + return $this->converterArrayParaObjeto($arrResultado); } $objEstruturaDTO = new EstruturaDTO(); @@ -476,7 +476,7 @@ public function buscarEstrutura( * @param $idRepositorioEstrutura * @return array|null */ - private function validarRestricaoUnidadesCadastradas($idRepositorioEstrutura) + protected function validarRestricaoUnidadesCadastradas($idRepositorioEstrutura) { //Verificar limitação de repositórios/unidades mapeadas $arrEstruturasCadastradas = null; @@ -542,7 +542,7 @@ private function validarRestricaoUnidadesCadastradas($idRepositorioEstrutura) * @param null|string $numeroDeIdentificacaoDaEstrutura * @return array */ - private function buscarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null) + protected function buscarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura = null) { $parametros = new stdClass(); $parametros->filtroDeEstruturasPorEstruturaPai = new stdClass(); @@ -754,10 +754,10 @@ public function consultarMotivosUrgencia() $arrResultado = $this->get($endpoint, $parametros); $arrMotivosUrgencia = []; if (isset($arrResultado)) { - $count = count($arrResultado['motivosUrgencia']); - + $count = count($arrResultado['motivosUrgencia']); for ($i = 0; $i < $count; $i++) { - $arrMotivosUrgencia[] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); + $codigo = $i + 1; + $arrMotivosUrgencia[$codigo] = mb_convert_encoding($arrResultado['motivosUrgencia'][$i]['descricao'], 'ISO-8859-1', 'UTF-8'); } } @@ -777,7 +777,7 @@ public function consultarMotivosUrgencia() * * @return array */ - public function consultarEspeciesDocumentais() + public function consultarEspeciesDocumentais() { $endpoint = 'especies'; try { @@ -785,13 +785,13 @@ public function consultarEspeciesDocumentais() $arrResultado = $this->get($endpoint, $parametros); $arrEspecies = []; - if (isset($arrResultado)) { - $count = count($arrResultado['especies']); - - for ($i = 0; $i < $count; $i++) { - $arrEspecies[] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); + if (isset($arrResultado)) { + $count = count($arrResultado['especies']); + for ($i = 0; $i < $count; $i++) { + $codigo = $i + 1; + $arrEspecies[$codigo] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); + } } - } } catch (Exception $e) { $mensagem = "Não foi encontrado nenhuma espécie documental."; @@ -2242,24 +2242,23 @@ public function isDisponivelCancelarTramite($strProtocolo = '') } } - public function consultarHipotesesLegais($ativos = true) + public function consultarHipotesesLegais($ativos = true) { $endpoint = "hipoteses"; - + $parametros = [ 'ativos' => $ativos ]; - + try { $arrResultado = $this->get($endpoint, $parametros); - return $arrResultado; - - if (empty($hipoteses)) { + + if (empty($arrResultado)) { return []; } - - return $hipoteses; - + + return $arrResultado; + } catch(Exception $e){ $mensagem = "Falha na obtenção de hipóteses legais"; $detalhes = InfraString::formatarJavaScript($this->tratarFalhaWebService($e)); @@ -2279,7 +2278,8 @@ protected function contarConectado(ProcessoEletronicoDTO $objProcessoEletronicoD } } - private function tentarNovamenteSobErroHTTP($callback, $numTentativa = 1) + + protected function tentarNovamenteSobErroHTTP($callback, $numTentativa = 1) { try { return $callback($this->getObjPenWs()); @@ -2733,14 +2733,14 @@ public function listarAssociacoesDocumentos($idProcedimento) /** * Converter arrays associativo para objetos */ - public static function converterArrayParaObjeto($array) + public function converterArrayParaObjeto($array) { if (is_array($array)) { // Verificar se o array é associativo if (self::verificarSeArrayAssociativo($array)) { $object = new stdClass(); foreach ($array as $key => $value) { - $object->$key = self::converterArrayParaObjeto($value); + $object->$key = $this->converterArrayParaObjeto($value); } return $object; } else { diff --git a/tests_sei4/unitario/bootstrap.php b/tests_sei4/unitario/bootstrap.php index 69fdb7ba6..383369434 100755 --- a/tests_sei4/unitario/bootstrap.php +++ b/tests_sei4/unitario/bootstrap.php @@ -1,9 +1,5 @@ + + + /opt/sei/web/modulos/pen/vendor + /opt/sei/web/modulos/pen/config + + + /opt/sei/web/modulos/pen + + diff --git a/tests_sei4/unitario/rn/CompararVersoesTest.php b/tests_sei4/unitario/rn/CompararVersoesTest.php new file mode 100644 index 000000000..949f944c3 --- /dev/null +++ b/tests_sei4/unitario/rn/CompararVersoesTest.php @@ -0,0 +1,17 @@ +assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); + $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); + $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php new file mode 100644 index 000000000..715e414cb --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php @@ -0,0 +1,140 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'buscarEstruturaRest']) + ->getMock(); + } + + /** + * Testa o comportamento do método buscarEstrutura em caso de sucesso. + * + * Simula uma resposta válida para o método `buscarEstruturaRest` e verifica + * se o retorno do método testado é uma instância válida da classe EstruturaDTO. + * + * @return void + */ + public function testBuscarEstruturaSucesso() + { + // Mock do retorno esperado da API + $estruturaMock = [ + 'numeroDeIdentificacaoDaEstrutura' => '12345', + 'nome' => 'Estrutura Teste', + 'sigla' => 'ET', + 'ativo' => true, + 'aptoParaReceber' => true, + 'codigoNoOrgaoEntidade' => 'CNOE123', + 'hierarquia' => [ + ['sigla' => 'Nivel1'], + ['sigla' => 'Nivel2'] + ] + ]; + + // Mock do método buscarEstruturaRest + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn($estruturaMock); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + /** + * Testa o comportamento do método buscarEstrutura com um repositório inválido. + * + * Verifica se o método lança a exceção correta ao receber um ID de repositório inválido. + * + * @return void + */ + public function testBuscarEstruturaComRepositorioInvalido() + { + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->buscarEstrutura(0); // Passando um ID inválido + } + + /** + * Testa o comportamento do método buscarEstrutura quando a estrutura não é encontrada. + * + * Simula o retorno `null` do método `buscarEstruturaRest` e verifica se o + * método principal retorna `null` como esperado. + * + * @return void + */ + public function testBuscarEstruturaNaoEncontrada() + { + // Mock para retorno nulo da API + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn(null); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + // Asserção de retorno nulo + $this->assertNull($resultado); + } + + /** + * Testa o comportamento do método buscarEstrutura quando ocorre uma exceção. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é lançada + * pelo método testado. + * + * @return void + */ + public function testBuscarEstruturaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception()); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..6d72134e3 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,136 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'tentarNovamenteSobErroHTTP']) + ->getMock(); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` com parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna o número correto de estruturas. + * - As estruturas têm os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiComIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = [ + (object) ['id' => 1, 'nome' => 'Estrutura 1'], + (object) ['id' => 2, 'nome' => 'Estrutura 2'] + ]; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + $numeroDeIdentificacaoDaEstrutura = 'ABC123'; + + $resultado = $metodoPrivado->invokeArgs( + $this->mockService, + [$idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura] + ); + + // Validações + $this->assertIsArray($resultado, 'Deve retornar um array'); + $this->assertCount(2, $resultado, 'Deve retornar duas estruturas'); + $this->assertEquals('Estrutura 1', $resultado[0]->nome, 'Deve retornar a estrutura 1'); + $this->assertEquals('Estrutura 2', $resultado[1]->nome, 'Deve retornar a estrutura 2'); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` sem parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna uma estrutura única com os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiSemIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = (object) ['id' => 1, 'nome' => 'Estrutura Única']; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + + $resultado = $metodoPrivado->invokeArgs($this->mockService, [$idRepositorioEstrutura]); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(1, $resultado); + $this->assertEquals('Estrutura Única', $resultado[0]->nome); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php new file mode 100644 index 000000000..4c85d7dfd --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php @@ -0,0 +1,87 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['delete']) + ->getMock(); + } + + /** + * Teste do método cancelarTramite em caso de sucesso. + * + * Este teste simula a execução do método cancelarTramite quando o método 'delete' do mock + * retorna uma resposta bem-sucedida (null). O teste verifica se o retorno do método é + * o esperado (null), indicando que o trâmite foi cancelado com sucesso. + * + * @return void + */ + public function testCancelarTramiteSucesso() + { + $mockResponse = null; + + // Configura o mock para retornar a resposta esperada (null) + $this->mockService->expects($this->once()) + ->method('delete') + ->willReturn($mockResponse); + + // Executa o método cancelarTramite + $resultado = $this->mockService->cancelarTramite(999); + + // Verifica se o retorno é nulo (indicando sucesso no cancelamento) + $this->assertNull($mockResponse, "O objeto é nulo"); + } + + /** + * Teste do método cancelarTramite quando ocorre uma exceção. + * + * Este teste simula a falha no método cancelarTramite, quando o método 'delete' do mock + * lança uma exceção. O teste verifica se a exceção esperada (InfraException) é lançada e + * se a mensagem associada à exceção está correta. + * + * @return void + * @throws \InfraException Quando ocorre uma falha no cancelamento do trâmite + */ + public function testCancelarTramiteLancaExcecao() + { + // Configura o mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('delete') + ->willThrowException(new Exception('Erro na requisição')); + + // Espera que a exceção InfraException seja lançada com a mensagem esperada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no cancelamento de trâmite de processo'); + + // Executa o método cancelarTramite e verifica se a exceção é lançada + $this->mockService->cancelarTramite(999); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php new file mode 100644 index 000000000..f436fbd3f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php @@ -0,0 +1,96 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `cienciaRecusa` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as chaves `status` e `mensagem`. + * - Contém os valores esperados no retorno. + */ + public function testCienciaRecusaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'status' => 'sucesso', + 'mensagem' => 'Ciência registrada com sucesso.' + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('tramites/123/ciencia', ['IDT' => 123]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->cienciaRecusa(123); + + // Validações + $this->assertIsArray($resultado); + $this->assertArrayHasKey('status', $resultado); + $this->assertEquals('sucesso', $resultado['status']); + $this->assertEquals('Ciência registrada com sucesso.', $resultado['mensagem']); + } + + /** + * Testa o método `cienciaRecusa` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testCienciaRecusaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no registro de ciência da recusa de trâmite'); + + // Chamada do método (deve lançar exceção) + $this->mockService->cienciaRecusa(123); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php new file mode 100644 index 000000000..2b22a1acc --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php @@ -0,0 +1,131 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarEspeciesDocumentais` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as espécies documentais. + * - Converte corretamente as strings para o formato esperado (`ISO-8859-1`). + */ + public function testConsultarEspeciesDocumentaisComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [ + ['nomeNoProdutor' => 'Espécie 1'], + ['nomeNoProdutor' => 'Espécie 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals( + mb_convert_encoding('Espécie 1', 'ISO-8859-1', 'UTF-8'), + $resultado[0] + ); + $this->assertEquals( + mb_convert_encoding('Espécie 2', 'ISO-8859-1', 'UTF-8'), + $resultado[1] + ); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarEspeciesDocumentaisSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarEspeciesDocumentaisComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Não foi encontrado nenhuma espécie documental.'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarEspeciesDocumentais(); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php new file mode 100644 index 000000000..2152b5bb9 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php @@ -0,0 +1,108 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, false); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaBolRetornoRawTrueSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, true); + + $this->assertInstanceOf(stdClass::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..519b47b0f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,122 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'validarRestricaoUnidadesCadastradas', 'buscarEstruturasPorEstruturaPai']) + ->getMock(); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para um caso de sucesso. + * + * Verifica se a lista de estruturas é retornada e ordenada corretamente com base nos nomes. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiRetornaEstruturasOrdenadas() + { + $idRepositorioEstrutura = 1; + $mockEstruturas = [ + (object)['nome' => 'Unidade B', 'codigo' => '002'], + (object)['nome' => 'Unidade A', 'codigo' => '001'], + (object)['nome' => 'Unidade C', 'codigo' => '003'], + ]; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->with($idRepositorioEstrutura) + ->willReturn(null); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, null) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + + $this->assertCount(3, $resultado); + $this->assertEquals('Unidade A', $resultado[0]->nome); + $this->assertEquals('Unidade B', $resultado[1]->nome); + $this->assertEquals('Unidade C', $resultado[2]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para uma unidade pai específica. + * + * Verifica se a busca por estrutura pai é realizada corretamente ao fornecer + * um número de identificação específico. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiComUnidadePaiEspecifica() + { + $idRepositorioEstrutura = 1; + $numeroDeIdentificacaoDaEstrutura = '001'; + $mockEstruturas = [ + (object)['nome' => 'Unidade D', 'codigo' => '004'], + ]; + + $this->mockService->expects($this->never()) + ->method('validarRestricaoUnidadesCadastradas'); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura); + + $this->assertCount(1, $resultado); + $this->assertEquals('Unidade D', $resultado[0]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai quando ocorre um erro. + * + * Verifica se uma exceção InfraException é lançada corretamente ao ocorrer + * um erro no método validarRestricaoUnidadesCadastradas. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->willThrowException(new Exception('Erro no serviço')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php new file mode 100644 index 000000000..7acd9b36d --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php @@ -0,0 +1,82 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "estruturas" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ] + ], + "totalDeRegistros" => 1 + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstruturas(159098, []); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturas(159098, []); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php new file mode 100644 index 000000000..9c13025b7 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php @@ -0,0 +1,111 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o sucesso da consulta de hipóteses legais. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array de hipoteses + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = [ + 'hipoteseslegais' => [ + ] + ]; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertArrayHasKey('hipoteseslegais', $resultado); + } + + /** + * Testa o sucesso da consulta de hipóteses legais com retorno vazio. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array vazio + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisRetornoVazioSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = []; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertEquals(0, count($resultado)); + } + + /** + * Testa o lançamento de exceção ao tentar consultar as hipóteses legais. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre um erro + * ao tentar realizar a consulta (simulando a exceção gerada pelo método 'get'). + * + * @return void + * @throws InfraException Se a exceção de infra-estrutura for gerada. + */ + public function testConsultarHipotesesLegaisLancaExcecao() + { + // Configura o mock para lançar uma exceção quando o método 'get' for chamado + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + // Define a expectativa de que a exceção InfraException será lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de hipóteses legais'); + + // Chama o método que deve lançar a exceção + $this->mockService->consultarHipotesesLegais(true); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php new file mode 100644 index 000000000..ed8532f0b --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php @@ -0,0 +1,126 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'get']) + ->getMock(); + } + + /** + * Testa o método `consultarMotivosUrgencia` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array. + * - Contém os motivos de urgência esperados. + */ + public function testConsultarMotivosUrgenciaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [ + ['descricao' => 'Motivo 1'], + ['descricao' => 'Motivo 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals('Motivo 1', $resultado[0]); + $this->assertEquals('Motivo 2', $resultado[1]); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarMotivosUrgenciaSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarMotivosUrgenciaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarMotivosUrgencia(); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php new file mode 100644 index 000000000..34788d48b --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php @@ -0,0 +1,125 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna uma instância de `RepositorioDTO`. + * - Preenche os atributos da instância com os valores corretos. + */ + public function testConsultarRepositoriosDeEstruturasComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + [ + 'id' => 5, + 'nome' => 'Repositório 1', + 'ativo' => true + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(5); + + // Validações + $this->assertInstanceOf(RepositorioDTO::class, $resultado); + $this->assertEquals(5, $resultado->getNumId()); + $this->assertEquals( + mb_convert_encoding('Repositório 1', 'ISO-8859-1', 'UTF-8'), + $resultado->getStrNome() + ); + $this->assertTrue($resultado->getBolAtivo()); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando não há resultados. + * + * Verifica se o método: + * - Retorna `null` quando não há repositórios disponíveis. + */ + public function testConsultarRepositoriosDeEstruturasSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = []; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(123); + + // Validações + $this->assertNull($resultado); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarRepositoriosDeEstruturasComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarRepositoriosDeEstruturas(123); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php new file mode 100644 index 000000000..be505824f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php @@ -0,0 +1,130 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasAutoCompletar com parâmetros válidos. + * + * Verifica se o retorno do método é formatado corretamente, incluindo: + * - Propriedades convertidas para UTF-8. + * - Hierarquia de siglas mapeada. + * - Quantidade correta de itens no resultado. + */ + public function testListarEstruturasAutoCompletarRetornaEstruturasFormatadas() + { + // Simulação de parâmetros e retorno esperado + $idRepositorioEstrutura = 1; + $nome = 'Teste Unidade'; + $mockResultado = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 101, + 'nome' => 'Unidade A', + 'sigla' => 'UA', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '123', + 'hierarquia' => [ + ['sigla' => 'ORG'] + ] + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => 102, + 'nome' => 'Unidade B', + 'sigla' => 'UB', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '456', + 'hierarquia' => [] + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->callback(function ($parametros) use ($nome) { + return $parametros['nome'] === $nome && $parametros['apenasAtivas'] === true; + })) + ->willReturn($mockResultado); + + $resultado = $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura, $nome); + + // Asserções sobre o retorno + $this->assertIsArray($resultado); + $this->assertArrayHasKey('diferencaDeRegistros', $resultado); + $this->assertArrayHasKey('itens', $resultado); + $this->assertCount(2, $resultado['itens']); + } + + /** + * Testa o método listarEstruturasAutoCompletar quando ocorre um erro. + * + * Simula um erro no método consultarEstruturas e verifica se uma exceção + * InfraException é lançada corretamente com a mensagem esperada. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro interno')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasAutoCompletar com repositório inválido. + * + * Verifica se uma exceção InfraException é lançada quando o ID do + * repositório de estruturas fornecido é inválido. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php new file mode 100644 index 000000000..a23711182 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php @@ -0,0 +1,124 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um caso de sucesso. + * + * Simula uma resposta válida do método 'consultarEstruturas' e verifica + * se o retorno é uma lista de objetos EstruturaDTO com os dados corretos. + * + * @return void + */ + public function testListarEstruturasBuscaTextualRetornaEstruturas() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Raiz'; + $mockResponse = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => '123', + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [['sigla' => 'H1'], ['sigla' => 'H2']], + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => '456', + 'nome' => 'Estrutura 2', + 'sigla' => 'E2', + 'ativo' => false, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '002', + 'hierarquia' => [['sigla' => 'H3']], + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->arrayHasKey('identificacaoDoRepositorioDeEstruturas')) + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura, $nome); + + $this->assertCount(2, $resultado); + $this->assertInstanceOf(EstruturaDTO::class, $resultado[0]); + $this->assertEquals('123', $resultado[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $resultado[0]->getStrNome()); + $this->assertEquals(['H1', 'H2'], $resultado[0]->getArrHierarquia()); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um repositório inválido. + * + * Verifica se uma exceção InfraException é lançada ao fornecer um ID de repositório inválido. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasBuscaTextual para falhas no web service. + * + * Simula um erro no método 'consultarEstruturas' e verifica se a exceção + * InfraException é lançada com a mensagem correta. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaErroWebService() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php new file mode 100644 index 000000000..f8d69ea83 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php @@ -0,0 +1,67 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testListarPendenciasSucesso() + { + $mockResponse = [ + [ + 'status' => 2, + 'IDT' => 999 + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarPendencias(true); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(PendenciaDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + public function testListarPendenciasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na listagem de pendências de trâmite de processos'); + + $this->mockService->listarPendencias(true); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php new file mode 100644 index 000000000..dbd027c18 --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php @@ -0,0 +1,97 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele + * retorna uma lista de repositórios de estruturas com sucesso. + * + * Cenário testado: + * - O método 'get' retorna uma lista simulada de repositórios. + * - O retorno do método deve ser um array contendo objetos do tipo RepositorioDTO. + * + * Asserções: + * - O retorno deve ser um array. + * - A quantidade de itens no retorno deve ser igual à quantidade simulada. + * - O primeiro item do retorno deve ser uma instância de RepositorioDTO. + * + * @return void + */ + public function testListarRepositoriosDeEstruturasRetornaListaSucesso() + { + $mockResponse = [ + ["id" => 49, "nome" => "Acre - AC", "ativo" => true], + ["id" => 2, "nome" => "Advocacia-Geral da União", "ativo" => true], + ["id" => 7, "nome" => "Alagoas( Estado)", "ativo" => true], + ["id" => 20, "nome" => "Banco Central do Brasil 2", "ativo" => true], + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarRepositoriosDeEstruturas(); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(RepositorioDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele lança + * uma exceção quando a requisição falha. + * + * Cenário testado: + * - O método 'get' lança uma exceção simulada. + * - O método listarRepositoriosDeEstruturas deve capturar a exceção e + * relançar uma InfraException com a mensagem apropriada. + * + * Asserções: + * - Uma exceção do tipo InfraException deve ser lançada. + * - A mensagem da exceção deve ser "Falha na obtenção dos Repositórios de Estruturas Organizacionais". + * + * @return void + */ + public function testListarRepositoriosDeEstruturasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + $this->mockService->listarRepositoriosDeEstruturas(); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php new file mode 100644 index 000000000..45a8d2edb --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php @@ -0,0 +1,120 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa a listagem de estruturas com sucesso. + * + * Este teste verifica se o método listarEstruturas retorna corretamente + * as estruturas esperadas quando os dados são fornecidos corretamente. + */ + public function testListarEstruturasComSucesso() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Teste'; + $mockRetornoConsulta = [ + 'totalDeRegistros' => 1, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 123, + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [ + ['sigla' => 'H1'], + ['sigla' => 'H2'], + ], + ], + ], + ]; + + // Define a expectativa para o mock do método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willReturn($mockRetornoConsulta); + + // Executa o método sob teste + $result = $this->mockService->listarEstruturas($idRepositorioEstrutura, $nome); + + // Validações dos resultados + $this->assertCount(1, $result); + $this->assertInstanceOf(EstruturaDTO::class, $result[0]); + $this->assertEquals(123, $result[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $result[0]->getStrNome()); + $this->assertEquals('E1', $result[0]->getStrSigla()); + $this->assertEquals(['H1', 'H2'], $result[0]->getArrHierarquia()); + } + + /** + * Testa a listagem de estruturas com repositório inválido. + * + * Este teste verifica se uma exceção é lançada quando o ID do repositório + * de estruturas é inválido (null). + */ + public function testListarEstruturasComRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } + + /** + * Testa a listagem de estruturas com erro na consulta. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre + * um erro durante a consulta de estruturas. + */ + public function testListarEstruturasComErroNaConsulta() + { + $idRepositorioEstrutura = 1; + + // Configura o mock para lançar uma exceção no método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro na consulta')); + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php new file mode 100644 index 000000000..1fb0da91f --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php @@ -0,0 +1,103 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o recebimento de recibo de trâmite com sucesso. + * + * Simula a execução do método `get` e o retorno de um objeto + * convertido a partir de um array, verificando se o resultado + * final corresponde ao esperado. + * + * @return void + */ + public function testReceberReciboDeTramiteComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'recibo' => [ + 'hashesDosComponentesDigitais' => ['hash123'], + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($resultadoMock); + + // Substituir o método estático converterArrayParaObjeto + $resultadoObjetoMock = (object)[ + 'recibo' => (object)[ + 'hashDoComponenteDigital' => 'hash123', + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($resultadoObjetoMock); + + // Chamada do método + $resultado = $this->mockService->receberReciboDeTramite(123); + + // Asserções + $this->assertIsObject($resultado); + $this->assertEquals('hash123', $resultado->recibo->hashDoComponenteDigital); + $this->assertEquals('valor', $resultado->recibo->outroDado); + } + + /** + * Testa o cenário em que ocorre um erro ao receber o recibo de trâmite. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é + * lançada pelo método testado. + * + * @return void + */ + public function testReceberReciboDeTramiteComErro() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Verifica se a exceção esperada é lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no recebimento de recibo de trâmite.'); + + $this->mockService->receberReciboDeTramite(123); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php new file mode 100644 index 000000000..6c915341b --- /dev/null +++ b/tests_sei4/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php @@ -0,0 +1,117 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o método solicitarMetadados para um caso de sucesso. + * + * Este teste verifica se o método retorna um objeto stdClass corretamente + * configurado quando os dados retornados pelo método get são válidos. + * + * @return void + */ + public function testSolicitarMetadadosRetornaObjetoCorreto() + { + $parNumIdentificacaoTramite = 123; + + // Simular a resposta do método get + $mockResponse = [ + 'propriedadesAdicionais' => ['algum_valor'], + 'processo' => [ + 'documentos' => [ + [ + 'componentesDigitais' => [ + [ + 'assinaturasDigitais' => [ + ['alguma_assinatura'] + ] + ] + ] + ] + ] + ] + ]; + + $mockConvertedObject = (object) [ + 'NRE' => '123456', + 'processo' => (object) [ + 'documentos' => [(object) ['algum_valor']], + 'interessados' => [(object) ['algum_interessado']] + ] + ]; + + // Configura o mock para o método get + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Configura o mock para o método converterArrayParaObjeto + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($mockConvertedObject); + + // Chama o método a ser testado + $resultado = $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + + // Verifica o retorno + $this->assertInstanceOf(stdClass::class, $resultado); + $this->assertEquals($parNumIdentificacaoTramite, $resultado->IDT); + $this->assertEquals('123456', $resultado->metadados->NRE); + } + + /** + * Testa o método solicitarMetadados para um caso de falha. + * + * Este teste verifica se uma exceção InfraException é lançada corretamente + * quando o método get falha ao buscar os dados necessários. + * + * @return void + */ + public function testSolicitarMetadadosLancaExcecao() + { + $parNumIdentificacaoTramite = 123; + + // Configura o mock para o método get para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na solicitação de metadados do processo'); + + // Chama o método e espera uma exceção + $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + } +} \ No newline at end of file diff --git a/tests_sei4/unitario/rn/ProcessoEletronicoRNTest.php b/tests_sei4/unitario/rn/ProcessoEletronicoRNTest.php deleted file mode 100755 index dedc8dbe7..000000000 --- a/tests_sei4/unitario/rn/ProcessoEletronicoRNTest.php +++ /dev/null @@ -1,96 +0,0 @@ -objProcessoEletronicoRN = new ProcessoEletronicoRN(); - } - - /** - * Testes do método privado reduzirCampoTexto - * - * @return void - */ - public function testReduzirCampoTexto() - { - $numTamanhoMaximo = 53; - // Teste considerando uma palavra pequena ao final do texto - $strTexto = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii"; - $strResultadoEsperado = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas uma palavra - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com uma palavra grande ao final - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando texto longo e palavro curta ao finals - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto curto abaixo do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa a"; - $strResultadoEsperado = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - // Teste considerando um texto nulo - $strTexto = null; - $strResultadoEsperado = null; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com ultima palavra menor que a reticencias - $strTexto = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - } - - public function testCompararVersoes(){ - $this->assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); - $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); - $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); - } -} diff --git a/tests_sei41/unitario/bootstrap.php b/tests_sei41/unitario/bootstrap.php index 69fdb7ba6..383369434 100755 --- a/tests_sei41/unitario/bootstrap.php +++ b/tests_sei41/unitario/bootstrap.php @@ -1,9 +1,5 @@ + + + /opt/sei/web/modulos/pen/vendor + /opt/sei/web/modulos/pen/config + + + /opt/sei/web/modulos/pen + + diff --git a/tests_sei41/unitario/rn/CompararVersoesTest.php b/tests_sei41/unitario/rn/CompararVersoesTest.php new file mode 100644 index 000000000..949f944c3 --- /dev/null +++ b/tests_sei41/unitario/rn/CompararVersoesTest.php @@ -0,0 +1,17 @@ +assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); + $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); + $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php new file mode 100644 index 000000000..715e414cb --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php @@ -0,0 +1,140 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'buscarEstruturaRest']) + ->getMock(); + } + + /** + * Testa o comportamento do método buscarEstrutura em caso de sucesso. + * + * Simula uma resposta válida para o método `buscarEstruturaRest` e verifica + * se o retorno do método testado é uma instância válida da classe EstruturaDTO. + * + * @return void + */ + public function testBuscarEstruturaSucesso() + { + // Mock do retorno esperado da API + $estruturaMock = [ + 'numeroDeIdentificacaoDaEstrutura' => '12345', + 'nome' => 'Estrutura Teste', + 'sigla' => 'ET', + 'ativo' => true, + 'aptoParaReceber' => true, + 'codigoNoOrgaoEntidade' => 'CNOE123', + 'hierarquia' => [ + ['sigla' => 'Nivel1'], + ['sigla' => 'Nivel2'] + ] + ]; + + // Mock do método buscarEstruturaRest + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn($estruturaMock); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + /** + * Testa o comportamento do método buscarEstrutura com um repositório inválido. + * + * Verifica se o método lança a exceção correta ao receber um ID de repositório inválido. + * + * @return void + */ + public function testBuscarEstruturaComRepositorioInvalido() + { + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->buscarEstrutura(0); // Passando um ID inválido + } + + /** + * Testa o comportamento do método buscarEstrutura quando a estrutura não é encontrada. + * + * Simula o retorno `null` do método `buscarEstruturaRest` e verifica se o + * método principal retorna `null` como esperado. + * + * @return void + */ + public function testBuscarEstruturaNaoEncontrada() + { + // Mock para retorno nulo da API + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn(null); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + // Asserção de retorno nulo + $this->assertNull($resultado); + } + + /** + * Testa o comportamento do método buscarEstrutura quando ocorre uma exceção. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é lançada + * pelo método testado. + * + * @return void + */ + public function testBuscarEstruturaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception()); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..6d72134e3 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,136 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'tentarNovamenteSobErroHTTP']) + ->getMock(); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` com parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna o número correto de estruturas. + * - As estruturas têm os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiComIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = [ + (object) ['id' => 1, 'nome' => 'Estrutura 1'], + (object) ['id' => 2, 'nome' => 'Estrutura 2'] + ]; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + $numeroDeIdentificacaoDaEstrutura = 'ABC123'; + + $resultado = $metodoPrivado->invokeArgs( + $this->mockService, + [$idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura] + ); + + // Validações + $this->assertIsArray($resultado, 'Deve retornar um array'); + $this->assertCount(2, $resultado, 'Deve retornar duas estruturas'); + $this->assertEquals('Estrutura 1', $resultado[0]->nome, 'Deve retornar a estrutura 1'); + $this->assertEquals('Estrutura 2', $resultado[1]->nome, 'Deve retornar a estrutura 2'); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` sem parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna uma estrutura única com os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiSemIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = (object) ['id' => 1, 'nome' => 'Estrutura Única']; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + + $resultado = $metodoPrivado->invokeArgs($this->mockService, [$idRepositorioEstrutura]); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(1, $resultado); + $this->assertEquals('Estrutura Única', $resultado[0]->nome); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php new file mode 100644 index 000000000..4c85d7dfd --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php @@ -0,0 +1,87 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['delete']) + ->getMock(); + } + + /** + * Teste do método cancelarTramite em caso de sucesso. + * + * Este teste simula a execução do método cancelarTramite quando o método 'delete' do mock + * retorna uma resposta bem-sucedida (null). O teste verifica se o retorno do método é + * o esperado (null), indicando que o trâmite foi cancelado com sucesso. + * + * @return void + */ + public function testCancelarTramiteSucesso() + { + $mockResponse = null; + + // Configura o mock para retornar a resposta esperada (null) + $this->mockService->expects($this->once()) + ->method('delete') + ->willReturn($mockResponse); + + // Executa o método cancelarTramite + $resultado = $this->mockService->cancelarTramite(999); + + // Verifica se o retorno é nulo (indicando sucesso no cancelamento) + $this->assertNull($mockResponse, "O objeto é nulo"); + } + + /** + * Teste do método cancelarTramite quando ocorre uma exceção. + * + * Este teste simula a falha no método cancelarTramite, quando o método 'delete' do mock + * lança uma exceção. O teste verifica se a exceção esperada (InfraException) é lançada e + * se a mensagem associada à exceção está correta. + * + * @return void + * @throws \InfraException Quando ocorre uma falha no cancelamento do trâmite + */ + public function testCancelarTramiteLancaExcecao() + { + // Configura o mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('delete') + ->willThrowException(new Exception('Erro na requisição')); + + // Espera que a exceção InfraException seja lançada com a mensagem esperada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no cancelamento de trâmite de processo'); + + // Executa o método cancelarTramite e verifica se a exceção é lançada + $this->mockService->cancelarTramite(999); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php new file mode 100644 index 000000000..f436fbd3f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php @@ -0,0 +1,96 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `cienciaRecusa` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as chaves `status` e `mensagem`. + * - Contém os valores esperados no retorno. + */ + public function testCienciaRecusaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'status' => 'sucesso', + 'mensagem' => 'Ciência registrada com sucesso.' + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('tramites/123/ciencia', ['IDT' => 123]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->cienciaRecusa(123); + + // Validações + $this->assertIsArray($resultado); + $this->assertArrayHasKey('status', $resultado); + $this->assertEquals('sucesso', $resultado['status']); + $this->assertEquals('Ciência registrada com sucesso.', $resultado['mensagem']); + } + + /** + * Testa o método `cienciaRecusa` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testCienciaRecusaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no registro de ciência da recusa de trâmite'); + + // Chamada do método (deve lançar exceção) + $this->mockService->cienciaRecusa(123); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php new file mode 100644 index 000000000..2b22a1acc --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php @@ -0,0 +1,131 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarEspeciesDocumentais` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as espécies documentais. + * - Converte corretamente as strings para o formato esperado (`ISO-8859-1`). + */ + public function testConsultarEspeciesDocumentaisComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [ + ['nomeNoProdutor' => 'Espécie 1'], + ['nomeNoProdutor' => 'Espécie 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals( + mb_convert_encoding('Espécie 1', 'ISO-8859-1', 'UTF-8'), + $resultado[0] + ); + $this->assertEquals( + mb_convert_encoding('Espécie 2', 'ISO-8859-1', 'UTF-8'), + $resultado[1] + ); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarEspeciesDocumentaisSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarEspeciesDocumentaisComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Não foi encontrado nenhuma espécie documental.'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarEspeciesDocumentais(); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php new file mode 100644 index 000000000..2152b5bb9 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php @@ -0,0 +1,108 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, false); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaBolRetornoRawTrueSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, true); + + $this->assertInstanceOf(stdClass::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..519b47b0f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,122 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'validarRestricaoUnidadesCadastradas', 'buscarEstruturasPorEstruturaPai']) + ->getMock(); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para um caso de sucesso. + * + * Verifica se a lista de estruturas é retornada e ordenada corretamente com base nos nomes. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiRetornaEstruturasOrdenadas() + { + $idRepositorioEstrutura = 1; + $mockEstruturas = [ + (object)['nome' => 'Unidade B', 'codigo' => '002'], + (object)['nome' => 'Unidade A', 'codigo' => '001'], + (object)['nome' => 'Unidade C', 'codigo' => '003'], + ]; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->with($idRepositorioEstrutura) + ->willReturn(null); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, null) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + + $this->assertCount(3, $resultado); + $this->assertEquals('Unidade A', $resultado[0]->nome); + $this->assertEquals('Unidade B', $resultado[1]->nome); + $this->assertEquals('Unidade C', $resultado[2]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para uma unidade pai específica. + * + * Verifica se a busca por estrutura pai é realizada corretamente ao fornecer + * um número de identificação específico. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiComUnidadePaiEspecifica() + { + $idRepositorioEstrutura = 1; + $numeroDeIdentificacaoDaEstrutura = '001'; + $mockEstruturas = [ + (object)['nome' => 'Unidade D', 'codigo' => '004'], + ]; + + $this->mockService->expects($this->never()) + ->method('validarRestricaoUnidadesCadastradas'); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura); + + $this->assertCount(1, $resultado); + $this->assertEquals('Unidade D', $resultado[0]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai quando ocorre um erro. + * + * Verifica se uma exceção InfraException é lançada corretamente ao ocorrer + * um erro no método validarRestricaoUnidadesCadastradas. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->willThrowException(new Exception('Erro no serviço')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php new file mode 100644 index 000000000..7acd9b36d --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php @@ -0,0 +1,82 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "estruturas" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ] + ], + "totalDeRegistros" => 1 + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstruturas(159098, []); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturas(159098, []); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php new file mode 100644 index 000000000..9c13025b7 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php @@ -0,0 +1,111 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o sucesso da consulta de hipóteses legais. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array de hipoteses + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = [ + 'hipoteseslegais' => [ + ] + ]; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertArrayHasKey('hipoteseslegais', $resultado); + } + + /** + * Testa o sucesso da consulta de hipóteses legais com retorno vazio. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array vazio + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisRetornoVazioSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = []; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertEquals(0, count($resultado)); + } + + /** + * Testa o lançamento de exceção ao tentar consultar as hipóteses legais. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre um erro + * ao tentar realizar a consulta (simulando a exceção gerada pelo método 'get'). + * + * @return void + * @throws InfraException Se a exceção de infra-estrutura for gerada. + */ + public function testConsultarHipotesesLegaisLancaExcecao() + { + // Configura o mock para lançar uma exceção quando o método 'get' for chamado + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + // Define a expectativa de que a exceção InfraException será lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de hipóteses legais'); + + // Chama o método que deve lançar a exceção + $this->mockService->consultarHipotesesLegais(true); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php new file mode 100644 index 000000000..ed8532f0b --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php @@ -0,0 +1,126 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'get']) + ->getMock(); + } + + /** + * Testa o método `consultarMotivosUrgencia` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array. + * - Contém os motivos de urgência esperados. + */ + public function testConsultarMotivosUrgenciaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [ + ['descricao' => 'Motivo 1'], + ['descricao' => 'Motivo 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals('Motivo 1', $resultado[0]); + $this->assertEquals('Motivo 2', $resultado[1]); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarMotivosUrgenciaSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarMotivosUrgenciaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarMotivosUrgencia(); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php new file mode 100644 index 000000000..34788d48b --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php @@ -0,0 +1,125 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna uma instância de `RepositorioDTO`. + * - Preenche os atributos da instância com os valores corretos. + */ + public function testConsultarRepositoriosDeEstruturasComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + [ + 'id' => 5, + 'nome' => 'Repositório 1', + 'ativo' => true + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(5); + + // Validações + $this->assertInstanceOf(RepositorioDTO::class, $resultado); + $this->assertEquals(5, $resultado->getNumId()); + $this->assertEquals( + mb_convert_encoding('Repositório 1', 'ISO-8859-1', 'UTF-8'), + $resultado->getStrNome() + ); + $this->assertTrue($resultado->getBolAtivo()); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando não há resultados. + * + * Verifica se o método: + * - Retorna `null` quando não há repositórios disponíveis. + */ + public function testConsultarRepositoriosDeEstruturasSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = []; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(123); + + // Validações + $this->assertNull($resultado); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarRepositoriosDeEstruturasComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarRepositoriosDeEstruturas(123); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php new file mode 100644 index 000000000..be505824f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php @@ -0,0 +1,130 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasAutoCompletar com parâmetros válidos. + * + * Verifica se o retorno do método é formatado corretamente, incluindo: + * - Propriedades convertidas para UTF-8. + * - Hierarquia de siglas mapeada. + * - Quantidade correta de itens no resultado. + */ + public function testListarEstruturasAutoCompletarRetornaEstruturasFormatadas() + { + // Simulação de parâmetros e retorno esperado + $idRepositorioEstrutura = 1; + $nome = 'Teste Unidade'; + $mockResultado = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 101, + 'nome' => 'Unidade A', + 'sigla' => 'UA', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '123', + 'hierarquia' => [ + ['sigla' => 'ORG'] + ] + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => 102, + 'nome' => 'Unidade B', + 'sigla' => 'UB', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '456', + 'hierarquia' => [] + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->callback(function ($parametros) use ($nome) { + return $parametros['nome'] === $nome && $parametros['apenasAtivas'] === true; + })) + ->willReturn($mockResultado); + + $resultado = $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura, $nome); + + // Asserções sobre o retorno + $this->assertIsArray($resultado); + $this->assertArrayHasKey('diferencaDeRegistros', $resultado); + $this->assertArrayHasKey('itens', $resultado); + $this->assertCount(2, $resultado['itens']); + } + + /** + * Testa o método listarEstruturasAutoCompletar quando ocorre um erro. + * + * Simula um erro no método consultarEstruturas e verifica se uma exceção + * InfraException é lançada corretamente com a mensagem esperada. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro interno')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasAutoCompletar com repositório inválido. + * + * Verifica se uma exceção InfraException é lançada quando o ID do + * repositório de estruturas fornecido é inválido. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php new file mode 100644 index 000000000..a23711182 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php @@ -0,0 +1,124 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um caso de sucesso. + * + * Simula uma resposta válida do método 'consultarEstruturas' e verifica + * se o retorno é uma lista de objetos EstruturaDTO com os dados corretos. + * + * @return void + */ + public function testListarEstruturasBuscaTextualRetornaEstruturas() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Raiz'; + $mockResponse = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => '123', + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [['sigla' => 'H1'], ['sigla' => 'H2']], + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => '456', + 'nome' => 'Estrutura 2', + 'sigla' => 'E2', + 'ativo' => false, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '002', + 'hierarquia' => [['sigla' => 'H3']], + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->arrayHasKey('identificacaoDoRepositorioDeEstruturas')) + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura, $nome); + + $this->assertCount(2, $resultado); + $this->assertInstanceOf(EstruturaDTO::class, $resultado[0]); + $this->assertEquals('123', $resultado[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $resultado[0]->getStrNome()); + $this->assertEquals(['H1', 'H2'], $resultado[0]->getArrHierarquia()); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um repositório inválido. + * + * Verifica se uma exceção InfraException é lançada ao fornecer um ID de repositório inválido. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasBuscaTextual para falhas no web service. + * + * Simula um erro no método 'consultarEstruturas' e verifica se a exceção + * InfraException é lançada com a mensagem correta. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaErroWebService() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php new file mode 100644 index 000000000..f8d69ea83 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php @@ -0,0 +1,67 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testListarPendenciasSucesso() + { + $mockResponse = [ + [ + 'status' => 2, + 'IDT' => 999 + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarPendencias(true); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(PendenciaDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + public function testListarPendenciasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na listagem de pendências de trâmite de processos'); + + $this->mockService->listarPendencias(true); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php new file mode 100644 index 000000000..dbd027c18 --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php @@ -0,0 +1,97 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele + * retorna uma lista de repositórios de estruturas com sucesso. + * + * Cenário testado: + * - O método 'get' retorna uma lista simulada de repositórios. + * - O retorno do método deve ser um array contendo objetos do tipo RepositorioDTO. + * + * Asserções: + * - O retorno deve ser um array. + * - A quantidade de itens no retorno deve ser igual à quantidade simulada. + * - O primeiro item do retorno deve ser uma instância de RepositorioDTO. + * + * @return void + */ + public function testListarRepositoriosDeEstruturasRetornaListaSucesso() + { + $mockResponse = [ + ["id" => 49, "nome" => "Acre - AC", "ativo" => true], + ["id" => 2, "nome" => "Advocacia-Geral da União", "ativo" => true], + ["id" => 7, "nome" => "Alagoas( Estado)", "ativo" => true], + ["id" => 20, "nome" => "Banco Central do Brasil 2", "ativo" => true], + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarRepositoriosDeEstruturas(); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(RepositorioDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele lança + * uma exceção quando a requisição falha. + * + * Cenário testado: + * - O método 'get' lança uma exceção simulada. + * - O método listarRepositoriosDeEstruturas deve capturar a exceção e + * relançar uma InfraException com a mensagem apropriada. + * + * Asserções: + * - Uma exceção do tipo InfraException deve ser lançada. + * - A mensagem da exceção deve ser "Falha na obtenção dos Repositórios de Estruturas Organizacionais". + * + * @return void + */ + public function testListarRepositoriosDeEstruturasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + $this->mockService->listarRepositoriosDeEstruturas(); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php new file mode 100644 index 000000000..45a8d2edb --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php @@ -0,0 +1,120 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa a listagem de estruturas com sucesso. + * + * Este teste verifica se o método listarEstruturas retorna corretamente + * as estruturas esperadas quando os dados são fornecidos corretamente. + */ + public function testListarEstruturasComSucesso() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Teste'; + $mockRetornoConsulta = [ + 'totalDeRegistros' => 1, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 123, + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [ + ['sigla' => 'H1'], + ['sigla' => 'H2'], + ], + ], + ], + ]; + + // Define a expectativa para o mock do método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willReturn($mockRetornoConsulta); + + // Executa o método sob teste + $result = $this->mockService->listarEstruturas($idRepositorioEstrutura, $nome); + + // Validações dos resultados + $this->assertCount(1, $result); + $this->assertInstanceOf(EstruturaDTO::class, $result[0]); + $this->assertEquals(123, $result[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $result[0]->getStrNome()); + $this->assertEquals('E1', $result[0]->getStrSigla()); + $this->assertEquals(['H1', 'H2'], $result[0]->getArrHierarquia()); + } + + /** + * Testa a listagem de estruturas com repositório inválido. + * + * Este teste verifica se uma exceção é lançada quando o ID do repositório + * de estruturas é inválido (null). + */ + public function testListarEstruturasComRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } + + /** + * Testa a listagem de estruturas com erro na consulta. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre + * um erro durante a consulta de estruturas. + */ + public function testListarEstruturasComErroNaConsulta() + { + $idRepositorioEstrutura = 1; + + // Configura o mock para lançar uma exceção no método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro na consulta')); + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php new file mode 100644 index 000000000..1fb0da91f --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php @@ -0,0 +1,103 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o recebimento de recibo de trâmite com sucesso. + * + * Simula a execução do método `get` e o retorno de um objeto + * convertido a partir de um array, verificando se o resultado + * final corresponde ao esperado. + * + * @return void + */ + public function testReceberReciboDeTramiteComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'recibo' => [ + 'hashesDosComponentesDigitais' => ['hash123'], + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($resultadoMock); + + // Substituir o método estático converterArrayParaObjeto + $resultadoObjetoMock = (object)[ + 'recibo' => (object)[ + 'hashDoComponenteDigital' => 'hash123', + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($resultadoObjetoMock); + + // Chamada do método + $resultado = $this->mockService->receberReciboDeTramite(123); + + // Asserções + $this->assertIsObject($resultado); + $this->assertEquals('hash123', $resultado->recibo->hashDoComponenteDigital); + $this->assertEquals('valor', $resultado->recibo->outroDado); + } + + /** + * Testa o cenário em que ocorre um erro ao receber o recibo de trâmite. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é + * lançada pelo método testado. + * + * @return void + */ + public function testReceberReciboDeTramiteComErro() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Verifica se a exceção esperada é lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no recebimento de recibo de trâmite.'); + + $this->mockService->receberReciboDeTramite(123); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php new file mode 100644 index 000000000..6c915341b --- /dev/null +++ b/tests_sei41/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php @@ -0,0 +1,117 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o método solicitarMetadados para um caso de sucesso. + * + * Este teste verifica se o método retorna um objeto stdClass corretamente + * configurado quando os dados retornados pelo método get são válidos. + * + * @return void + */ + public function testSolicitarMetadadosRetornaObjetoCorreto() + { + $parNumIdentificacaoTramite = 123; + + // Simular a resposta do método get + $mockResponse = [ + 'propriedadesAdicionais' => ['algum_valor'], + 'processo' => [ + 'documentos' => [ + [ + 'componentesDigitais' => [ + [ + 'assinaturasDigitais' => [ + ['alguma_assinatura'] + ] + ] + ] + ] + ] + ] + ]; + + $mockConvertedObject = (object) [ + 'NRE' => '123456', + 'processo' => (object) [ + 'documentos' => [(object) ['algum_valor']], + 'interessados' => [(object) ['algum_interessado']] + ] + ]; + + // Configura o mock para o método get + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Configura o mock para o método converterArrayParaObjeto + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($mockConvertedObject); + + // Chama o método a ser testado + $resultado = $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + + // Verifica o retorno + $this->assertInstanceOf(stdClass::class, $resultado); + $this->assertEquals($parNumIdentificacaoTramite, $resultado->IDT); + $this->assertEquals('123456', $resultado->metadados->NRE); + } + + /** + * Testa o método solicitarMetadados para um caso de falha. + * + * Este teste verifica se uma exceção InfraException é lançada corretamente + * quando o método get falha ao buscar os dados necessários. + * + * @return void + */ + public function testSolicitarMetadadosLancaExcecao() + { + $parNumIdentificacaoTramite = 123; + + // Configura o mock para o método get para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na solicitação de metadados do processo'); + + // Chama o método e espera uma exceção + $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + } +} \ No newline at end of file diff --git a/tests_sei41/unitario/rn/ProcessoEletronicoRNTest.php b/tests_sei41/unitario/rn/ProcessoEletronicoRNTest.php deleted file mode 100755 index dedc8dbe7..000000000 --- a/tests_sei41/unitario/rn/ProcessoEletronicoRNTest.php +++ /dev/null @@ -1,96 +0,0 @@ -objProcessoEletronicoRN = new ProcessoEletronicoRN(); - } - - /** - * Testes do método privado reduzirCampoTexto - * - * @return void - */ - public function testReduzirCampoTexto() - { - $numTamanhoMaximo = 53; - // Teste considerando uma palavra pequena ao final do texto - $strTexto = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii"; - $strResultadoEsperado = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas uma palavra - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com uma palavra grande ao final - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando texto longo e palavro curta ao finals - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto curto abaixo do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa a"; - $strResultadoEsperado = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - // Teste considerando um texto nulo - $strTexto = null; - $strResultadoEsperado = null; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com ultima palavra menor que a reticencias - $strTexto = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - } - - public function testCompararVersoes(){ - $this->assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); - $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); - $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); - } -} diff --git a/tests_super/unitario/bootstrap.php b/tests_super/unitario/bootstrap.php index 69fdb7ba6..383369434 100755 --- a/tests_super/unitario/bootstrap.php +++ b/tests_super/unitario/bootstrap.php @@ -1,9 +1,5 @@ + + + /opt/sei/web/modulos/pen/vendor + /opt/sei/web/modulos/pen/config + + + /opt/sei/web/modulos/pen + + diff --git a/tests_super/unitario/rn/CompararVersoesTest.php b/tests_super/unitario/rn/CompararVersoesTest.php new file mode 100644 index 000000000..949f944c3 --- /dev/null +++ b/tests_super/unitario/rn/CompararVersoesTest.php @@ -0,0 +1,17 @@ +assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); + $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); + $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); + $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php new file mode 100644 index 000000000..715e414cb --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturaTest.php @@ -0,0 +1,140 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'buscarEstruturaRest']) + ->getMock(); + } + + /** + * Testa o comportamento do método buscarEstrutura em caso de sucesso. + * + * Simula uma resposta válida para o método `buscarEstruturaRest` e verifica + * se o retorno do método testado é uma instância válida da classe EstruturaDTO. + * + * @return void + */ + public function testBuscarEstruturaSucesso() + { + // Mock do retorno esperado da API + $estruturaMock = [ + 'numeroDeIdentificacaoDaEstrutura' => '12345', + 'nome' => 'Estrutura Teste', + 'sigla' => 'ET', + 'ativo' => true, + 'aptoParaReceber' => true, + 'codigoNoOrgaoEntidade' => 'CNOE123', + 'hierarquia' => [ + ['sigla' => 'Nivel1'], + ['sigla' => 'Nivel2'] + ] + ]; + + // Mock do método buscarEstruturaRest + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn($estruturaMock); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + /** + * Testa o comportamento do método buscarEstrutura com um repositório inválido. + * + * Verifica se o método lança a exceção correta ao receber um ID de repositório inválido. + * + * @return void + */ + public function testBuscarEstruturaComRepositorioInvalido() + { + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->buscarEstrutura(0); // Passando um ID inválido + } + + /** + * Testa o comportamento do método buscarEstrutura quando a estrutura não é encontrada. + * + * Simula o retorno `null` do método `buscarEstruturaRest` e verifica se o + * método principal retorna `null` como esperado. + * + * @return void + */ + public function testBuscarEstruturaNaoEncontrada() + { + // Mock para retorno nulo da API + $this->mockService->expects($this->once()) + ->method('buscarEstruturaRest') + ->with(1, 'Estrutura Raiz') + ->willReturn(null); + + // Chamada do método + $resultado = $this->mockService->buscarEstrutura( + 1, // idRepositorioEstrutura + 'Estrutura Raiz' // Nome ou identificador raiz + ); + + // Asserção de retorno nulo + $this->assertNull($resultado); + } + + /** + * Testa o comportamento do método buscarEstrutura quando ocorre uma exceção. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é lançada + * pelo método testado. + * + * @return void + */ + public function testBuscarEstruturaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception()); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..6d72134e3 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/BuscarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,136 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'tentarNovamenteSobErroHTTP']) + ->getMock(); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` com parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna o número correto de estruturas. + * - As estruturas têm os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiComIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = [ + (object) ['id' => 1, 'nome' => 'Estrutura 1'], + (object) ['id' => 2, 'nome' => 'Estrutura 2'] + ]; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + $numeroDeIdentificacaoDaEstrutura = 'ABC123'; + + $resultado = $metodoPrivado->invokeArgs( + $this->mockService, + [$idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura] + ); + + // Validações + $this->assertIsArray($resultado, 'Deve retornar um array'); + $this->assertCount(2, $resultado, 'Deve retornar duas estruturas'); + $this->assertEquals('Estrutura 1', $resultado[0]->nome, 'Deve retornar a estrutura 1'); + $this->assertEquals('Estrutura 2', $resultado[1]->nome, 'Deve retornar a estrutura 2'); + } + + /** + * Testa o método `buscarEstruturasPorEstruturaPai` sem parâmetros de identificação. + * + * Verifica se o método: + * - Retorna um array. + * - Retorna uma estrutura única com os valores esperados. + */ + public function testBuscarEstruturasPorEstruturaPaiSemIdentificacao() + { + // Configuração do mock + $resultadoMock = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai = new stdClass(); + $resultadoMock->estruturasEncontradasNoFiltroPorEstruturaPai->estrutura = (object) ['id' => 1, 'nome' => 'Estrutura Única']; + + $this->mockService->expects($this->once()) + ->method('tentarNovamenteSobErroHTTP') + ->willReturnCallback(function ($callback) use ($resultadoMock) { + $mockObjPenWs = $this->getMockBuilder(stdClass::class) + ->addMethods(['consultarEstruturasPorEstruturaPai']) + ->getMock(); + $mockObjPenWs->method('consultarEstruturasPorEstruturaPai') + ->willReturn($resultadoMock); + + return $callback($mockObjPenWs); + }); + + // Reflexão para acessar o método privado + $reflexao = new ReflectionClass($this->mockService); + $metodoPrivado = $reflexao->getMethod('buscarEstruturasPorEstruturaPai'); + $metodoPrivado->setAccessible(true); + + // Teste + $idRepositorioEstrutura = 123; + + $resultado = $metodoPrivado->invokeArgs($this->mockService, [$idRepositorioEstrutura]); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(1, $resultado); + $this->assertEquals('Estrutura Única', $resultado[0]->nome); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php new file mode 100644 index 000000000..4c85d7dfd --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/CancelarTramiteTest.php @@ -0,0 +1,87 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['delete']) + ->getMock(); + } + + /** + * Teste do método cancelarTramite em caso de sucesso. + * + * Este teste simula a execução do método cancelarTramite quando o método 'delete' do mock + * retorna uma resposta bem-sucedida (null). O teste verifica se o retorno do método é + * o esperado (null), indicando que o trâmite foi cancelado com sucesso. + * + * @return void + */ + public function testCancelarTramiteSucesso() + { + $mockResponse = null; + + // Configura o mock para retornar a resposta esperada (null) + $this->mockService->expects($this->once()) + ->method('delete') + ->willReturn($mockResponse); + + // Executa o método cancelarTramite + $resultado = $this->mockService->cancelarTramite(999); + + // Verifica se o retorno é nulo (indicando sucesso no cancelamento) + $this->assertNull($mockResponse, "O objeto é nulo"); + } + + /** + * Teste do método cancelarTramite quando ocorre uma exceção. + * + * Este teste simula a falha no método cancelarTramite, quando o método 'delete' do mock + * lança uma exceção. O teste verifica se a exceção esperada (InfraException) é lançada e + * se a mensagem associada à exceção está correta. + * + * @return void + * @throws \InfraException Quando ocorre uma falha no cancelamento do trâmite + */ + public function testCancelarTramiteLancaExcecao() + { + // Configura o mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('delete') + ->willThrowException(new Exception('Erro na requisição')); + + // Espera que a exceção InfraException seja lançada com a mensagem esperada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no cancelamento de trâmite de processo'); + + // Executa o método cancelarTramite e verifica se a exceção é lançada + $this->mockService->cancelarTramite(999); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php new file mode 100644 index 000000000..f436fbd3f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/CienciaRecusaTest.php @@ -0,0 +1,96 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `cienciaRecusa` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as chaves `status` e `mensagem`. + * - Contém os valores esperados no retorno. + */ + public function testCienciaRecusaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'status' => 'sucesso', + 'mensagem' => 'Ciência registrada com sucesso.' + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('tramites/123/ciencia', ['IDT' => 123]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->cienciaRecusa(123); + + // Validações + $this->assertIsArray($resultado); + $this->assertArrayHasKey('status', $resultado); + $this->assertEquals('sucesso', $resultado['status']); + $this->assertEquals('Ciência registrada com sucesso.', $resultado['mensagem']); + } + + /** + * Testa o método `cienciaRecusa` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testCienciaRecusaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no registro de ciência da recusa de trâmite'); + + // Chamada do método (deve lançar exceção) + $this->mockService->cienciaRecusa(123); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php new file mode 100644 index 000000000..2b22a1acc --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEspeciesDocumentaisTest.php @@ -0,0 +1,131 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarEspeciesDocumentais` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array com as espécies documentais. + * - Converte corretamente as strings para o formato esperado (`ISO-8859-1`). + */ + public function testConsultarEspeciesDocumentaisComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [ + ['nomeNoProdutor' => 'Espécie 1'], + ['nomeNoProdutor' => 'Espécie 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals( + mb_convert_encoding('Espécie 1', 'ISO-8859-1', 'UTF-8'), + $resultado[0] + ); + $this->assertEquals( + mb_convert_encoding('Espécie 2', 'ISO-8859-1', 'UTF-8'), + $resultado[1] + ); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarEspeciesDocumentaisSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'especies' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('especies', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarEspeciesDocumentais(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarEspeciesDocumentais` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarEspeciesDocumentaisComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Não foi encontrado nenhuma espécie documental.'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarEspeciesDocumentais(); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php new file mode 100644 index 000000000..2152b5bb9 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturaTest.php @@ -0,0 +1,108 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, false); + + $this->assertInstanceOf(EstruturaDTO::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaBolRetornoRawTrueSucesso() + { + $mockResponse = [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstrutura(159098, 152254, true); + + $this->assertInstanceOf(stdClass::class, $resultado, 'O retorno deve ser uma instância da classe EstruturaDTO.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstrutura(159098, 152254, false); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php new file mode 100644 index 000000000..519b47b0f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasPorEstruturaPaiTest.php @@ -0,0 +1,122 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'validarRestricaoUnidadesCadastradas', 'buscarEstruturasPorEstruturaPai']) + ->getMock(); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para um caso de sucesso. + * + * Verifica se a lista de estruturas é retornada e ordenada corretamente com base nos nomes. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiRetornaEstruturasOrdenadas() + { + $idRepositorioEstrutura = 1; + $mockEstruturas = [ + (object)['nome' => 'Unidade B', 'codigo' => '002'], + (object)['nome' => 'Unidade A', 'codigo' => '001'], + (object)['nome' => 'Unidade C', 'codigo' => '003'], + ]; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->with($idRepositorioEstrutura) + ->willReturn(null); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, null) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + + $this->assertCount(3, $resultado); + $this->assertEquals('Unidade A', $resultado[0]->nome); + $this->assertEquals('Unidade B', $resultado[1]->nome); + $this->assertEquals('Unidade C', $resultado[2]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai para uma unidade pai específica. + * + * Verifica se a busca por estrutura pai é realizada corretamente ao fornecer + * um número de identificação específico. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiComUnidadePaiEspecifica() + { + $idRepositorioEstrutura = 1; + $numeroDeIdentificacaoDaEstrutura = '001'; + $mockEstruturas = [ + (object)['nome' => 'Unidade D', 'codigo' => '004'], + ]; + + $this->mockService->expects($this->never()) + ->method('validarRestricaoUnidadesCadastradas'); + + $this->mockService->expects($this->once()) + ->method('buscarEstruturasPorEstruturaPai') + ->with($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura) + ->willReturn($mockEstruturas); + + $resultado = $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura); + + $this->assertCount(1, $resultado); + $this->assertEquals('Unidade D', $resultado[0]->nome); + } + + /** + * Testa o método consultarEstruturasPorEstruturaPai quando ocorre um erro. + * + * Verifica se uma exceção InfraException é lançada corretamente ao ocorrer + * um erro no método validarRestricaoUnidadesCadastradas. + * + * @return void + */ + public function testConsultarEstruturasPorEstruturaPaiLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('validarRestricaoUnidadesCadastradas') + ->willThrowException(new Exception('Erro no serviço')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturasPorEstruturaPai($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php new file mode 100644 index 000000000..7acd9b36d --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarEstruturasTest.php @@ -0,0 +1,82 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testConsultarEstruturaListaSucesso() + { + $mockResponse = [ + "estruturas" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "159098", + "nome" => "Mauro ORG1 Filha", + "sigla" => "Mauro ORG1 Filha", + "ativo" => true, + "unidadeReceptora" => false, + "aptoParaReceberTramites" => true, + "codigoNoOrgaoEntidade" => "", + "codigoUnidadeReceptora" => "", + "tipoDeTramitacao" => 0, + "hierarquia" => [ + [ + "numeroDeIdentificacaoDaEstrutura" => "152254", + "nome" => "Órgão de Desenvolvimento ABC (FIRST) - ORGABC", + "sigla" => "ORGABC" + ] + ] + ] + ], + "totalDeRegistros" => 1 + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->consultarEstruturas(159098, []); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + } + + public function testConsultarEstruturaListaLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->consultarEstruturas(159098, []); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php new file mode 100644 index 000000000..9c13025b7 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarHipotesesLegaisTest.php @@ -0,0 +1,111 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o sucesso da consulta de hipóteses legais. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array de hipoteses + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = [ + 'hipoteseslegais' => [ + ] + ]; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertArrayHasKey('hipoteseslegais', $resultado); + } + + /** + * Testa o sucesso da consulta de hipóteses legais com retorno vazio. + * + * Este teste verifica se o método `consultarHipotesesLegais` retorna um array vazio + * quando o método 'get' é chamado. + * + * @return void + */ + public function testConsultarHipotesesLegaisRetornoVazioSucesso() + { + // Define o valor retornado pelo método 'get' mockado + $mockResponse = []; + + // Configura o mock para esperar que o método 'get' seja chamado uma vez e retorne $mockResponse + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Chama o método que está sendo testado + $resultado = $this->mockService->consultarHipotesesLegais(true); + + // Verifica se o resultado é nulo, conforme esperado + $this->assertIsArray($resultado); + $this->assertEquals(0, count($resultado)); + } + + /** + * Testa o lançamento de exceção ao tentar consultar as hipóteses legais. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre um erro + * ao tentar realizar a consulta (simulando a exceção gerada pelo método 'get'). + * + * @return void + * @throws InfraException Se a exceção de infra-estrutura for gerada. + */ + public function testConsultarHipotesesLegaisLancaExcecao() + { + // Configura o mock para lançar uma exceção quando o método 'get' for chamado + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + // Define a expectativa de que a exceção InfraException será lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de hipóteses legais'); + + // Chama o método que deve lançar a exceção + $this->mockService->consultarHipotesesLegais(true); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php new file mode 100644 index 000000000..ed8532f0b --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarMotivosUrgenciaTest.php @@ -0,0 +1,126 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas', 'get']) + ->getMock(); + } + + /** + * Testa o método `consultarMotivosUrgencia` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna um array. + * - Contém os motivos de urgência esperados. + */ + public function testConsultarMotivosUrgenciaComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [ + ['descricao' => 'Motivo 1'], + ['descricao' => 'Motivo 2'], + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertCount(2, $resultado); + $this->assertEquals('Motivo 1', $resultado[0]); + $this->assertEquals('Motivo 2', $resultado[1]); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando não há resultados. + * + * Verifica se o método: + * - Retorna um array vazio. + */ + public function testConsultarMotivosUrgenciaSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'motivosUrgencia' => [] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('motivosUrgencia', []) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarMotivosUrgencia(); + + // Validações + $this->assertIsArray($resultado); + $this->assertEmpty($resultado); + } + + /** + * Testa o método `consultarMotivosUrgencia` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarMotivosUrgenciaComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarMotivosUrgencia(); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php new file mode 100644 index 000000000..34788d48b --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ConsultarRepositoriosDeEstruturasTest.php @@ -0,0 +1,125 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` com retorno bem-sucedido. + * + * Verifica se o método: + * - Retorna uma instância de `RepositorioDTO`. + * - Preenche os atributos da instância com os valores corretos. + */ + public function testConsultarRepositoriosDeEstruturasComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + [ + 'id' => 5, + 'nome' => 'Repositório 1', + 'ativo' => true + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(5); + + // Validações + $this->assertInstanceOf(RepositorioDTO::class, $resultado); + $this->assertEquals(5, $resultado->getNumId()); + $this->assertEquals( + mb_convert_encoding('Repositório 1', 'ISO-8859-1', 'UTF-8'), + $resultado->getStrNome() + ); + $this->assertTrue($resultado->getBolAtivo()); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando não há resultados. + * + * Verifica se o método: + * - Retorna `null` quando não há repositórios disponíveis. + */ + public function testConsultarRepositoriosDeEstruturasSemResultados() + { + // Mock do retorno esperado do método get + $resultadoMock = []; + + $this->mockService->expects($this->once()) + ->method('get') + ->with('repositorios-de-estruturas', ['ativo' => true]) + ->willReturn($resultadoMock); + + // Chamada do método + $resultado = $this->mockService->consultarRepositoriosDeEstruturas(123); + + // Validações + $this->assertNull($resultado); + } + + /** + * Testa o método `consultarRepositoriosDeEstruturas` quando ocorre um erro. + * + * Verifica se o método: + * - Lança a exceção esperada (`InfraException`). + * - Contém a mensagem correta de erro. + */ + public function testConsultarRepositoriosDeEstruturasComErro() + { + // Configuração do mock para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Expectativa de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + // Chamada do método (deve lançar exceção) + $this->mockService->consultarRepositoriosDeEstruturas(123); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php new file mode 100644 index 000000000..be505824f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasAutoCompletarTest.php @@ -0,0 +1,130 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasAutoCompletar com parâmetros válidos. + * + * Verifica se o retorno do método é formatado corretamente, incluindo: + * - Propriedades convertidas para UTF-8. + * - Hierarquia de siglas mapeada. + * - Quantidade correta de itens no resultado. + */ + public function testListarEstruturasAutoCompletarRetornaEstruturasFormatadas() + { + // Simulação de parâmetros e retorno esperado + $idRepositorioEstrutura = 1; + $nome = 'Teste Unidade'; + $mockResultado = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 101, + 'nome' => 'Unidade A', + 'sigla' => 'UA', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '123', + 'hierarquia' => [ + ['sigla' => 'ORG'] + ] + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => 102, + 'nome' => 'Unidade B', + 'sigla' => 'UB', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '456', + 'hierarquia' => [] + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->callback(function ($parametros) use ($nome) { + return $parametros['nome'] === $nome && $parametros['apenasAtivas'] === true; + })) + ->willReturn($mockResultado); + + $resultado = $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura, $nome); + + // Asserções sobre o retorno + $this->assertIsArray($resultado); + $this->assertArrayHasKey('diferencaDeRegistros', $resultado); + $this->assertArrayHasKey('itens', $resultado); + $this->assertCount(2, $resultado['itens']); + } + + /** + * Testa o método listarEstruturasAutoCompletar quando ocorre um erro. + * + * Simula um erro no método consultarEstruturas e verifica se uma exceção + * InfraException é lançada corretamente com a mensagem esperada. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaErro() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro interno')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasAutoCompletar com repositório inválido. + * + * Verifica se uma exceção InfraException é lançada quando o ID do + * repositório de estruturas fornecido é inválido. + */ + public function testListarEstruturasAutoCompletarLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasAutoCompletar($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php new file mode 100644 index 000000000..a23711182 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarEstruturasBuscaTextualTest.php @@ -0,0 +1,124 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'consultarEstruturas']) + ->getMock(); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um caso de sucesso. + * + * Simula uma resposta válida do método 'consultarEstruturas' e verifica + * se o retorno é uma lista de objetos EstruturaDTO com os dados corretos. + * + * @return void + */ + public function testListarEstruturasBuscaTextualRetornaEstruturas() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Raiz'; + $mockResponse = [ + 'totalDeRegistros' => 2, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => '123', + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => true, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [['sigla' => 'H1'], ['sigla' => 'H2']], + ], + [ + 'numeroDeIdentificacaoDaEstrutura' => '456', + 'nome' => 'Estrutura 2', + 'sigla' => 'E2', + 'ativo' => false, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '002', + 'hierarquia' => [['sigla' => 'H3']], + ] + ] + ]; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->with($idRepositorioEstrutura, $this->arrayHasKey('identificacaoDoRepositorioDeEstruturas')) + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura, $nome); + + $this->assertCount(2, $resultado); + $this->assertInstanceOf(EstruturaDTO::class, $resultado[0]); + $this->assertEquals('123', $resultado[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $resultado[0]->getStrNome()); + $this->assertEquals(['H1', 'H2'], $resultado[0]->getArrHierarquia()); + } + + /** + * Testa o método listarEstruturasBuscaTextual para um repositório inválido. + * + * Verifica se uma exceção InfraException é lançada ao fornecer um ID de repositório inválido. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } + + /** + * Testa o método listarEstruturasBuscaTextual para falhas no web service. + * + * Simula um erro no método 'consultarEstruturas' e verifica se a exceção + * InfraException é lançada com a mensagem correta. + * + * @return void + */ + public function testListarEstruturasBuscaTextualLancaExcecaoParaErroWebService() + { + $idRepositorioEstrutura = 1; + + $this->mockService->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + $this->mockService->listarEstruturasBuscaTextual($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php new file mode 100644 index 000000000..f8d69ea83 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarPendenciasTest.php @@ -0,0 +1,67 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + public function testListarPendenciasSucesso() + { + $mockResponse = [ + [ + 'status' => 2, + 'IDT' => 999 + ] + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarPendencias(true); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(PendenciaDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + public function testListarPendenciasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na listagem de pendências de trâmite de processos'); + + $this->mockService->listarPendencias(true); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php new file mode 100644 index 000000000..dbd027c18 --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ListarRepositorioTest.php @@ -0,0 +1,97 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get']) + ->getMock(); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele + * retorna uma lista de repositórios de estruturas com sucesso. + * + * Cenário testado: + * - O método 'get' retorna uma lista simulada de repositórios. + * - O retorno do método deve ser um array contendo objetos do tipo RepositorioDTO. + * + * Asserções: + * - O retorno deve ser um array. + * - A quantidade de itens no retorno deve ser igual à quantidade simulada. + * - O primeiro item do retorno deve ser uma instância de RepositorioDTO. + * + * @return void + */ + public function testListarRepositoriosDeEstruturasRetornaListaSucesso() + { + $mockResponse = [ + ["id" => 49, "nome" => "Acre - AC", "ativo" => true], + ["id" => 2, "nome" => "Advocacia-Geral da União", "ativo" => true], + ["id" => 7, "nome" => "Alagoas( Estado)", "ativo" => true], + ["id" => 20, "nome" => "Banco Central do Brasil 2", "ativo" => true], + ]; + + // Configura o mock para retornar a resposta + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + $resultado = $this->mockService->listarRepositoriosDeEstruturas(); + + $this->assertIsArray($resultado, 'O retorno deve ser um array.'); + $this->assertCount(count($mockResponse), $resultado, 'A quantidade de objetos no retorno está incorreta.'); + $this->assertInstanceOf(RepositorioDTO::class, $resultado[0], 'O primeiro objeto na lista deve ser uma instância da classe RepositorioDTO.'); + } + + /** + * Testa o método listarRepositoriosDeEstruturas para garantir que ele lança + * uma exceção quando a requisição falha. + * + * Cenário testado: + * - O método 'get' lança uma exceção simulada. + * - O método listarRepositoriosDeEstruturas deve capturar a exceção e + * relançar uma InfraException com a mensagem apropriada. + * + * Asserções: + * - Uma exceção do tipo InfraException deve ser lançada. + * - A mensagem da exceção deve ser "Falha na obtenção dos Repositórios de Estruturas Organizacionais". + * + * @return void + */ + public function testListarRepositoriosDeEstruturasLancaExcecao() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro na requisição')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção dos Repositórios de Estruturas Organizacionais'); + + $this->mockService->listarRepositoriosDeEstruturas(); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php new file mode 100644 index 000000000..45a8d2edb --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/LitarEstruturasTest.php @@ -0,0 +1,120 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['consultarEstruturas']) + ->getMock(); + } + + /** + * Testa a listagem de estruturas com sucesso. + * + * Este teste verifica se o método listarEstruturas retorna corretamente + * as estruturas esperadas quando os dados são fornecidos corretamente. + */ + public function testListarEstruturasComSucesso() + { + $idRepositorioEstrutura = 1; + $nome = 'Estrutura Teste'; + $mockRetornoConsulta = [ + 'totalDeRegistros' => 1, + 'estruturas' => [ + [ + 'numeroDeIdentificacaoDaEstrutura' => 123, + 'nome' => 'Estrutura 1', + 'sigla' => 'E1', + 'ativo' => true, + 'aptoParaReceberTramites' => false, + 'codigoNoOrgaoEntidade' => '001', + 'hierarquia' => [ + ['sigla' => 'H1'], + ['sigla' => 'H2'], + ], + ], + ], + ]; + + // Define a expectativa para o mock do método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willReturn($mockRetornoConsulta); + + // Executa o método sob teste + $result = $this->mockService->listarEstruturas($idRepositorioEstrutura, $nome); + + // Validações dos resultados + $this->assertCount(1, $result); + $this->assertInstanceOf(EstruturaDTO::class, $result[0]); + $this->assertEquals(123, $result[0]->getNumNumeroDeIdentificacaoDaEstrutura()); + $this->assertEquals('Estrutura 1', $result[0]->getStrNome()); + $this->assertEquals('E1', $result[0]->getStrSigla()); + $this->assertEquals(['H1', 'H2'], $result[0]->getArrHierarquia()); + } + + /** + * Testa a listagem de estruturas com repositório inválido. + * + * Este teste verifica se uma exceção é lançada quando o ID do repositório + * de estruturas é inválido (null). + */ + public function testListarEstruturasComRepositorioInvalido() + { + $idRepositorioEstrutura = null; + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Repositório de Estruturas inválido'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } + + /** + * Testa a listagem de estruturas com erro na consulta. + * + * Este teste verifica se uma exceção é lançada corretamente quando ocorre + * um erro durante a consulta de estruturas. + */ + public function testListarEstruturasComErroNaConsulta() + { + $idRepositorioEstrutura = 1; + + // Configura o mock para lançar uma exceção no método consultarEstruturas + $this->mockService + ->expects($this->once()) + ->method('consultarEstruturas') + ->willThrowException(new Exception('Erro na consulta')); + + // Configura as expectativas de exceção + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na obtenção de unidades externas'); + + // Executa o método sob teste + $this->mockService->listarEstruturas($idRepositorioEstrutura); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php new file mode 100644 index 000000000..1fb0da91f --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/ReceberReciboDeTramiteTest.php @@ -0,0 +1,103 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o recebimento de recibo de trâmite com sucesso. + * + * Simula a execução do método `get` e o retorno de um objeto + * convertido a partir de um array, verificando se o resultado + * final corresponde ao esperado. + * + * @return void + */ + public function testReceberReciboDeTramiteComSucesso() + { + // Mock do retorno esperado do método get + $resultadoMock = [ + 'recibo' => [ + 'hashesDosComponentesDigitais' => ['hash123'], + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($resultadoMock); + + // Substituir o método estático converterArrayParaObjeto + $resultadoObjetoMock = (object)[ + 'recibo' => (object)[ + 'hashDoComponenteDigital' => 'hash123', + 'outroDado' => 'valor' + ] + ]; + + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($resultadoObjetoMock); + + // Chamada do método + $resultado = $this->mockService->receberReciboDeTramite(123); + + // Asserções + $this->assertIsObject($resultado); + $this->assertEquals('hash123', $resultado->recibo->hashDoComponenteDigital); + $this->assertEquals('valor', $resultado->recibo->outroDado); + } + + /** + * Testa o cenário em que ocorre um erro ao receber o recibo de trâmite. + * + * Simula uma exceção no método `get` e verifica se a exceção correta é + * lançada pelo método testado. + * + * @return void + */ + public function testReceberReciboDeTramiteComErro() + { + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro simulado')); + + // Verifica se a exceção esperada é lançada + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha no recebimento de recibo de trâmite.'); + + $this->mockService->receberReciboDeTramite(123); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php b/tests_super/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php new file mode 100644 index 000000000..6c915341b --- /dev/null +++ b/tests_super/unitario/rn/ProcessoEletronicoRN/SolicitarMetadadosTest.php @@ -0,0 +1,117 @@ +mockService = $this->getMockBuilder(ProcessoEletronicoRN::class) + ->onlyMethods(['get', 'converterArrayParaObjeto']) + ->getMock(); + } + + /** + * Testa o método solicitarMetadados para um caso de sucesso. + * + * Este teste verifica se o método retorna um objeto stdClass corretamente + * configurado quando os dados retornados pelo método get são válidos. + * + * @return void + */ + public function testSolicitarMetadadosRetornaObjetoCorreto() + { + $parNumIdentificacaoTramite = 123; + + // Simular a resposta do método get + $mockResponse = [ + 'propriedadesAdicionais' => ['algum_valor'], + 'processo' => [ + 'documentos' => [ + [ + 'componentesDigitais' => [ + [ + 'assinaturasDigitais' => [ + ['alguma_assinatura'] + ] + ] + ] + ] + ] + ] + ]; + + $mockConvertedObject = (object) [ + 'NRE' => '123456', + 'processo' => (object) [ + 'documentos' => [(object) ['algum_valor']], + 'interessados' => [(object) ['algum_interessado']] + ] + ]; + + // Configura o mock para o método get + $this->mockService->expects($this->once()) + ->method('get') + ->willReturn($mockResponse); + + // Configura o mock para o método converterArrayParaObjeto + $this->mockService->expects($this->once()) + ->method('converterArrayParaObjeto') + ->willReturn($mockConvertedObject); + + // Chama o método a ser testado + $resultado = $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + + // Verifica o retorno + $this->assertInstanceOf(stdClass::class, $resultado); + $this->assertEquals($parNumIdentificacaoTramite, $resultado->IDT); + $this->assertEquals('123456', $resultado->metadados->NRE); + } + + /** + * Testa o método solicitarMetadados para um caso de falha. + * + * Este teste verifica se uma exceção InfraException é lançada corretamente + * quando o método get falha ao buscar os dados necessários. + * + * @return void + */ + public function testSolicitarMetadadosLancaExcecao() + { + $parNumIdentificacaoTramite = 123; + + // Configura o mock para o método get para lançar uma exceção + $this->mockService->expects($this->once()) + ->method('get') + ->willThrowException(new Exception('Erro no web service')); + + $this->expectException(InfraException::class); + $this->expectExceptionMessage('Falha na solicitação de metadados do processo'); + + // Chama o método e espera uma exceção + $this->mockService->solicitarMetadados($parNumIdentificacaoTramite); + } +} \ No newline at end of file diff --git a/tests_super/unitario/rn/ProcessoEletronicoRNTest.php b/tests_super/unitario/rn/ProcessoEletronicoRNTest.php deleted file mode 100755 index 5123029c6..000000000 --- a/tests_super/unitario/rn/ProcessoEletronicoRNTest.php +++ /dev/null @@ -1,114 +0,0 @@ -objProcessoEletronicoRN = new ProcessoEletronicoRN(); - } - - /** - * Testes do método privado reduzirCampoTexto - * - * @return void - */ - public function testReduzirCampoTexto() - { - $numTamanhoMaximo = 53; - // Teste considerando uma palavra pequena ao final do texto - $strTexto = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii"; - $strResultadoEsperado = "aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas uma palavra - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com uma palavra grande ao final - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando texto longo e palavro curta ao finals - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto curto abaixo do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - $strResultadoEsperado = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com apenas um caracter fora do limite - $strTexto = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa a"; - $strResultadoEsperado = "aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - // Teste considerando um texto nulo - $strTexto = null; - $strResultadoEsperado = null; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, $numTamanhoMaximo); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= $numTamanhoMaximo); - - // Teste considerando um texto longo com ultima palavra menor que a reticencias - $strTexto = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ..."; - $strResultadoAtual = $this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen($strResultadoAtual) <= 150); - - $strTexto = "ããããã ããããã"; - $strResultadoEsperado = mb_convert_encoding("ããããã ...", 'UTF-8', 'ISO-8859-1'); - $strResultadoAtual = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 9), 'UTF-8', 'ISO-8859-1'); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen(mb_convert_encoding($strResultadoAtual, 'ISO-8859-1', 'UTF-8')) <= 9); - - $strTexto = "ããããã ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniamr quis"; - $strResultadoEsperado = mb_convert_encoding("ããããã ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lbore et dolore magna aliqua. Ut enim ad minim veniam ...", 'UTF-8', 'ISO-8859-1'); - $strResultadoAtual = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 150), 'UTF-8', 'ISO-8859-1'); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(mb_strlen($strResultadoAtual) <= 150); - - $strTexto = "Assessoria de Comunicação do Gabinete do Diretor-Presidente da Autoridade Nacional dede Proteção de dados"; - $strResultadoEsperado = mb_convert_encoding("Assessoria de Comunicação do Gabinete do Diretor-Presidente da Autoridade Nacional dede Proteçã ...", 'UTF-8', 'ISO-8859-1'); - $strResultadoAtual = mb_convert_encoding($this->objProcessoEletronicoRN->reduzirCampoTexto($strTexto, 100), 'UTF-8', 'ISO-8859-1'); - $this->assertEquals($strResultadoEsperado, $strResultadoAtual); - $this->assertTrue(strlen(mb_convert_encoding($strResultadoAtual, 'ISO-8859-1', 'UTF-8')) <= 100); - - } - - public function testCompararVersoes(){ - $this->assertTrue(InfraUtil::compararVersoes("0.0.1", "<", "0.0.2")); - $this->assertTrue(InfraUtil::compararVersoes("0.1.0", "<", "0.2.0")); - $this->assertTrue(InfraUtil::compararVersoes("1.0.0", "<", "2.0.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "==", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3", "<", "4.0.3.1")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.4", ">", "4.0.3.0")); - $this->assertTrue(InfraUtil::compararVersoes("4.0.3.0", "==", "4.0.3.5", 3, true)); - } -} From e638380d9f8fa9a9b275e98bb23f8942600c77aa Mon Sep 17 00:00:00 2001 From: Glaydson Rodrigues Date: Mon, 6 Jan 2025 09:35:57 -0300 Subject: [PATCH 25/25] =?UTF-8?q?feat:=20merge=20com=20testes=20automatiza?= =?UTF-8?q?dos=20e=20corre=C3=A7=C3=A3o=20phpcs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pen_map_unidade_cadastrar.php | 6 +- src/rn/ProcessoEletronicoRN.php | 85 +++--- src/rn/ReceberComponenteDigitalRN.php | 6 +- src/rn/ReceberProcedimentoRN.php | 24 +- tests_sei4/funcional/phpunit.xml | 2 +- ...cebimentoRecusaJustificativaGrandeTest.php | 69 +++-- .../TramiteRecebimentoDocumentoAvulsoTest.php | 250 ++++++++++++------ ...eRecebimentoInteressadosDuplicadosTest.php | 232 ++++++++++------ tests_sei41/funcional/phpunit.xml | 2 +- ...cebimentoRecusaJustificativaGrandeTest.php | 67 +++-- .../TramiteRecebimentoDocumentoAvulsoTest.php | 250 ++++++++++++------ ...eRecebimentoInteressadosDuplicadosTest.php | 234 ++++++++++------ tests_super/funcional/phpunit.xml | 32 +-- ...cebimentoRecusaJustificativaGrandeTest.php | 67 +++-- .../TramiteRecebimentoDocumentoAvulsoTest.php | 250 ++++++++++++------ ...eRecebimentoInteressadosDuplicadosTest.php | 232 ++++++++++------ 16 files changed, 1166 insertions(+), 642 deletions(-) diff --git a/src/pen_map_unidade_cadastrar.php b/src/pen_map_unidade_cadastrar.php index ce03d4f84..fab222867 100755 --- a/src/pen_map_unidade_cadastrar.php +++ b/src/pen_map_unidade_cadastrar.php @@ -183,9 +183,9 @@ $objUnidadeDTO->retStrDescricao(); $arrMapIdUnidade = array(); $objPenUnidadeRN = new PenUnidadeRN(); - foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { - $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); - } + foreach ($objPenUnidadeRN->listar($objUnidadeDTO) as $dados) { + $arrMapIdUnidade[$dados->getNumIdUnidade()] = $dados->getStrSigla() . ' - ' . $dados->getStrDescricao(); + } //Verifica se o numero da unidade esta vazio, senão estiver busca o nome da unidade para exibição $strNomeUnidadeSelecionada = ''; diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index cb7ee9396..6952731ac 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -777,7 +777,7 @@ public function consultarMotivosUrgencia() * * @return array */ - public function consultarEspeciesDocumentais() + public function consultarEspeciesDocumentais() { $endpoint = 'especies'; try { @@ -785,13 +785,13 @@ public function consultarEspeciesDocumentais() $arrResultado = $this->get($endpoint, $parametros); $arrEspecies = []; - if (isset($arrResultado)) { - $count = count($arrResultado['especies']); - for ($i = 0; $i < $count; $i++) { - $codigo = $i + 1; - $arrEspecies[$codigo] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); - } + if (isset($arrResultado)) { + $count = count($arrResultado['especies']); + for ($i = 0; $i < $count; $i++) { + $codigo = $i + 1; + $arrEspecies[$codigo] = mb_convert_encoding($arrResultado['especies'][$i]['nomeNoProdutor'], 'ISO-8859-1', 'UTF-8'); } + } } catch (Exception $e) { $mensagem = "Não foi encontrado nenhuma espécie documental."; @@ -1231,6 +1231,13 @@ public function solicitarMetadados($parNumIdentificacaoTramite) $objResultado->IDT = $parNumIdentificacaoTramite; $objResultado->NRE = $arrResultado['nre']; + // verificar se é um documento avulso + if (!array_key_exists('processo', $arrResultado) || $arrResultado['processo'] == null) { + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); + + return $objResultado; + } + $multivalorado = false; if (count($arrResultado['processo']['documentos']) <= 1) { $arrResultado['processo']['documentos'] = (object) $arrResultado['processo']['documentos'][0]; @@ -1487,9 +1494,9 @@ protected function cadastrarTramiteDeProcessoInternoControlado(ProcessoEletronic */ public static function getHashFromMetaDados($objMeta) { - if (is_array($objMeta)) { - $objMeta = (object) $objMeta; - } + if (is_array($objMeta)) { + $objMeta = (object) $objMeta; + } $strHashConteudo = ''; @@ -2367,12 +2374,12 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; - foreach ($arrObjDocumentoPadronizados as $documento) { - if (is_array($documento) && $documento['componentesDigitais']) { - $documento = (object) $documento; - } - $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + foreach ($arrObjDocumentoPadronizados as $documento) { + if (is_array($documento) && $documento['componentesDigitais']) { + $documento = (object) $documento; } + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + } return $arrObjDocumentoPadronizados; } @@ -2385,10 +2392,10 @@ public static function obterComponentesDocumentos($parObjDocumento) if (isset($parObjDocumento->componentesDigitais)) { $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); usort($arrObjComponenteDigital, array("ProcessoEletronicoRN", "comparacaoOrdemComponenteDigitais")); - } + } return $arrObjComponenteDigital; - } + } /** * Retorna a referência para o processo ou documento avulso @@ -2440,14 +2447,14 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) * @param $parObjDocumento * @return array */ - public static function obterComponentesDigitaisDocumento($parObjDocumento) + public static function obterComponentesDigitaisDocumento($parObjDocumento) { - $arrObjComponenteDigital = array(); + $arrObjComponenteDigital = array(); if(isset($parObjDocumento->componentesDigitais)){ $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); } - return $arrObjComponenteDigital; + return $arrObjComponenteDigital; } @@ -2733,29 +2740,29 @@ public function listarAssociacoesDocumentos($idProcedimento) /** * Converter arrays associativo para objetos */ - public function converterArrayParaObjeto($array) - { - if (is_array($array)) { - // Verificar se o array é associativo - if (self::verificarSeArrayAssociativo($array)) { - $object = new stdClass(); - foreach ($array as $key => $value) { - $object->$key = $this->converterArrayParaObjeto($value); - } - return $object; - } else { - // Para arrays indexados, manter como está - return array_map([self::class, 'converterArrayParaObjeto'], $array); - } + public function converterArrayParaObjeto($array) + { + if (is_array($array)) { + // Verificar se o array é associativo + if (self::verificarSeArrayAssociativo($array)) { + $object = new stdClass(); + foreach ($array as $key => $value) { + $object->$key = $this->converterArrayParaObjeto($value); } - - return $array; + return $object; + } else { + // Para arrays indexados, manter como está + return array_map([self::class, 'converterArrayParaObjeto'], $array); + } } - private static function verificarSeArrayAssociativo(array $array): bool + return $array; + } + + private static function verificarSeArrayAssociativo(array $array) { - return array_keys($array) !== range(0, count($array) - 1); - } + return array_keys($array) !== range(0, count($array) - 1); + } /** diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index 82077f3e2..b7695f636 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -260,9 +260,9 @@ public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, throw new InfraException("Componente Digital não informado"); } - if (is_array($parObjComponenteDigital)) { - $parObjComponenteDigital = (object) $parObjComponenteDigital; - } + if (is_array($parObjComponenteDigital)) { + $parObjComponenteDigital = (object) $parObjComponenteDigital; + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 74a3d57ad..6412d3b1d 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -681,9 +681,9 @@ private function listarMetaDadosComponentesDigitais($parObjProtocolo) $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); foreach($arrObjDocumento as $key => $objDocumento){ - if (is_array($objDocumento->componentesDigitais[$key])) { - $objDocumento->componentesDigitais[$key] = (object) $objDocumento->componentesDigitais[$key]; - } + if (is_array($objDocumento->componentesDigitais[$key])) { + $objDocumento->componentesDigitais[$key] = (object) $objDocumento->componentesDigitais[$key]; + } $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componentesDigitais[$key]->hash); $objMapDTO = new PenRelTipoDocMapRecebidoDTO(true); $objMapDTO->setNumMaxRegistrosRetorno(1); @@ -761,9 +761,9 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac private function validaTamanhoComponenteDigital($objComponenteDigital) { - if (is_array($objComponenteDigital)) { - $objComponenteDigital = (object) $objComponenteDigital; - } + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); @@ -1941,9 +1941,9 @@ private function atribuirComponentesJaExistentesNoProcesso($objDocumentoDTO, $ob $arrObjAnexosDTO = array(); $arrObjAnexoDTO = array(); foreach ($objComponentesDigitais as $objComponenteDigital) { - if (is_array($objComponenteDigital)) { - $objComponenteDigital = (object) $objComponenteDigital; - } + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } $strHashComponenteDigital = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); $bolComponenteDigitalBaixado = in_array($strHashComponenteDigital, $arrHashComponenteBaixados); @@ -2757,9 +2757,9 @@ private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) } foreach ($arrDocumento->componentesDigitais as $objComponente) { - if (is_array($objComponente)) { - $objComponente = (object) $objComponente; - } + if (is_array($objComponente)) { + $objComponente = (object) $objComponente; + } $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente->hash); $resultado[$strHash] = $objComponente; diff --git a/tests_sei4/funcional/phpunit.xml b/tests_sei4/funcional/phpunit.xml index 20f52b05f..2dd86c6fc 100755 --- a/tests_sei4/funcional/phpunit.xml +++ b/tests_sei4/funcional/phpunit.xml @@ -15,7 +15,7 @@ + value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/" /> diff --git a/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php b/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php index 84424de88..b9138d7cc 100755 --- a/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php +++ b/tests_sei4/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php @@ -12,7 +12,7 @@ class RecebimentoRecusaJustificativaGrandeTest extends FixtureCenarioBaseTestCas protected $destinatarioWs; protected $servicoPEN; public static $remetente; - public static $destinatario; + public static $destinatario; public static $processoTeste; public static $documentoTeste; public static $protocoloTeste; @@ -58,7 +58,9 @@ public function test_tramitar_processo_da_origem() }else{ $id_tramite=$id_tramite[0]["ID_TRAMITE"]; } - $this->recusarTramite($this->servicoPEN, $id_tramite); + + sleep(5); + $this->recusarTramite($id_tramite); } /** @@ -90,39 +92,58 @@ public function test_verificar_destino_processo_para_devolucao() } - private function recusarTramite($servicoPEN, $id_tramite) + private function recusarTramite($id_tramite) { $justificativa = "An exception occurred while executing 'INSERT INTO juntadas (numeracao_sequencial, movimento, ativo, vinculada, criado_em, atualizado_em, id, uuid, documentos_juntado_id, volumes_id, atividades_id, tarefas_id, comunicacoes_id, origem_dados_id, criado_por, atualizado_por) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [1, 'DOCUMENTO RECEBIDO VIA INTEGRA\u00c7\u00c3O COM O BARRAMENTO', 1, 0, '2021-12-02 14:21:48', '2021-12-02 14:21:48', 1317074776, '06ba31e8-75ad-4111-82dc-6f451f51825e', 1333864526, null, null, null, null, 3534979787, null, null]: ORA-00001: restrição exclusiva (SAPIENS.UNIQ_867686DHDKJ97876) violada"; $parametros = new stdClass(); $parametros->recusaDeTramite = new stdClass(); $parametros->recusaDeTramite->IDT = $id_tramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($justificativa, 'UTF-8', 'ISO-8859-1'); + $parametros->recusaDeTramite->justificativa = utf8_encode($justificativa); $parametros->recusaDeTramite->motivo = "99"; - return $servicoPEN->recusarTramite($parametros); + + return $this->recusarTramiteAPI($parametros); + } + + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $strBaseUri = PEN_ENDERECO_WEBSERVICE; + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + public function recusarTramiteAPI($parametros) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $idt = $parametros->recusaDeTramite->IDT; + $justificativa = $parametros->recusaDeTramite->justificativa; + $motivo = $parametros->recusaDeTramite->motivo; + + $endpoint = "tramites/{$idt}/recusa"; + + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $parametros = [ + 'justificativa' => mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'), + 'motivo' => $motivo + ]; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + return $response; } } diff --git a/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php b/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php index 99d2c2473..37b1ee11b 100755 --- a/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php +++ b/tests_sei4/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php @@ -16,6 +16,7 @@ class TramiteRecebimentoDocumentoAvulsoTest extends FixtureCenarioBaseTestCase const CONTEUDO_DOCUMENTO_C = "arquivo_pequeno_C.pdf"; protected $servicoPEN; + protected $servicoPEN2; public static $remetente; public static $destinatario; public static $processoTeste; @@ -39,12 +40,7 @@ public function setUp(): void // Carregar contexto de testes e dados sobre certificado digital self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - putenv("DATABASE_HOST=org2-database"); - - // Instanciar objeto de teste utilizando o BeSimpleSoap - $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; - $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; - $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + } /** @@ -52,16 +48,21 @@ public function setUp(): void * * @return void */ - public function test_recebimento_documento_avulso() + public function test_recebimento_metadados_documento_avulso() { + + $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; + $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; + + $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + // Simular um trâmite chamando a API do Barramento diretamente self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente, array(self::CONTEUDO_DOCUMENTO_A)); $metadadosDocumentoTeste = $this->construirMetadadosDocumentoTeste(self::$documentoTeste1); - $novoTramite = $this->enviarMetadadosDocumento($this->servicoPEN, self::$remetente, self::$destinatario, $metadadosDocumentoTeste); - $this->enviarComponentesDigitaisDoTramite($this->servicoPEN, $novoTramite, $metadadosDocumentoTeste); - $reciboTramite = $this->receberReciboEnvio($this->servicoPEN, $novoTramite); - + $novoTramite = $this->enviarMetadadosDocumento(self::$remetente, self::$destinatario, $metadadosDocumentoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $metadadosDocumentoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); @@ -75,7 +76,6 @@ public function test_recebimento_documento_avulso() * @group envio * @large * - * @depends test_recebimento_documento_avulso * * @return void */ @@ -149,76 +149,51 @@ public function test_verificar_recebimento_processo_destino_documento_avulso() $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, $documentos, self::$destinatario); } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function receberReciboEnvio($novoTramite) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); + $dadosTramite = $novoTramite['tramites']; + $idt = $dadosTramite[0]['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $documentoTeste) + private function enviarMetadadosDocumento($remetente, $destinatario, $documentoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['documento'] = $documentoTeste['documentoEnvio']; + + return $this->enviarDocumentoAPI($parametros); } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function enviarComponentesDigitaisDoTramite($novoTramite, $documentoTeste) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $parametros = []; + $dadosDoComponenteDigital['protocolo'] = $documentoTeste['documentoEnvio']['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $documentoTeste['componenteEnvio']['hashDocumento']; + $dadosDoComponenteDigital['conteudoDoComponenteDigital'] = $documentoTeste['componenteEnvio']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + + $this->enviarComponenteDigitalAPI($parametros); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatarios' => [ + [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + ] + ]; + return $cabecalho; } @@ -247,42 +222,145 @@ private function construirMetadadosDocumentoTeste($documentoTeste) $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + "mimeType" => "application/pdf", 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordem + 1, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); } finally { fclose($fp); } } - return array( - 'protocolo' => '13990.000181/2020-00', + $documentoEnvio = array( + 'protocolo' => '13990.000185/2024-00', 'nivelDeSigilo' => 1, 'descricao' => $documentoTeste['DESCRICAO'], 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + "nome" => "Nome ABC", + "tipo" => "orgaopublico" ), - 'especie' => array( 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') + 'nomeNoProdutor' => 'Despacho', ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo + ); + + return array( + 'documentoEnvio' => $documentoEnvio, + 'componenteEnvio' => $componenteEnvio ); } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + } + } + + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + $conteudo = $arrParametros['conteudoDoComponenteDigital']; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = $this->servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = $this->servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } + } + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; + } } diff --git a/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php b/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php index 768308bb9..b612f426f 100755 --- a/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php +++ b/tests_sei4/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php @@ -19,6 +19,8 @@ class TramiteRecebimentoInteressadosDuplicadosTest extends FixtureCenarioBaseTes public static $servicoPEN; public static $documentoTeste1; + public static $conteudoCompoonenteDigital; + /** * Teste de envio de metadados do processo contendo interessados duplicados * @@ -50,9 +52,9 @@ public function test_envio_processo_com_documento_anexado() // Inicia o envio do processo $arrDocumentosPrimeiroEnvio = array(self::$documentoTeste1); $processoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, $arrDocumentosPrimeiroEnvio); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, self::$remetente, self::$destinatario, $processoTeste); - $this->enviarComponentesDigitaisDoTramite(self::$servicoPEN, $novoTramite, $processoTeste); - $reciboTramite = $this->receberReciboEnvio(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosProcesso(self::$remetente, self::$destinatario, $processoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verifica recebimento de novo processo administrativo contendo documento avulso enviado @@ -65,86 +67,71 @@ public function test_envio_processo_com_documento_anexado() } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } - } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); } - private function receberReciboTramite($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } @@ -169,7 +156,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } $arrInteressados = array_map(function($item) { @@ -186,9 +174,10 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => $arrInteressados, - 'documento' => $metadadosDocumentos, + 'interessados' => $arrInteressados, + 'documentos' => $metadadosDocumentos, ); } @@ -207,16 +196,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital = [$hashDocumento => $conteudo]; } finally { fclose($fp); } @@ -229,10 +219,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -240,17 +229,102 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + } + } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } } } diff --git a/tests_sei41/funcional/phpunit.xml b/tests_sei41/funcional/phpunit.xml index 20f52b05f..2dd86c6fc 100755 --- a/tests_sei41/funcional/phpunit.xml +++ b/tests_sei41/funcional/phpunit.xml @@ -15,7 +15,7 @@ + value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/" /> diff --git a/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php b/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php index ba6aafd51..b9138d7cc 100755 --- a/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php +++ b/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php @@ -58,7 +58,9 @@ public function test_tramitar_processo_da_origem() }else{ $id_tramite=$id_tramite[0]["ID_TRAMITE"]; } - $this->recusarTramite($this->servicoPEN, $id_tramite); + + sleep(5); + $this->recusarTramite($id_tramite); } /** @@ -90,39 +92,58 @@ public function test_verificar_destino_processo_para_devolucao() } - private function recusarTramite($servicoPEN, $id_tramite) + private function recusarTramite($id_tramite) { $justificativa = "An exception occurred while executing 'INSERT INTO juntadas (numeracao_sequencial, movimento, ativo, vinculada, criado_em, atualizado_em, id, uuid, documentos_juntado_id, volumes_id, atividades_id, tarefas_id, comunicacoes_id, origem_dados_id, criado_por, atualizado_por) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [1, 'DOCUMENTO RECEBIDO VIA INTEGRA\u00c7\u00c3O COM O BARRAMENTO', 1, 0, '2021-12-02 14:21:48', '2021-12-02 14:21:48', 1317074776, '06ba31e8-75ad-4111-82dc-6f451f51825e', 1333864526, null, null, null, null, 3534979787, null, null]: ORA-00001: restrição exclusiva (SAPIENS.UNIQ_867686DHDKJ97876) violada"; $parametros = new stdClass(); $parametros->recusaDeTramite = new stdClass(); $parametros->recusaDeTramite->IDT = $id_tramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($justificativa, 'UTF-8', 'ISO-8859-1'); + $parametros->recusaDeTramite->justificativa = utf8_encode($justificativa); $parametros->recusaDeTramite->motivo = "99"; - return $servicoPEN->recusarTramite($parametros); + + return $this->recusarTramiteAPI($parametros); + } + + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $strBaseUri = PEN_ENDERECO_WEBSERVICE; + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + public function recusarTramiteAPI($parametros) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $idt = $parametros->recusaDeTramite->IDT; + $justificativa = $parametros->recusaDeTramite->justificativa; + $motivo = $parametros->recusaDeTramite->motivo; + + $endpoint = "tramites/{$idt}/recusa"; + + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $parametros = [ + 'justificativa' => mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'), + 'motivo' => $motivo + ]; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + return $response; } } diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php index 99d2c2473..37b1ee11b 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php @@ -16,6 +16,7 @@ class TramiteRecebimentoDocumentoAvulsoTest extends FixtureCenarioBaseTestCase const CONTEUDO_DOCUMENTO_C = "arquivo_pequeno_C.pdf"; protected $servicoPEN; + protected $servicoPEN2; public static $remetente; public static $destinatario; public static $processoTeste; @@ -39,12 +40,7 @@ public function setUp(): void // Carregar contexto de testes e dados sobre certificado digital self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - putenv("DATABASE_HOST=org2-database"); - - // Instanciar objeto de teste utilizando o BeSimpleSoap - $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; - $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; - $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + } /** @@ -52,16 +48,21 @@ public function setUp(): void * * @return void */ - public function test_recebimento_documento_avulso() + public function test_recebimento_metadados_documento_avulso() { + + $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; + $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; + + $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + // Simular um trâmite chamando a API do Barramento diretamente self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente, array(self::CONTEUDO_DOCUMENTO_A)); $metadadosDocumentoTeste = $this->construirMetadadosDocumentoTeste(self::$documentoTeste1); - $novoTramite = $this->enviarMetadadosDocumento($this->servicoPEN, self::$remetente, self::$destinatario, $metadadosDocumentoTeste); - $this->enviarComponentesDigitaisDoTramite($this->servicoPEN, $novoTramite, $metadadosDocumentoTeste); - $reciboTramite = $this->receberReciboEnvio($this->servicoPEN, $novoTramite); - + $novoTramite = $this->enviarMetadadosDocumento(self::$remetente, self::$destinatario, $metadadosDocumentoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $metadadosDocumentoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); @@ -75,7 +76,6 @@ public function test_recebimento_documento_avulso() * @group envio * @large * - * @depends test_recebimento_documento_avulso * * @return void */ @@ -149,76 +149,51 @@ public function test_verificar_recebimento_processo_destino_documento_avulso() $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, $documentos, self::$destinatario); } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function receberReciboEnvio($novoTramite) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); + $dadosTramite = $novoTramite['tramites']; + $idt = $dadosTramite[0]['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $documentoTeste) + private function enviarMetadadosDocumento($remetente, $destinatario, $documentoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['documento'] = $documentoTeste['documentoEnvio']; + + return $this->enviarDocumentoAPI($parametros); } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function enviarComponentesDigitaisDoTramite($novoTramite, $documentoTeste) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $parametros = []; + $dadosDoComponenteDigital['protocolo'] = $documentoTeste['documentoEnvio']['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $documentoTeste['componenteEnvio']['hashDocumento']; + $dadosDoComponenteDigital['conteudoDoComponenteDigital'] = $documentoTeste['componenteEnvio']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + + $this->enviarComponenteDigitalAPI($parametros); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatarios' => [ + [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + ] + ]; + return $cabecalho; } @@ -247,42 +222,145 @@ private function construirMetadadosDocumentoTeste($documentoTeste) $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + "mimeType" => "application/pdf", 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordem + 1, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); } finally { fclose($fp); } } - return array( - 'protocolo' => '13990.000181/2020-00', + $documentoEnvio = array( + 'protocolo' => '13990.000185/2024-00', 'nivelDeSigilo' => 1, 'descricao' => $documentoTeste['DESCRICAO'], 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + "nome" => "Nome ABC", + "tipo" => "orgaopublico" ), - 'especie' => array( 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') + 'nomeNoProdutor' => 'Despacho', ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo + ); + + return array( + 'documentoEnvio' => $documentoEnvio, + 'componenteEnvio' => $componenteEnvio ); } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + } + } + + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + $conteudo = $arrParametros['conteudoDoComponenteDigital']; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = $this->servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = $this->servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } + } + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; + } } diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php b/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php index 8a86292cc..b612f426f 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php @@ -19,6 +19,8 @@ class TramiteRecebimentoInteressadosDuplicadosTest extends FixtureCenarioBaseTes public static $servicoPEN; public static $documentoTeste1; + public static $conteudoCompoonenteDigital; + /** * Teste de envio de metadados do processo contendo interessados duplicados * @@ -50,9 +52,9 @@ public function test_envio_processo_com_documento_anexado() // Inicia o envio do processo $arrDocumentosPrimeiroEnvio = array(self::$documentoTeste1); $processoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, $arrDocumentosPrimeiroEnvio); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, self::$remetente, self::$destinatario, $processoTeste); - $this->enviarComponentesDigitaisDoTramite(self::$servicoPEN, $novoTramite, $processoTeste); - $reciboTramite = $this->receberReciboEnvio(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosProcesso(self::$remetente, self::$destinatario, $processoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verifica recebimento de novo processo administrativo contendo documento avulso enviado @@ -65,88 +67,71 @@ public function test_envio_processo_com_documento_anexado() } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } - } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); } - private function receberReciboTramite($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } @@ -171,7 +156,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } $arrInteressados = array_map(function($item) { @@ -188,9 +174,10 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => $arrInteressados, - 'documento' => $metadadosDocumentos, + 'interessados' => $arrInteressados, + 'documentos' => $metadadosDocumentos, ); } @@ -209,16 +196,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital = [$hashDocumento => $conteudo]; } finally { fclose($fp); } @@ -231,10 +219,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -242,17 +229,102 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + } + } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } } } diff --git a/tests_super/funcional/phpunit.xml b/tests_super/funcional/phpunit.xml index 051816555..e97be2af7 100644 --- a/tests_super/funcional/phpunit.xml +++ b/tests_super/funcional/phpunit.xml @@ -1,5 +1,5 @@ - + - + value="https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/" /> + - + @@ -35,17 +35,17 @@ + value="152259" /> + value="ORG1" /> + value="Unidade de Teste Glaydson ORG1" /> + value="153846" /> + value="Glaydson ORG1 Filha" /> @@ -67,7 +67,7 @@ value="Situação Econômico-Financeira de Sujeito Passivo (Art. 198, caput, da Lei nº 5.172/1966 - CTN)" /> - + @@ -77,12 +77,12 @@ + value="152260" /> + value="ORG2" /> + value="Unidade de Teste Glaydson ORG2" /> @@ -107,8 +107,8 @@ - - + + @@ -136,7 +136,7 @@ - + tests diff --git a/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php b/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php index ba6aafd51..b9138d7cc 100755 --- a/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php +++ b/tests_super/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php @@ -58,7 +58,9 @@ public function test_tramitar_processo_da_origem() }else{ $id_tramite=$id_tramite[0]["ID_TRAMITE"]; } - $this->recusarTramite($this->servicoPEN, $id_tramite); + + sleep(5); + $this->recusarTramite($id_tramite); } /** @@ -90,39 +92,58 @@ public function test_verificar_destino_processo_para_devolucao() } - private function recusarTramite($servicoPEN, $id_tramite) + private function recusarTramite($id_tramite) { $justificativa = "An exception occurred while executing 'INSERT INTO juntadas (numeracao_sequencial, movimento, ativo, vinculada, criado_em, atualizado_em, id, uuid, documentos_juntado_id, volumes_id, atividades_id, tarefas_id, comunicacoes_id, origem_dados_id, criado_por, atualizado_por) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [1, 'DOCUMENTO RECEBIDO VIA INTEGRA\u00c7\u00c3O COM O BARRAMENTO', 1, 0, '2021-12-02 14:21:48', '2021-12-02 14:21:48', 1317074776, '06ba31e8-75ad-4111-82dc-6f451f51825e', 1333864526, null, null, null, null, 3534979787, null, null]: ORA-00001: restrição exclusiva (SAPIENS.UNIQ_867686DHDKJ97876) violada"; $parametros = new stdClass(); $parametros->recusaDeTramite = new stdClass(); $parametros->recusaDeTramite->IDT = $id_tramite; - $parametros->recusaDeTramite->justificativa = mb_convert_encoding($justificativa, 'UTF-8', 'ISO-8859-1'); + $parametros->recusaDeTramite->justificativa = utf8_encode($justificativa); $parametros->recusaDeTramite->motivo = "99"; - return $servicoPEN->recusarTramite($parametros); + + return $this->recusarTramiteAPI($parametros); + } + + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + // TODO: lembrar de pegar url dinamicamente quando SOAP for removido + $strBaseUri = PEN_ENDERECO_WEBSERVICE; + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => $strBaseUri, + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + public function recusarTramiteAPI($parametros) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $idt = $parametros->recusaDeTramite->IDT; + $justificativa = $parametros->recusaDeTramite->justificativa; + $motivo = $parametros->recusaDeTramite->motivo; + + $endpoint = "tramites/{$idt}/recusa"; + + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $parametros = [ + 'justificativa' => mb_convert_encoding($objProcessoEletronicoRN->reduzirCampoTexto($justificativa, 1000), 'UTF-8', 'ISO-8859-1'), + 'motivo' => $motivo + ]; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + return $response; } } diff --git a/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php b/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php index 99d2c2473..37b1ee11b 100755 --- a/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php +++ b/tests_super/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php @@ -16,6 +16,7 @@ class TramiteRecebimentoDocumentoAvulsoTest extends FixtureCenarioBaseTestCase const CONTEUDO_DOCUMENTO_C = "arquivo_pequeno_C.pdf"; protected $servicoPEN; + protected $servicoPEN2; public static $remetente; public static $destinatario; public static $processoTeste; @@ -39,12 +40,7 @@ public function setUp(): void // Carregar contexto de testes e dados sobre certificado digital self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); - putenv("DATABASE_HOST=org2-database"); - - // Instanciar objeto de teste utilizando o BeSimpleSoap - $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; - $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; - $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + } /** @@ -52,16 +48,21 @@ public function setUp(): void * * @return void */ - public function test_recebimento_documento_avulso() + public function test_recebimento_metadados_documento_avulso() { + + $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; + $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; + + $this->servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); + // Simular um trâmite chamando a API do Barramento diretamente self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente, array(self::CONTEUDO_DOCUMENTO_A)); $metadadosDocumentoTeste = $this->construirMetadadosDocumentoTeste(self::$documentoTeste1); - $novoTramite = $this->enviarMetadadosDocumento($this->servicoPEN, self::$remetente, self::$destinatario, $metadadosDocumentoTeste); - $this->enviarComponentesDigitaisDoTramite($this->servicoPEN, $novoTramite, $metadadosDocumentoTeste); - $reciboTramite = $this->receberReciboEnvio($this->servicoPEN, $novoTramite); - + $novoTramite = $this->enviarMetadadosDocumento(self::$remetente, self::$destinatario, $metadadosDocumentoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $metadadosDocumentoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); @@ -75,7 +76,6 @@ public function test_recebimento_documento_avulso() * @group envio * @large * - * @depends test_recebimento_documento_avulso * * @return void */ @@ -149,76 +149,51 @@ public function test_verificar_recebimento_processo_destino_documento_avulso() $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, $documentos, self::$destinatario); } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function receberReciboEnvio($novoTramite) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); + $dadosTramite = $novoTramite['tramites']; + $idt = $dadosTramite[0]['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $documentoTeste) + private function enviarMetadadosDocumento($remetente, $destinatario, $documentoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['documento'] = $documentoTeste['documentoEnvio']; + + return $this->enviarDocumentoAPI($parametros); } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function enviarComponentesDigitaisDoTramite($novoTramite, $documentoTeste) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $parametros = []; + $dadosDoComponenteDigital['protocolo'] = $documentoTeste['documentoEnvio']['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $documentoTeste['componenteEnvio']['hashDocumento']; + $dadosDoComponenteDigital['conteudoDoComponenteDigital'] = $documentoTeste['componenteEnvio']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + + $this->enviarComponenteDigitalAPI($parametros); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatarios' => [ + [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + ] + ]; + return $cabecalho; } @@ -247,42 +222,145 @@ private function construirMetadadosDocumentoTeste($documentoTeste) $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + "mimeType" => "application/pdf", 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordem + 1, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); } finally { fclose($fp); } } - return array( - 'protocolo' => '13990.000181/2020-00', + $documentoEnvio = array( + 'protocolo' => '13990.000185/2024-00', 'nivelDeSigilo' => 1, 'descricao' => $documentoTeste['DESCRICAO'], 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + "nome" => "Nome ABC", + "tipo" => "orgaopublico" ), - 'especie' => array( 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') + 'nomeNoProdutor' => 'Despacho', ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo + ); + + return array( + 'documentoEnvio' => $documentoEnvio, + 'componenteEnvio' => $componenteEnvio ); } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = $this->servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + } + } + + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + $conteudo = $arrParametros['conteudoDoComponenteDigital']; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudo, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = $this->servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = $this->servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } + } + + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + { + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; + } } diff --git a/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php b/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php index 768308bb9..b612f426f 100755 --- a/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php +++ b/tests_super/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php @@ -19,6 +19,8 @@ class TramiteRecebimentoInteressadosDuplicadosTest extends FixtureCenarioBaseTes public static $servicoPEN; public static $documentoTeste1; + public static $conteudoCompoonenteDigital; + /** * Teste de envio de metadados do processo contendo interessados duplicados * @@ -50,9 +52,9 @@ public function test_envio_processo_com_documento_anexado() // Inicia o envio do processo $arrDocumentosPrimeiroEnvio = array(self::$documentoTeste1); $processoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, $arrDocumentosPrimeiroEnvio); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, self::$remetente, self::$destinatario, $processoTeste); - $this->enviarComponentesDigitaisDoTramite(self::$servicoPEN, $novoTramite, $processoTeste); - $reciboTramite = $this->receberReciboEnvio(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosProcesso(self::$remetente, self::$destinatario, $processoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verifica recebimento de novo processo administrativo contendo documento avulso enviado @@ -65,86 +67,71 @@ public function test_envio_processo_com_documento_anexado() } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 5.0, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } - } - private function receberReciboEnvio($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); } - private function receberReciboTramite($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } @@ -169,7 +156,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } $arrInteressados = array_map(function($item) { @@ -186,9 +174,10 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => $arrInteressados, - 'documento' => $metadadosDocumentos, + 'interessados' => $arrInteressados, + 'documentos' => $metadadosDocumentos, ); } @@ -207,16 +196,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital = [$hashDocumento => $conteudo]; } finally { fclose($fp); } @@ -229,10 +219,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -240,17 +229,102 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + } + } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + } } }