Tag´s Extensíveis ($GP{} e $GF{})

O IW ofere um importante recurso que permite que novas tag´s sejam desenvovidas dinâmicamente. Para acrescentar novas tag´s ao IW deve-se utilizar o conceito de tag parametrizável do IW cuja sintaxe descrevemos a seguir :


TAG $GP{}

Funcionalidade : Oferece a possibilidade de inserção de informações em formato “tabela” em substituição à tag em templates xml e na ficha sintética.

Sintaxe: $GP{nome_comando_sql_espec|dimensao_1|dimensao_2|...|dimensao_n}

onde :

nome_comando_sql_espec : Trata-se de um nome que um comando sql especializado que deve ser cadastrado na tabela IFRSQLCOMMAND do IW (por uma simples convenção esse comando deve ser cadastrado com a coluna FORMID = 1551. Esse comando deverá receber como parâmetro o número de um atendimento (ID da tabela CAPADMISSION) e tipicamente irá retornar algumas colunas que serão apresentadas dinamicamente em formato de tabela na ficha sintética.

Dimensao_1 : refere-se à largura que será destinada à primeira coluna na tabela dinâmica (em % da largura total da tabela)

Dimensao_2 : refere-se à largura que será destinada à segunda coluna na tabela dinâmica (em % da largura total da tabela)

...

Dimensao_n : refere-se à largura que será destinada à n-ésima coluna na tabela dinâmica (em % da largura total da tabela)


Exemplo passo a passo de desenvolvimento de uma nova TAG $GP{}:

No nosso exemplo vamos desenvolver uma tag que irá apresentar uma tabela com as seguintes informações:

- coluna 1 (15% da largura da tabela): data da visita
- coluna 2 (20% da largura da tabela): nome do profissional seguido do nome da sua especialidade entre parêntesis
- coluna 3 (65% da largura da tabela): concatenação das informações “Síntese da evolução clínica” e “Condutas Metas e Orientações” dos relatórios de avaliação e/ou evolução clínica das diversas especialidades.

Vamos adotar o nome “EVOL_CLIN_COMB” para o comando SQL que irá recuperar os dados para a nossa tag. Sendo assim a sintaxe da tag ficaria sendo :

$GP{EVOL_CLIN_COMB|15|20|65}

O primeiro passo para a implementação da tag será elaborar o comando SQL que fará a recuperação dos dados tal qual especificado. Para o desenvolvimento do comando sql utilize e interface menu- ferramentas – Sql & Debug (disponível para usuários administradores com status de desenvolvedor). A figura a seguir ilustra essa interface:

http://iw.iwsoftware.com.br:9090/IwHelp/Config_PGDC_html_12065630.jpg

A sintaxe para o comando sql para a tag do nosso exemplo ficou sendo :

select b.eventdate as dataevento, (a.ProfessionalName || '(' || a.SCSpecialityName || ')' ) as profissional , CASE WHEN (b.CLINIC_DESCR is null) THEN '' WHEN (b.CLINIC_DESCR is not null) THEN ('Evolução Clínica: ' || b.CLINIC_DESCR || '<br><br>') ELSE 'Error' END || CASE WHEN (b.CONDUTA_META is null) THEN '' WHEN (b.CONDUTA_META is not null) THEN ('Condutas Metas e Orientações: ' || b.CONDUTA_META) ELSE 'Error' END as evolucao
from capevolution a, tdwd_pgdc b
where b.idevolution = a.id
and a.idadmission = ?
and b.eventdate > sysdate - 365
and (b.CLINIC_DESCR is not null or b.CONDUTA_META is not null)
order by b.eventdate desc|ID



IMPORTANTE:

I) Ao final do comando sql deve-se acrescentar a expressão “|ID” ( ou seja, um caracterpipe” seguido do termo ID) exatamente como demonstrado no exemplo logo acima. Essa sintaxe é fundamental para que , em tempo de execução do comando, o ID da internação (ID da tabela CAPADMISSION) seja passado corretamente como parâmetro para o módulo executor do comando SQL.
II) Uma “segunda sintaxe igualmente aceita pela IW : Ao invés de usar o caracter “?” ilustrado no comando acima utilize a expressão $P{ID} exatamente no lugar da ? e retire o |ID ao final do comando. Essa segunda sintaxe é particularmente útil em situações onde se deseja usar um comando tipo “union” com duas sub-querys onde se deseja utilizar o filtro por ID nas duas sub-querys. A título de ilustração o comando ilustrado acima ficaria da seguinte forma nessa segunda sintaxe:

select b.eventdate as dataevento, (a.ProfessionalName || '(' || a.SCSpecialityName || ')' ) as profissional , CASE WHEN (b.CLINIC_DESCR is null) THEN '' WHEN (b.CLINIC_DESCR is not null) THEN ('Evolução Clínica: ' || b.CLINIC_DESCR || '<br><br>') ELSE 'Error' END || CASE WHEN (b.CONDUTA_META is null) THEN '' WHEN (b.CONDUTA_META is not null) THEN ('Condutas Metas e Orientações: ' || b.CONDUTA_META) ELSE 'Error' END as evolucao
from capevolution a, tdwd_pgdc b
where b.idevolution = a.id
and a.idadmission =
$P{ID}
and b.eventdate > sysdate - 365
and (b.CLINIC_DESCR is not null or b.CONDUTA_META is not null)
order by b.eventdate desc



Para cadastrar um novo comando sql customizado acesse a seguinte interface : menu-administrador-(20) Cfg Comandos SQL. A ilustração a seguir ilustra essa interface:

http://iw.iwsoftware.com.br:9090/IwHelp/edicaoTemplates_html_268223f3.jpg

Para cadastrar esse comando SQL clique no botão “Novo” e informe valores para os atributos obrigatórios “Nome” e “Comand sql” , e opcionalmente informe um valor para o atributo “Descrição”. Nota: O atributo “Parâmetros” tipicamente é usado em outros contexto de processamento por exemplo para limitar um número máximo de registros para paginação (recurso não aplicável ao tipo de comando SQL requerido por esse tipo de tag).

Notas:

(a) Deve-se cadastrar as traduções para os nomes das colunas que irão retornar no comando sql. Utilize a categoria de tradução “GLOBAL” para efetivar essas traduções. Acesse menu-administrador- (05) Configurar traduções – (2) Configurar Traduções. Use o botão “Novo” para inserir um novo termo no dicionário global do IW e em seguida cadatre a tradução desejada para o novo termo.

(b) Para que as traduções globais tenham efeito será necessário re-iniciar o jboss no(s) servidor(es) de aplicação do IW.

 

TAG $GF{}

Funcionalidade : Oferece a possibilidade de inserção de informações simples (campos isolados) em substituição à tag em templates xml e na ficha sintética.

Sintaxe: $GF{nome_comando_sql_espec|<nome_coluna_especifica>}


onde:

nome_comando_sql_espec : Trata-se do nome do comendo sql customizado para a tag. Utilize a mesma interface F00172 já ilustrada anteriormente para proceder o cadastro do comando sql. Esse comando deverá receber como parâmetro o número de um atendimento (ID da tabela CAPADMISSION) e tipicamente irá retornar uma ou várias colunas . Apenas uma das colunas retornadas do comando poderá ser renderizada em cada instância de uso da TAG no template.

nome_coluna_especifica : Trata-se do nome da coluna cujo valor retornado será exibido no lugar da TAG.



Exemplo passo a passo de desenvolvimento de uma nova TAG $GF{}:


No exemplo que se segue vamos implementar uma tag genérica para apresentação em do “nome do médico solicitante do home care” com seu respectivo “CRM”.

Informação técnica requerida para essa tag : O IW armazena o cadastro dos médicos de referência de um paciente na tabela denominada GLBPHYSICIAN e armazena o ID do registro do médico nessa tabela na coluna IDPHYSICIANREQ da CAPDMISSION.

Sendo assim, o comando sql para obtenção dos atributos desejados ficaria sendo:

SELECT B.NAME AS NOMEMEDICO, B.REGISTRYNUMBER AS CRM FROM CAPADMISSION A, GLBPHYSICIAN B
WHERE
A.IDPHYSICIANREQ = B.ID
A.ID=?|ID

Vamos acionar a interface F0172 e proceder o cadastramento desse comando SQL, conforme ilustrado abaixo :

http://iw.iwsoftware.com.br:9090/IwHelp/edicaoTemplates_html_27e32fa9.jpg

A sintaxe final para essa tag fico sendo então:

$GF{MEDICO_SOLICITANTE,NOMEMEDICO} : Essa tag será substituída pelo nome do médico solicitante e ,
$GF{MEDICO_SOLICITANTE,CRM} : Essa tag será substituída pelo CRM do médico solicitante.


TAG GPLIST{}

Funcionalidade: Oferece a possibilidade de inserção de informações tipo lista (campos enumerados). Exemplo: Exibição de uma lista de diagnósticos de enfemagem de um paciente. Notas: Na apresentação das informações nesssa tag “não serão introduzidas molduras” de tabelas nada disso, mas tão somente um ordinal (contador numérico) precedento os nomes das opções (ex.: nomes de diagnósticos de enfermagem. Em termos de processamento, o IW irá basicamente executar o comando sql endereçao pelos parâmetros <formid> e <keyindex> (esse comando terá que devolver uma única coluna com uma lista de valores (string)).

Sintaxe: $GPLIST{<formid>,<keyindex>}


onde:

<formid>: id do form no IW onde está cadastrado o comando sql que será executado no processamento da tag. Nota: Nesse comando deve necessariamente conter um parâmetro $P{ID} que em tempo de processsamento será substituído pelo “ID” da admissão associada ao paciente no contexto de processamento da tag.

<keyindex> : número do KEYINDEX no cadastro do comando sql. Exemplo: -6


Exemplo de sintaxe:
$GPLIST{172,-6}


Exemplo de comando sql para retornar a relação de nomes de diagnósticos de enfermagem de um paciente:

select b.codename from CAPDIAGNOSTICNURSE a, scccode b where IDADMISSION = $P{ID} and b.id = a.SCDIAGNOSTICNURSE


TAG GPL{}

Funcionalidade: Oferece um comportamento bastante semelhante ao da TAG GP{} com um layout simplificado: Não será exibido um título (TITLE) e também não será exibido um a linha de “cabeçalho da tabela” (TABLE HEADER).

Sintaxe: $GPL{<formid>,<keyindex>}

 

Configurando Caixas de Seleção (combo box) populadas dinamicamente

Através desse recurso é possível desenvolver templates que referenciem caixas de seleção com as opções do combo box não são previamente declaradas no código html do template (em tempo de desenho do template). Nessa abordagem o IW irá acessar um serviço (execução de um comando sql configurável) para obter as opções da caixa de seleção.

Exemplo de utilização: Esse tipo de recurso é utilizado nos templates padronizados disponibilizados na instalação default do IW-Health para popular as opções de planos de atenção. A imagem abaixo ilustra um template denominado “PGDC – Reclassificação do Risco”:

http://iw.iwsoftware.com.br:9090/IwHelp/edicaoTemplatesII_html_m4a3b43a4.jpg

Nesse template destacamos a caixa de seleção denominada “Plano de Atenção” que apresenta a relação de possíveis planos de atenção no qual um paciente monitorado poderá estar inscrito dentro de uma empresa de gerenciamento de doentes crônicos. A relação de opções que aparecem na caixa de seleção, nesse caso, não foram declaradas “em tempo de desenho do template” mas foram obtidas dinâmicamente mediante a execução de um serviço.

Sintaxe html específica: Para utilizar essa funcionalidade, a seguinte sintaxe deve ser usado no código fonte do template :

<select name="$evol_riskclassification" size="1" iwselect="true" keyindex="-4" iwmode="value" formid="172"></select>

Onde:
name="$evol_riskclassification" : trata-se da variável (se relaciona com o nome da coluna na tabela dinâmica) onde será armazenado o código do plano de atenção (nesse exemplo, essa informação será gravada na coluna denominada RISKCLASSIFICATION na tabela dinâmica associada ao template.

Size="1" :
Nesse tipo de recurso pode-se deixar a tag size com valor default = 1 , pois o tamanho da caixa de seleção será ajustada automaticamente com base no comprimento dos nomes de planos de atenção que retornarem dinamicamente do serviço.

iwselect="true" : Essa tag (trata-se de uma tag exclusivamente desenvolvida pela Incoway, ou seja, não faz parte da linguagem html standard) deverá ser declarada necessariamente com valor = “true” (exatamente como ilustrado nesse exemplo). É justamente a presença dessa tag que irá ativar o comportamento diferenciado do IW fazendo com que seja executado um comando sql para obtenção da relação de opções da caixa de seleção.

iwmode="value" : Essa tag ativa o comportamento de valoração do índice (valor que será gravado na tabela dinâmica) por “valor” (ou seja, desativa a valoração posicional ). A utilização desse recurso exige que seja utilizado iwmode="value" conforme ilustrado nesse exemplo.

Keyindex="-4" formid="172": Essas tag´s cojuntamente “endereçam” o comando sql que será utilizado. Nesse exemplo estamos utilizando um comando sql padronizado (que é fornecido pela Incoway na instalação default e também é atualizado regularmente nas trocas de versão). Para visualizar esse comando sql acesse a interface F0172 (menu – Administrador – (20) Cfg Comando Sql). A figura a seguir ilustra essa interface , que é utilizada para cadastramento de comandos sql customizados e/ou visualização de comandos sql padronizados fornecidos pela Incoway:

http://iw.iwsoftware.com.br:9090/IwHelp/edicaoTemplatesII_html_2714129.jpg

Copiamos abaixo o código desse comando sql :

SELECT keyindex as id , translation as name , 0 as defaultvalue from ifrconstantitem a, ifrconstant b where a.idconstant = b.id and b.name = 'K_MONIT_CLASSIFIC_GERAL_RISCO' and a.keyindex not in (select distinct riskclassification from GLBRISKCTREXCEPT where idcontract = $P{IDCONTRACT} ) order by keyindex

IMPORTANTE: Um comando sql , para ser utilizado nesse tipo de recurso terá que “necessariamente” retornar 3 colunas denominadas da seguinte forma:

id : Trata-se da coluna que terá que retornar os valores de keyindex (valores) a serem populados na caixa de seleção (esses valores, não ficam visíveis na apresentação do html ao usuário, mas são esses valores que serão gravados na tabela dinâmica). Notem que nesse exemplo estamos passando o valor da coluna KEYINDEX da constante denominada K_MONIT_CLASSIFIC_GERAL_RISCO (constante onde ficam armazenados os códigos e nomes dos planos de atenção no IW).

name : Trata-se do texto que será apresentado para os usuários referente a cada opção que será apresentada na caixa de seleção. Notem que nesse exemplo estamos passando o valor da coluna TRANSLATION referente à constante denominada K_MONIT_CLASSIFIC_GERAL_RISCO (constante onde ficam armazenados os códigos e nomes dos planos de atenção no IW).

defaultvalue
: Nessa coluna deve ser retornar o valor de keyindex correspondente ao valor “default” a ser setado pelo IW na caixa de seleção. Notem que nesse exemplo estamos passando o valor default = 0 (que corresponde à opção “.” de plano de atenção).

Nota técnica complementar :
Notem também que nesse comando sql foi declarado o seguinte “inner select” : “.. and a.keyindex not in (select distinct riskclassification from GLBRISKCTREXCEPT where idcontract = $P{IDCONTRACT} )”. Essa parte do comando faz com que “não retornem” no resultado do comando aqueles planos de atenção que tenham sido declarados na tabela GLBRISKCTREXCEPT. Essa funcionalidade permite que possamos “expurgar” planos de atenção de determinados contratos específicos de forma bastante prática e dinâmica.

Nota: Para acessar a interface de cadastramento de excessões de planos de atenção versus contratos acesse : menu – Configuração – (06) CfgGerenc Crônicos - (00) Cfg Planos Atenção - (3) Cfg Pl. Atenção Ativos.



Populando dinamicamente as opções de um combo box através de uma função plugada java

O IW oferece também mecanismo que permitem que uma função plugada java possa modificar o domínio de opções exibido por um componentes html tipo combo box (<select>).

Para popular a relação de opções de um combo box (componente <select> do html) deve-se basicamente utilizar a seguinte sintaxe na codificação da função plugada java:

htmlVariables.put(“$SelectOptions_<nome_variavel>”, “valor_1|descricao_opcao_1|valor_2|descricao_opcao_2|.....|valor_n|descricao_opcao_n”);

Exemplo: htmlVariables.put(“$SelectOptions_riskclassification”, “10|Gerenciamento Nível1|10|Gerenciamento Nível2”);


Caso Exemplo: O enunciado a seguir formula um problema onde é aplicável o uso da funcionalidade população dinâmica de conteúdos de combo boxe em templates

No contexto dos processos PGDC (Programas de gerenciamento de doenças e casos) vamos supor que sua empresa seja uma Operadora e utilize o IW-Health para gerenciar o direcionamento de pacientes a prestadores terceirizados da seguinte forma:

O conceito de gerenciamento prevê basicamente 3 níveis de graus de risco de pacientes, sendo que para cada grau de risco foi dimensionado um “plano de atenção” específico. Ou seja, são praticados 3 planos de atenção a saber:

- Plano Grau Risco I
- Plano Grau Risco II
- Plano Grau Risco III

Os pacientes poderão ser ainda direcionados para 3 prestadores distintos (designados genericamente de : Prestador A , Prestador B e Prestador C) sendo que nem todos os prestadores estão qualificados para atender pacientes em todos os graus de risco. Vamos supor que seja adotada a seguinte matriz de designação de pacientes a prestadores :

Prestador A : Atende somente o “Plano Grau de Risco I”
Prestador B : Atende “Plano Grau Risco I” e “Plano Grau Risco II” e
Prestador C : Atende “Plano Grau Risco II” e “Plano Grau Risco III”.

Diante desse cenário, o recurso de popular dinamicamente as opções de uma variável combo box em templates poderá ser utilizado de modo que a função de cálculo do “grau de risco dos pacientes” faça a valoração do combo box associado à variável RISKCLASSIFICATION (planos de atenção) de modo a apresentar somente opções válidas de “Prestador / Plano de atenção”.


Nota Geral : O exemplo acima ilustra bem a forma de utilização e o dinamismo que esse tipo de implementação de templates oferece. Embora toda a construção do exemplo tenha sido elaborada em torno da edição de “Planos de atenção” em pacientes do PGDC essa funcionalidade é totalmente genérica e poderá ser utilizada em inúmeras outras situações a critério da sua empresa. Para realizar configuração de novas funcionaldades utilizando-se esse tipo de recurso é necessário que o usuário tenha status de “Administrador” no IW.

 

Tags Especiais - Pré-definidas - Codificadas

Essas tags são processadas diretamente pela camada cliente do IW (código java puro) e implementam conceitos pré-definidos (não customizáveis).

O quadro abaixo apresenta a relação de tag´s pré-definidas codificadas:



Nome da Tag

Sintaxe

Conceito

Prescrição Médica

$PR{}

Contexto de processamento: Somente no Painel de Relatórios semanais (**)

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo todas as prescrições médicas cujas respectivas datas de vigência estejam compreendidas dentro do período que o usuário selecionar no momento da geração do relatório.

Prescrição Médica

somente itens cobrados das seguradoras

$PR_PAYER{}

Contexto de processamento: Somente no Painel de Relatórios semanais (**)

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo todas as prescrições médicas cujas respecitvas abrangências estejam compreendidas dentro do período que o usuário selecionar no momento da geração do relatório. Nota: Somente itens da prescrição médica cuja responsabilidade de pagamento seja = seguradora serão exibidos.

Prescrição de Enfermagem

$NURSE_PR{}

Contexto de processamento: Somente no Painel de Relatórios semanais (**)

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo todas as prescrições de enfermagem cujas respectivas abrangências estejam compreendidas dentro do período que o usuário selecionar no momento da geração do relatório.

Diagnósticos de Enfermagem

$NURSE_DIAGS{}

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo os diagnósticos de enfermagem do paciente. Essa informação independe do período que o usuário seleciona no momento de geração do relatório.

Ranking Home Care

$SCORE{}

A presença dessa tag em um template provoca a substituição da mesma pelas seguintes informações : (a) Escore de classificação e (b) classificação da complexidade do paciente de acordo com o escore técnico adotado pela empresa de home care (exemplo: Nead ou ABMID).

Plano Terapêutico

$PL{}

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo o descritivo do plano terapêutico do paciente (que consiste basicamente na relação de especialidades clínicas com suas respectivas frequências) dentro do período que o usuário selecionar no momento da geração do relatório

Evoluções Clínicas por Especialidade

$E{<Especialidade Profissional>}

Contexto de processamento: Somente no Painel de Relatórios semanais (**)

IMPORTANTE: o nome da especialidade colocada entre as chaves deve ser escrita de forma idêntica ao que especificado no Cadastro de especialidades no SCC. Cuidados devem ser tomados para no cadastro das especialidades não serem inseridos caracteres brancos no início ou no final comprometendo a detecção correta das Tags dentro dos templates. Outro ponto importante: no cadastramento dos nomes das especialidades clínicas no IW : “não devem ser utilizada acentuação”. A presença de acentuação em nomes de especialidades clínicas pode provocar erro no processamento da tag.


Evoluções Clínicas por Template

$EVOL_TEMPLATE{<idTemplate>}

Contexto de processamento: Somente no Painel de Relatórios semanais (**)

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo todas as evoluções clínicas que foram entradas usando-se o template cujo ID foi colocado entre as chaves e cujas respecitvas ocorrencias estejam compreendidas dentro do período que o usuário selecionar no momento da geração do relatorio.

Exemplo: $EVOL_TEMPLATE{15}

A tag acima elenca as evoluções que usaram o template de ID=15 no período selecionado.

Intercorrências

$I{}

Contexto de processamento : relatório semanal  (**) , fichas sintéticas em geral (PGDC, HC, Hospital)

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo todas as Intercorrências clínicas que ocorreram dentro do período de tempo convencionado ou informado pelo usuário no contexto de processamento.

Ocorrências

$EX{}

Contexto de processamento : relatório semanal  (**) , fichas sintéticas em geral (PGDC, HC, Hospital)

A presença dessa tag em um template provoca a substituição da mesma por tabelas contendo todas as Ocorrências clínicas que aconteceram dentro do período de tempo convencionado ou informado pelo usuário no contexto de processamento.

Diagnósticos

$DIAGS{}

A presença dessa tag em um template provoca a substituição da mesma por tabela contendo informações relativas aos diagnósticos registrados no painel de "Informações Monitoramento" para o respectivo paciente. Essa informação independe do período que o usuário seleciona no momento de geração do relatório.

Exames (em relatórios periódicos) (**)

$TEST{}

Contexto de processamento: Somente no Painel de Relatórios semanais (**)

A presença dessa tag em um template provoca a substituição da mesma por tabela contendo informações relativas aos Exames solicitados no painel de "Exames" para o respectivo paciente e cujas requisições estejam compreendidas dentro do período que o usuário selecionar no momento da geração do relatório

Exames (ficha sintética pacientes PGDC)

$RESULT_TESTS{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime PGDC.

Apresenta um quadro com os resultados de exames em um período padronizado correspondente aos últimos 12 meses.

Orçamentos

$BUDGET{}

A presença dessa tag em um template provoca a substituição da mesma por tabela contendo informações relativas aos Orçamentos registrados no painel de " Orçamentos" para o respectivo paciente e cujos inícios estejam compreendidos dentro do período que o usuário selecionar no momento da geração do relatório

 

Medicamentos Usados

$MEDIC_USE{}

A presença dessa tag em um template provoca a substituição da mesma por tabela contendo informações relativas aos Medicamentos Usados registrados no painel "Informações Monitoramento" para o respectivo paciente. Essa informação independe do período que o o usuário seleciona no momento de geração do relatório.

Equipamentos

$EQUIPS{}

A presença dessa tag em um template provoca a substituição da mesma por tabela contendo informações relativas aos Equipamentos Instalados no Domicílio durante o atendimento do respectivo paciente. Essa informação independe do período que o usuário seleciona no momento de geração do relatório.

Data Corrente

$TODAY{}

A presença dessa tag em um template provoca a substituição da mesma pela data corrente.

Data Corrente (com horário)

$TODAY_DATE_TIME{}

A presença dessa tag em um template provoca a substituição da mesma pela data corrente com horário.

Data Corrente (sem apresentar horário)

$TODAY_DATE_ONLY{}

A presença dessa tag em um template provoca a substituição da mesma pela data corrente sem mostrar o horário

Horário Corrente (inclusive segundos)

$TODAY_TIME_ONLY{}

A presença dessa tag em um template provoca a substituição da mesma pelo horário corrente inclusive com os segundos.

Horário Corrente (sem apresentar segundos)

$TODAY_TIME_ONLY_NOSECS{}

A presença dessa tag em um template provoca a substituição da mesma pelo horário corrente (sem apresentar segundos)

Período do Relatório

$REPORT_PERIOD{}

A presença dessa tag em um template provoca a substituição da mesma pelo período de abrangência do relatório.

Esse período é informado pelo usuário no momento da emissão do relatório.

Internações hospitalares de pacientes monitorados.

 

$MONIT_ADMISSIONS{}

Obtém a relação de registros de internação hospitalares realizados “manualmente” através do prontuário eletrônico (acesso pelo painel “histórico de utilização” ou através do sinalizador denominado “Internação” posicionado no cabeçalho da interface de prontuário eletrônico F01039)

Nota técnica : Obtém filtragem de registros com as seguintes características

- colunaeventype” in (2,3,4,5,6,7)
- data início = data corrente – 2 anos
- data fim = data corrente

Importante : Os registros de internações advindos de processos de importação de dados de contas médicas não são considerados no processamento dessa tag.

Quadro Clínico

$DIAG_DESCR{}

Obtém a descrição do quadro clínico do pacientes monitorados.

Aplicável a pacientes de PGDC.

Nota Técnicas o IW irá obter o nome da tabela dinâmica através do parâmetro global (interface 151) denominado “CAP_TD_MONITPROTOCOL” e obterá o valor da coluna denominada “quadroclinico” mais recente que tenha sido registrado no último ano (data corrente – 365 dias).

 

Evoluções clinicas de pacientes do PGDC

$CLINDESC{}

Apresenta uma tabela com uma síntese da descrição das evoluções clínicas registradas durante o último ano (data corrente – 365 dias).

Nota técnica: IW irá obter o nome da tabela dinâmica através do parâmetro global (interface 151) denominado “CAP_TD_MONITPROTOCOL” . O conteúdo da síntese da evolução clínica será formado pela concatenação das colunas denominadas “clinic_descr” e “callproactivedescr” obtidas dos registros com “eventdatedentro do últimos 365 dias.

Grupos de variáveis clínicas (ficha sintética PGDC)

$VARDIN{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Apresenta um quadro organizado com abrangência padronizada igual aos últimos 12 meses com a relação de variáveis clínicas (variáveis que integram os templates dos relatórios de avaliação e evolução clínicas coletadas no monitoramento (PGDC)) previamente configuradas através de : menu – configuração – (6) Cfg Gerenc Crônicos – (08) Cfg Acompanham. Clínico – (1) Cfg Variáveis clínicas. Acesse tópico “
Configurando Grupos de Variáveis Clínicas para Acompanhamento na Ficha Individual do Paciente” para ver os detalhes sobre essa configuração”.

Consultas interdisciplinares realizadas (ficha sintética PGDC)

$CONSULINTER{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Apresenta um quadro com abrangência equivalente aos últimos 12 meses com a marcação dos eventos (consultas interdisciplinares) realizados em cada mês.

Nota: Como “marcadores” são apresentadas as “abreviaturas” de nomes das especialidades clínicas cadastradas no SCC nos respectivos códigos das diferentes especialidades clínicas.

Chamadas de call center pró-ativas realizadas (ficha sintética PGDC)

$CALLDONE{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Apresenta uma tabela com doze colunas (uma coluna referente a cada mês do último ano) com a marcação das chamadas de call center pró ativas realizadas.

Atividades/Orientações formais realizadas (ficha sintética PGDC)

$ACTIVIT_DONE{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Apresenta uma tabela com a marcação das “atividades/orientações formais” realizadas no contexto de monitoramento (PGDC) nos últimos 365 dias

Atividades/Orientações formais programadas (ficha sintética PGDC)

$PROG_ACTIVITIES{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Apresenta uma tabela com a marcação das “atividades/orientações formais” programadas para o pacientes no contexto de monitoramento (PGDC)

Consultas interdisciplinares programadas (ficha sintética PGDC)

$PROG_CONSULT{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Apresenta uma tabela com a marcação das “atividades/orientações formais” programadas para o paciente no contexto de monitoramento (PGDC)

 

Avaliações de especialistas programadas para o paciente (ficha sintética PGDC)

$PROG_AVAL{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Apresenta uma tabela com a marcação das consultas interdisciplinares tipo “avaliação” programadas para o paciente de monitoramento.

Exames solicitados para o paciente (PGDC ou Home Care ou Hospital)

$PROG_TESTS{}

Contexto de processamento : Ficha sintética de pacientes HC, PGDC ou Hospital.

Apresenta uma tabela com a marcação dos exames solicitados para para paciente que ainda não foram realizados ou que foram realizados mas não possuem registro de resultado no prontuário do IW (painel Exames).

Médicos do paciente (ficha sintética PGDC)

$OTHERMEDICS{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Exibe quadro com a relação de médicos de referência do paciente crônico monitorado.

Perguntas Pró-ativas (ficha sintética PGDC)

$QUESTION_DYNAMIC{}

Contexto de processamento : Ficha sintética de pacientes atendidos em regime de monitoramento (PGDC)

Exibe as perguntas pró-ativas ativas para o paciente a serem realizadas nas chamadas de call center pró-ativo.

Foto do paciente (fichas sintéticas PGDC, HC ou Hospital)

PATIENT_PHOTO_URL{}

Baseado no Objeto IwPatient, obtido pelo serviço GetPatient. Utiliza o servidor de aplicação do IW para obter a imagem da foto do paciente.


(**) IMPORTANTE: O conceito de relatórios semanais baseados em templates foi substituído pela funcionalidade que permite a geração de relatórios periódicos em lista baseados em “Dicionário de Dados Clínicos”. As tag´s desenvolvidas para o contexto de “Relatórios Semanais” são mantidas no IW apenas para compatibilidade com versões anteriores.

 

Orientações Técnicas para Edição de Templates

Este documento visa orientar os desenvolvedores de IW-Templates.
Com as informações presentes aqui é possível melhorar a qualidade do código e poupar tempo no processo que vai desde a criação do template até sua colocação em produção.

De modo geral podemos dividir nas seguintes fases o processo de criação de um novo template:

1.      Edição do template

2.      Codificação de BeanShell Scripts (funções plugadas) se necessário

3.      Testes

4.      Colocação em produção



1. Edição de Templates

Usar somente imagens nos formatos .gif, .jpg e .png tanto na elaboração do template como na inserção dinâmica de imagem em tempo de execução do template no IwCare.
Imagens no formato .bmp não são aceitas, pois não podem ser visualizadas nos componentes visuais do IWCARE.

1.      Não usar o editor Word e nem o Frontpage da Microsoft. Eles geram HTML complexo e desnecessário. Isso causa instabilidades nos componentes visuais.
Recomendamos o uso do DreamWeaver (Comercial) ou Nvu (Gratuito).

2.      Cada template pode ser editado em duas versões. Uma para ser usada dentro do IWCare em diversos "paineis" do prontuário (Evoluções Clinicas, Impressos, Exames, Avaliações, etc...) e outra para ser acessada diretamente via browser quando o servidor de aplicações assim o permitir. (Inclusive dispositivos pequenos como PocketPCs, iPhones, etc.

Se o template será acessado apenas dentro do IWCare a Aba "Desktop" do editor de templates precisa ser usada.

Se o template será acessado apenas via Browser apenas a aba "Pocket" precisa ser editada.

Se o template será acessado nos dois contextos (dentro do Iw e Via Browser) as duas abas do editor Desktop" e Pocket precisam ser definidas. As mesmas variáveis (campos de formulário HTML) precisam estar presentes em ambos e com os mesmos nomes (atributo name). Cada um terá um layout adequado ao respectivo uso. Em tese, o layout definido na aba pocket deve ter o seu conteúdo distribuido mais verticalmente para poder ser visualizado de modo adequado nos browsers de dispositivos pequenos como celulares tipo iPhone ou mesmo os diversos modelos de PDA's com browsers embutidos. Mas se o uso do template nesses dispositivos pequenos não for um objetivo, o template na aba pocket pode ter o mesmo layout na aba Desktop sendo observadas apenas algumas diferenças de codificação de templates inerentes a arquitetura de cada tipo de uso e que serão todas elas pontuadas nesse documento.

3.      Todas as Variáveis de Template ( Campos de formulário HTML - Inputs, Selects e Textareas ) precisam ter seus nomes com prefixo "$evol_" e definidos no atributo name da respectiva tag. IMPORTANTE: (a) Não usar o atributo id para essa finalidade, (b) Os nomes das variaveis precisam necessariamente estar em “letras minúscula”. O Atributo id nunca pode estar definido para nenhum dos campos. Alguns editores de HTML, como o DreamWeaver, costumam introduzir automaticamente o atributo id em todos os campos com o mesmo conteúdo do atributo name. Caso isso ocorra esses atributos id inseridos automaticamente precisam ser deletados.

4.      Evitar o uso excessivo de tags FORM em um único template. Procure definir apenas uma TAG FORM sempre que possivel. E quando se tratar de templates editados na aba "Pocket" nenhuma tag FORM pode ser usada.

5.      Todas as variáveis dentro de um mesmo template precisam ter nomes únicos. A presença de variáveis com nomes iguais provoca erros de difícil detecção. ATENÇÃO ESPECIAL DEVE SER TOMADA NESSE SENTIDO. Tanto nomes únicos como o uso do prefixo padrão (item 2) são importantíssimos.

6.      Os campos do tipo <SELECT>, renderizados como combobox nos formulários possuem um atributo especial que somente o IW é capaz de interpretar e que serve para modificar como o IW valora a variável. Esse atributo chama-se iwmode e pode assumir apenas dois valores: positional e value.

Quando esse atributo está com valor igual a positional o editor HTML do IW associa um valor numérico à variável, correspondente ao valor posicional da opção que o usuário selecionou ( começando sempre de zero).
Se existem 4 opções de valores e o usuário selecionou a primeira. O valor numérico zero será atribuído à variável. Caso ele selecione a segunda opção, será atribuído o valor 1 e assim sucessivamente. Esse é o comportamento dafault do Editor do IW caso o atributo iwmode não esteja definido. Isso para mater compatibilidade retroativa com os templates já existentes e que não usam esse novo atributo.

Exemplo de código:

<select name="$evol_fuma" size=1 iwmode="positional">
<option>.</option>
<option>sim</option>
<option>não</option>
</select>

Quando o atributo iwmode="value" o editor do IW associa o valor que estiver colocado no atributo value da TAG <OPTION> que foi selecionada.


No caso acima se o usuário na execução do template selecionar a opção não será atribuído o valor 2 a variável $evol_fuma. mesmo que exista um atributo value presente na tag <option> ele não será levado em consideração. O que vale nesse modo operacional é a posição da resposta na lista de opções.

<select name="$evol_fuma" size=1 iwmode="value">
<option value="126">.</option>
<option value="127>sim</option>
<option value="128">não</option>
</select>

Nesse segundo caso, se o usuário selecionar a opcao sim será atribuida a string "127" à variável $evol_fuma ($evol_fuma="127"), porque "127" é o valor do atributo value da tag option selecionada.

Obs: Esse recurso descrito acima foi implementado em 12/2008.

7.      Os Templates definidos na Aba Pocket não podem ter no seu corpo nenhuma tag Html FORM, apenas definições de campos de formulários.
A Tag FORM nesse caso é adicionada dinamicamente pelo servidor de aplicação quando remete o template para o browser. O servidor devolve todo o conteúdo do template dentro de uma única tag FORM que abraça todos os campos presentes no template.

8.      Não usar mais JOptionPane para exibir mensagens dentro de funções plugadas dos templates. Em síntese,  dentro de funções plugadas é proibido qualquer código java de camada visual. A funcionalidade de envio de mensagens de erro para o usuário deve agora usar variáveis especiais dedicadas a essa funcionalidade. As variaveis são "displayError" e "displayMessage". Elas devem ser colocadas via metodo "put" dentro da HashMap hmHtmlVariables que é único meio de comunicação correto da função plugada com o ambiente externo.

A seguir um exemplo de como fica o código usando-se as variáveis de mensagens:

JOptionPane.showMessageDialog(
ctl.getApp(),
"Valor Inválido");

Deve ficar assim agora:

htmlVariables.put("displayError", "Valor Inválido");

Os templates já desenvolvidos que usam o JOptionPane nao precisam ser alterados, pois antes da execução o IW Templates reescreve essas linhas e as transforma para o novo formato. Mas, de agora em diante, JOptionPane não deve mais ser usado em funções plugadas.

9.      Chamadas de serviço IW dentro de funções plugadas:
Com entrada em produção da versão do IWTemplates que disponibiliza execução de funções plugadas em templates exibidos nos Browsers de Micros e também de PDAs atuais (como iPhones , PocketPcs, etc)
Agora o IwTemplates possibilita a chamada de funções plugadas nas aplicações IWWEB acessadas diretamente via browser de micros ou de dispositivos PDA's
Dentro dessas funções plugadas pode-se chamar serviços para executar comandos SQL.
O seguinte exemplo é deixado como referência para uso.
Usar apenas as classes e metodos mostrados nesse exemplo. Evite usar outras classes e métodos pois não poderão funcionar quando a função plugada for disparada via Palm/Browser.


String cSqlText = "select * from ifrproject " ;

//Calcular data final de filtro no início do proximo mes

Recordset rsParameters = new Recordset();
rsParameters.appendField("idpatient", Field.LONG);
Row rParameters = rsParameters.newRow();
Long idpatient = ( (Long) patient.getAttribValue("idpatient"));
rParameters.getField("idpatient").setValue(idpatient.longValue());


//Executar comando SQL
UserParamRecordset userParam = ctl.getUserParam();
ServiceSubmiter ss = new ServiceSubmiter();
ss.setUrlService(userParam.getUrlService());
ss.setProjectName("BOSetDpcExec");
ss.setClassName("MtsSetExeDpcTable");
ss.setServiceName("ExecuteSQL");
ss.addParameter(new RecordsetParameter("userParam", userParam));
ss.addParameter(new RecordsetParameter("rsParameters",  new Recordset()));
ss.addParameter(new StringParameter("cmdSQL", cSqlText));
Recordset rsResult = ss.submit();

10.  Para favorecer a robustez na apresentação de caracteres acentuados, deve-se preferencialmente utilizar os caracteres acentuados padronizados do html. Exemplo: é = &eacute; ã = &atilde; e assim por diante. Templates redigidos com esse cuidado possuirão menor probabilidade de incidência de erros em processamento de caracteres acentuados.

11.  Todos os templates devem ser intensamente testados antes de serem colocados em produção.
As recomendações de TESTES devem ser rigorosamente seguidas para evitar retrabalhos em tempo de produção.


Exemplos de Código para Funções Plugadas

Exemplos de código para escrever funções plugadas de Consistência em Tenplates:

1.      Exemplo 1:
Testar se uma data é válida

try {
String streventdate = ((String) htmlVariables.get("$evol_eventdate")).trim();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
sdf.parse(streventdate);
htmlVariables.put("ConsistResult", Boolean.TRUE);
}
catch (Exception ex) {
htmlVariables.put("ConsistResult", Boolean.FALSE);
htmlVariables.put("displayError", "Preenchimento inválido da data de Inclusão ou ela deve estar vazia");
return htmlVariables;
}

2.      Exemplo 2:
Testa se uma data é válida e se não é uma data futura em relação à data corrente do servidor:

try {
String streventdate = ((String) htmlVariables.get("$evol_eventdate")).trim();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
java.util.Date d = sdf.parse(streventdate);
Calendar c = Calendar.getInstance();
c.setTime(d);
if (scriptUtil.isFuture(c)) {
throw new Exception("Data Futura - Relativo dia/mes/ano no Servidor");
}
htmlVariables.put("ConsistResult", Boolean.TRUE);
}
catch (Exception ex) {
htmlVariables.put("ConsistResult", Boolean.FALSE);
if (ex instanceof java.text.ParseException) {
htmlVariables.put("displayError", "Data Inclusão Inválida ou não preenchida");
}
else {
htmlVariables.put("displayError", ex.getMessage());
}
return htmlVariables;
}

 

Utilizando Componente “Calendário” para editar campos tipo Data

O exemplo de código html abaixo implementa um campo um campo editável seguido de um botão que gatilha um componente java tipo calendário para edição mais confortável de campos tipo data:

<input disabled="true" name="$evol_eventdate" type="text" size="10" />
<input type="submit" value="IwCalendar" name="$evol_*editarEventDate" />

Nesse template deverá ser declarada a função plugada que irá implementar a chamada do componente tipo de calendário em tempo de edição do template. Essa função, no exemplo de código acima deverá ter nome = “*editar_eventdate” e deverá ter uma única linha de código que é a seguinte:

return scriptUtil.inputDate("Entre com data da Visita","$evol_eventdate", htmlVariables, 0);

A figura a seguir ilustra a declaração dessa função:

http://iw.iwsoftware.com.br:9090/IwHelp/edicaoTemplates_html_m5bf77bb0.jpg


IMPORTANTE: Deverá ser declarada uma função plugada “para cada campo tipo data existente no template”. Lembrando que o nome da função deverá ser ajustado bem como o código da função de modo a endereçar corretamente qual variável será editada pela função. Ou seja, no exemplo acima criamos uma função para edição da variável “$evol_eventdate”, vamos supor que no mesmo template existisse uma outra variável denominada “$evol_data_img_ant” (data da última fotografia da ferida do paciente), nesse caso deveria ser declarada uma outra função denominada “*editar_data_img_ant” cuja linha de código deveria ser = return scriptUtil.inputDate("Entre com data da Visita","$evol_data_img_ant", htmlVariables, 0); .

A imagem a seguir ilustra a imagem desse conjunto no contexto de edição de um template:

http://iw.iwsoftware.com.br:9090/IwHelp/edicaoTemplates_html_m57e29a28.jpg

Quando o usuário clicar no botão (ícone com imagem sugestiva de um calendário) ao lado do campo “Data da Avaliação” ilustrado acima irá aparecer o componente de edição de datas ilustrado logo abaixo.