Escolar Documentos
Profissional Documentos
Cultura Documentos
MANUAL DO SISTEMA
VERSÃO 1.0.0
Rio de Janeiro
2011
Sumário
CAPÍTULO 1 – INTRODUÇÃO.........................................................................................................3
1.1 – Motivação...............................................................................................................................3
1.2 – SIMCC: Apresentação............................................................................................................3
CAPÍTULO 2 – TECNOLOGIAS UTILIZADAS...............................................................................5
2.1 – Sistema Ubuntu Server ..........................................................................................................5
2.2 – Linguagem PHP......................................................................................................................5
2.3 – Banco de dados Oracle...........................................................................................................6
2.4 – Framework CodeIgniter..........................................................................................................6
2.5 – Biblioteca jQuery....................................................................................................................6
CAPÍTULO 3 – O SISTEMA DE MARCAÇÃO E CONTROLE DE CONSULTAS........................7
3.1 – Arquitetura e estrutura do sistema..........................................................................................7
3.2 – Requisitos mínimos.................................................................................................................9
3.3 – Procedimento de instalação e configuração............................................................................9
3.3.1 – Preparação do ambiente base........................................................................................10
3.3.2 – Instalação do sistema.....................................................................................................12
3.3.3 – Configuração do sistema...............................................................................................13
3.4 – Integração com o banco de dados.........................................................................................14
3.4.1 – Ajustes de chamadas a procedimentos..........................................................................14
3.4.2 – Ajuste de chamadas a esquemas de dados distintos......................................................17
3.4.3 – O método simple_stored_procedure.............................................................................18
3.4.4 – O método display_error_friendly..................................................................................19
3.4.5 – Carga de especialidades................................................................................................19
3.5 – Procedimentos de manutenção e backup..............................................................................20
CAPÍTULO 4 – SOLUÇÃO DE PROBLEMAS...............................................................................21
4.1 – Problemas comuns................................................................................................................21
4.2 – Problemas conhecidos...........................................................................................................22
CAPÍTULO 5 – REFERÊNCIAS......................................................................................................23
APÊNDICE........................................................................................................................................24
- Diagrama de classe do sistema....................................................................................................24
CAPÍTULO 1 – INTRODUÇÃO
1.1 – Motivação
O Hospital Central do Exército – HCE é uma instituição bicentenária, responsável pelo
atendimento médico da comunidade militar na região do Rio de Janeiro, muito bem referenciada
pela sua qualificada equipe médica.
Com o passar do tempo a demanda por atendimento no HCE cresceu e, por uma série de
fatores, hoje acaba por gerar uma sobrecarga nos setores de atendimento. Essa demanda excessiva
faz com que os pacientes não sejam prontamente atendidos e piora as condições de trabalhos dos
setores que atendem diretamente o público.
A direção do HCE, ciente desse panorama, deseja modificá-lo. A primeira medida é fazer
com que a marcação de consultas para as clínicas do hospital sejam realizadas nas Policlínicas
Militares. As Policlínicas Militares são células de atendimento de primeiro nível que tem áreas bem
definidas de atuação. Essas áreas foram concebidas de forma a distribuir a demanda, evitando o
estrangulamento de qualquer ponto do sistema de atendimento. A marcação de consultas nas
Policlínicas, além de desonerar o HCE deste serviço, proporcionará uma maior comodidade aos
pacientes, pois estes agora poderão agendar suas consultas mais perto de casa, sem ter que se
deslocar até o Hospital.
A marcação de consultas será feita na forma de distribuição de senhas para uma certa
especialidade em uma determinada data. O objetivo deste projeto é o de viabilizar a geração dessas
senhas por parte das Policlínicas sob determinados critérios e de acordo com a disponibilidade do
hospital.
– O sistema deveria ser web de forma a possibilitar de maneira fácil o seu uso pelas diversas
policlínicas.
3
– O sistema só poderia se acessado mediante login, que identificasse todo e qualquer agente
que estivesse operando o sistema. Esse agente deveria ter uma associação com sua unidade
de origem (funcionário do HCE ou de uma das policlínicas).
– O sistema não deveria registrar qualquer informação a respeito do médico que fará um
determinado atendimento, uma vez que sempre será agendada uma consulta para uma
determinada especialidade em uma data especificada.
– Para o caso de pacientes sem prontuário no HCE o sistema deveria possibilitar um pré-
cadastramento, com o respectivo agendamento. O comprovante de agendamento deveria
indicar ao paciente a necessidade de comparecer um pouco mais cedo para efetuar o seu
cadastramento e consequente registro de prontuário.
4
CAPÍTULO 2 – TECNOLOGIAS UTILIZADAS
Linguagem de desenvolvimento
interpretada no servidor, orientada a objeto e
voltada para aplicações web permitindo torná-las
mais dinâmicas. Esta linguagem atualmente é
utilizada por muitos sites importantes o que
proporciona uma confiabilidade em alto nível. Frequentemente, a equipe mantenedora da mesma
libera atualizações e correções de erros, estas características diminuem o risco da linguagem ser
descontinuada. Além disso, existem vários frameworks que implementam funções que facilitam de
maneira considerável o desenvolvimento de ferramentas mais complexas sem a necessidade de se
dispor de muito tempo e esforço. O PHP é distribuído sob a licença PHP Licence v3.01 que é
considerada uma licença de código aberto (Open Source), certificada pela Open Source Initiative. A
versão do PHP utilizada é a 5.3.
5
2.3 – Banco de dados Oracle
6
CAPÍTULO 3 – O SISTEMA DE MARCAÇÃO E CONTROLE DE CONSULTAS
../core/MY_Controller.php
../helpers/utils_helper.php
../libraries/authentication.php
7
A pasta controllers tem os controladores das funções do
sistema. Eles são responsáveis por receber as
solicitações das views, solicitar os dados pertinentes aos
respectivos models e retornar para as views. Cada
controlador é nomeado de acordo com a sua função e
estendem a classe My_Controller.
8
Falando da arquitetura em termos de escopo externo, temos basicamente um servidor de
aplicação que recebe requisições dos clientes através de um endereço de internet e que se comunica
com o servidor de banco de dados para atendê-las. O diagrama abaixo ilustra a arquitetura da
solução:
9
– Instalar um ambiente com Apache e PHP para Windows. O XAMP é uma das opções.
– Instalar o Oracle Instant Client 10.2 ou superior.
– Procurar o arquivo "php_oci8.dll" e colocar o diretório onde encontrá-lo no PATH do
sistema.
– Procurar o arquivo "php.ini" do XAMP e colocar (ou "descomentar") a linha
"extension=php_oci8.dll”.
– Reiniciar o XAMP.
– Acessar o endereço: http://localhost/xampp/phpinfo.php e certificar-se que o driver "oci8"
aparece na lista de módulos suportados.
Nas condições acima o ambiente estará apto a executar o SIMCC.
As seções seguintes descrevem em detalhes o procedimento de instalação para o sistema
Ubuntu Server 10.04.3 LTS de 64 bits.
– Baixe o Oracle Instant Client para a versão do banco de dados utilizada, ou uma
versão superior (são necessários 2 pacotes, o Basic e o SDK). Coloque os arquivos no
seguinte diretório:
/usr/lib/oracle/<versão>/client64
Para a versão 11.2 (consideraremos essa versão de agora em diante) do cliente o diretório é:
/usr/lib/oracle/11.2/client64
Nesse diretório deve existir um subdiretório lib onde devem estar as bibliotecas
compartilháveis. São arquivos com extensão “so”. Para os passos seguintes funcionarem é preciso
criar dois links simbólicos. O primeiro com o seguinte comando:
10
Para finalizar esse passo é preciso fazer com que o sistema carregue as bibliotecas desse
diretório. Isso pode ser feito através da criação de um arquivo chamado instantclient11g.conf com o
caminho onde as bibliotecas estão disponíveis, ou seja: /usr/lib/oracle/11.2/client64/lib. Esse
arquivo deve ser colocado no diretório /etc/ld.so.conf.d. Para carregar as bibliotecas execute o
comando ldconfig.
extension=oci8.so
– Teste o sistema:
<?php
phpinfo();
?>
Acesse: http://<ip_do_servidor>/teste.php
Procure na página pelo conteúdo da figura a seguir. Se encontrar o servidor foi configurado
corretamente. Se não encontrar procure nos arquivos de log do servidor Apache, localizados no
diretório /var/log/apache2 por mensagens de erro que esclareçam o problema. Lembre-se que
sempre que alterar alguma configuração no servidor Apache é preciso reiniciá-lo.
11
Figura: Servidor com suporte ao Oracle configurado corretamente
$ mv simcc /var/www
12
Importe o banco de dados fornecido em um dump SQL para o esquema desejado. Vamos
supor para fins de ilustração o esquema simcc no banco de dados de IP 192.168.1.10 e SID des.
Vamos supor também o servidor no IP 192.168.1.11.
$config['base_url'] = 'http://192.168.1.11/simcc/';
* Caso o sistema tenha um registro de DNS é preferível colocá-lo, pois após o primeiro
acesso o framework usa o valor da variável base_url para montar os endereços para
redirecionamento.
$db['default']['hostname'] = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=192.168.1.11)(PORT=1521))
(CONNECT_DATA=(SID=des)))';
$db['default']['username'] = 'usuario';
$db['default']['password'] = 'senha';
…...... as demais configurações não se alteram .........
Após efetuar as configurações apresentadas até aqui já é possível entrar no sistema. Acesse o
endereço informado no parâmetro base_url e use como usuário admin e senha também admin. Não
esqueça de trocar a senha de administrador no primeiro acesso. Isso pode ser feito no menu
usuários.
13
3.4 – Integração com o banco de dados
Por conta desta particularidade serão necessárias algumas adaptações no código do sistema,
estas adaptações serão esclarecidas nas seções a seguir.
Afim de minimizar qualquer impacto sobre o cronograma do projeto foram definidos dois
procedimentos básicos que contém interfaces pactuadas com a equipe do HCE. São eles:
14
O sistema funciona perfeitamente com o uso dos procedimentos relacionados anteriormente.
O procedimento AGENDAR cria dados fictícios de consultas e os armazena na tabela
PROCTEMP, especialmente criada para este fim. De forma análoga o procedimento
C_AGENDACONSUL cancela uma determinada consulta eliminando os seus dados na tabela
PROCTEMP.
Quando os procedimentos definitivos forem finalizados, será preciso alterar a chamada dos
procedimentos dentro do sistema. Esse procedimento será explicado a seguir.
$params = array(
array('name'=>':p_nrp', 'value'=>$nrp,'length'=>10, 'type'=>SQLT_CHR),
array('name'=>':p_dtconsulta', 'value'=>$dataconsul, 'length'=>10, 'type'=>SQLT_CHR),
array('name'=>':p_codesp', 'value'=>$cod_esp, 'length'=>4, 'type'=>SQLT_CHR),
array('name'=>':p_unidorig', 'value'=>$cod_unidorig, 'length'=>1, 'type'=>SQLT_CHR),
array('name'=>':p_out_sala', 'value'=>&$sala, 'length'=>4, 'type'=>SQLT_CHR),
array('name'=>':p_out_turno', 'value'=>&$turno, 'length'=>1, 'type'=>SQLT_CHR),
array('name'=>':p_out_ntrans', 'value'=>&$ntrans, 'length'=>5, 'type'=>SQLT_CHR)
);
$retproc = FALSE;
$errormsg = "";
try{
$retproc = $this->db->simple_stored_procedure('','AGENDAR',$params);
}
catch(Exception $e){
$errormsg = $e->getMessage();
}
A primeira parte do código é responsável pela preparação dos argumentos que serão
submetidos ao procedimento. O vetor params contém os argumentos com suas propriedades (valor,
tamanho e tipo). Os parâmetros de entrada são passados por cópia e os de saída por referência
(simbolo “&” antes da variável). Ao final o método simple_stored_procedure é chamado para
executar o procedimento, submetendo o vetor params. Note que o procedimento é executado em um
bloco try/catch de forma a capturar eventuais mensagens de erro retornadas pelo procedimento.
15
Essas mensagens serão exibidas pelo sistema.
Se o procedimento tiver seu nome alterado ou for armazenado em um esquema diferente do
padrão do sistema será preciso alterar a chamada. Supondo um novo procedimento
AGENDAMENTO hospedado no esquema SISHCE, a chamada ficaria assim:
$retproc = $this->db->simple_stored_procedure('SISHCE','AGENDAMENTO',$params);
$retproc = '1';
$params = array(
array('name'=>':p_nrp', 'value'=>$nrp,'length'=>10, 'type'=>SQLT_CHR),
array('name'=>':p_dtconsulta', 'value'=>$dataconsul, 'length'=>10, 'type'=>SQLT_CHR),
array('name'=>':p_codesp', 'value'=>$cod_esp, 'length'=>4, 'type'=>SQLT_CHR),
array('name'=>':p_out_ret', 'value'=>&$retproc, 'length'=>1, 'type'=>SQLT_CHR)
);
$errormsg = "";
try{
$this->db->simple_stored_procedure('','C_AGENDACONSUL',$params);
}
catch(Exception $e){
$errormsg = $e->getMessage();
log_message('error',$errormsg);
}
16
3.4.2 – Ajuste de chamadas a esquemas de dados distintos
Com o uso de 2 esquemas de banco de dados o sistema SIMCC teve que trabalhar com duas
definições de bancos de dados. Essa estrutura provavelmente permanecerá após a instalação, devido
a arquitetura dos sistemas corporativos do HCE. Por isso, mostraremos onde e como alterar as
chamadas aos esquemas externos à aplicação SIMCC.
As instâncias de banco de dados são registradas no arquivo
/var/www/simcc/application/config/database.php como mencionado no item 3.2.3. O framework
provê acesso facilitado à instância default registrada no arquivo de configuração. Mas outras
instâncias podem ser registradas. Foi esse o caso da instância de banco de dados correspondente ao
esquema de escopo externo ao sistema, que chamamos de sishce. Para poder utilizá-la a seguinte
configuração foi realizada:
$db['sishce']['hostname'] = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.9)
(PORT=1521))(CONNECT_DATA=(SID=des)))';
$db['sishce']['username'] = 'usuario';
$db['sishce']['password'] = 'senha';
$db['sishce']['database'] = ''; // not used by this Oracle driver
$db['sishce']['dbdriver'] = 'oci8';
$db['sishce']['dbprefix'] = "";
$db['sishce']['pconnect'] = TRUE;
$db['sishce']['db_debug'] = FALSE;
$db['sishce']['cache_on'] = FALSE;
$db['sishce']['cachedir'] = "";
$db['sishce']['char_set'] = "utf8";
$db['sishce']['dbcollat'] = "utf8_general_ci";
Na classe onde o comando acima foi realizado estarão disponíveis as instâncias do banco de
dados padrão (variável $db) e a instância sishce (variável $db2).
Em um projeto corretamente estruturado no modelo MVC a manipulação das instâncias de
banco de dados serão feitas exclusivamente nas classes de modelo. Então o lugar correto para
buscar pela inicialização de instâncias extras de banco é no diretório
/var/www/simcc/application/models.
Particularmente no sistema SIMCC a instância de escopo externo foi utilizada nas classes
definidas nos arquivos pacientes_model.php, especialidade_model.php e agenda_model.php.
17
Abaixo um exemplo do uso da instância sishce retirada do arquivo pacientes_model.php:
/**
* Obtém o nrp do paciente na tabela de paciente no hce através do nome
*/
function get_nrp_by_name($nome){
$db2->select('NRP');
$db2->from($this->table);
$db2->where('NOME',$nome);
$query = $db2->get();
return $query->row()->NRP;
}
Caso seja necessária a mudança de banco de dados ou mesmo a sua descentralização é
possível adaptar o sistema sem muita dificuldade. Pode-se alterar as definições de registro no
arquivo de configuração de base de dados ou ainda adicionar novas instâncias carregando-as antes
de utilizá-las na própria função presente no modelo, como no exemplo acima.
18
possível upgrade do framework no futuro. Para referência o a função foi incluída no arquivo
../simcc/system/database/drivers/oci8/oci8_driver.php
Por este motivo, o método display_error_friendly foi criado. Ele é basicamente uma réplica
do método padrão que não captura as informações desnecessárias e usa um template de exibição
distinto chamado error_db_friendly. Este template corresponde ao arquivo
../simcc/application/errors/error_db_friendly.php). O que ocorre na prática então é que em uma
situação de uso normal do sistema (db_debug = FALSE) o método alternativo é chamado invocando
uma mensagem voltada para o usuário, enquanto em uma situação de contingência (db_debug =
TRUE) o método padrão é chamado, gerando uma mensagem voltada aos desenvolvedores.
19
3.5 – Procedimentos de manutenção e backup
Além disso, o backup da pasta /var/www/simcc é aconselhável, pois alguns logs são
armazenados na pasta /var/www/simcc/application/logs. O backup do banco de dados já deve ser
um procedimento habitual e nem precisa ser mencionado.
Os logs de escopo da aplicação são criados em arquivos identificados pela data, na forma
log-yyyy-mm-dd.php. É aconselhável a criação de um CRONJOB para apagar arquivos antigos. Os
logs do servidor web e do restante do sistema já são rotacionados automaticamente pelo serviço
logrotate.
20
CAPÍTULO 4 – SOLUÇÃO DE PROBLEMAS
O sistema foi desenvolvido tendo como base de testes o navegador Mozilla Firefox, portanto
até o momento só é possível garantir o perfeito funcionamento do sistema neste navegador.
Trabalhos de compatibilização com o Google Chrome e Opera estão em curso. No entanto, apesar
de erros de formatação, o sistema ainda assim funciona nos principais navegadores. A exceção é o
Microsoft Internet Explorer que sabidamente apresentam problemas diversos com interfaces
dinâmicas, não sendo aprovado no teste ACID3 (http://www.acidtests.org/). Por isso, ele não será
suportado.
– Sistema lento:
O sistema SIMCC é bastante leve. Então é provável que a lentidão do sistema tenha relação
com o banco de dados ou com a rede. De qualquer modo, a reinicialização do serviço apache pode
ajudar.
21
– Sistema não gera logs de aplicação:
* Será necessário gerar algum evento para que o arquivo seja criado.
Por medida de segurança o sistema inibe o acesso de usuários que ficam ociosos (não
efetuam nenhuma ação no sistema) por duas horas. Efetue login novamente.
O tempo de expiração de uma sessão é configurável. Basta alterar o parâmetro
$config['sess_expiration'] = 7200; (tempo em segundos) localizado no arquivo config.php. Colocar
o valor 0 (zero) nesse parâmetro desativa a expiração de sessão (não recomendado).
Os problemas listados abaixo são de alguma forma inerentes a tecnologia, sendo portanto
inevitáveis até o momento. Nenhum deles impede o uso do sistema com qualidade e estão listados
abaixo apenas para referência do suporte:
Esse erro ocorre por uma limitação da tecnologia empregada. Basta aguardar, entre uma
ação de exclusão e a ação seguinte, até que a confirmação da exclusão desapareça.
22
CAPÍTULO 5 – REFERÊNCIAS
– Ubuntu
http://www.ubuntu.com
– PHP
http://www.php.net
– Oracle
http://www.oracle.com
– Jquery
http://jquery.com
– CodeIgniter
http://codeigniter.com
23
APÊNDICE
24