Upload files to "/"
This commit is contained in:
104
prc_26ai_health_hemograma.sql
Normal file
104
prc_26ai_health_hemograma.sql
Normal file
@@ -0,0 +1,104 @@
|
||||
create or replace procedure prc_26ai_health_hemograma( p_id in number,
|
||||
p_comp_id in varchar2,
|
||||
p_credential in varchar2 default 'OCI_CRED')
|
||||
as
|
||||
/*
|
||||
|
||||
Criado por: fernando.leal@oracle.com
|
||||
Data: Dez/2025
|
||||
Objetivo: demonstrar casos de uso do Oracle AI Database 26ai
|
||||
|
||||
v1 - extrair chunks do hemograma para viabilizar a execucao da funcao de RAG. Tabela TMP: TB_26AI_HEALTH_HEMOGRAMA_TMP
|
||||
|
||||
*/
|
||||
v_hemograma clob := empty_clob();
|
||||
v_chunk VARCHAR2(32767);
|
||||
v_offset INTEGER := 1;
|
||||
v_chunk_size CONSTANT INTEGER := 10000; -- 10 KB
|
||||
v_length INTEGER;
|
||||
v_has number;
|
||||
begin
|
||||
|
||||
select count(1)
|
||||
into v_has
|
||||
from TB_26AI_HEALTH_HEMOGRAMA_TMP
|
||||
where id = p_id;
|
||||
|
||||
if v_has = 0 then
|
||||
|
||||
select replace(replace(replace(replace( dbms_vector_chain.utl_to_text( dt.file_content ) ,chr(10),' '),chr(13),' '),'"',''),'''','')
|
||||
into v_hemograma
|
||||
from TB_26AI_HEALTH_HEMOGRAMA dt
|
||||
where id = p_id;
|
||||
|
||||
-- Tamanho total do texto
|
||||
v_length := dbms_lob.getlength(v_hemograma);
|
||||
|
||||
-- Loop em blocos de 10KB
|
||||
WHILE v_offset <= v_length LOOP
|
||||
|
||||
v_chunk := dbms_lob.substr(
|
||||
v_hemograma,
|
||||
v_chunk_size,
|
||||
v_offset
|
||||
);
|
||||
|
||||
insert into TB_26AI_HEALTH_HEMOGRAMA_TMP
|
||||
WITH dados AS (
|
||||
SELECT FNC_26ai_RAG(
|
||||
'##Você é um sistema de extração de dados laboratoriais.
|
||||
##Tarefa:
|
||||
A partir do texto bruto de um laudo de exames laboratoriais, extraia SOMENTE os exames realizados e seus respectivos valores numéricos com unidades.
|
||||
##Regras obrigatórias:
|
||||
1. Retorne exclusivamente um objeto JSON, e nunca use Markdown como ```json .
|
||||
2. Cada chave deve ser o nome do exame (em português, da mesma maneira que esta no hemograma original).
|
||||
3. Cada valor deve conter apenas o valor do exame + unidade, exatamente como apresentado no laudo.
|
||||
4. Ignore completamente:
|
||||
- Intervalos de referência
|
||||
- Percentuais quando houver valor absoluto equivalente (priorize o valor absoluto)
|
||||
- Dados do paciente, médicos, datas, assinaturas, métodos, gráficos, observações, textos legais e administrativos
|
||||
- Repetições do mesmo exame (considere apenas o resultado mais recente)
|
||||
5. Não faça interpretações clínicas.
|
||||
6. Não normalize valores nem converta unidades.
|
||||
7. Não inclua textos explicativos.
|
||||
8. Não agrupe exames — cada exame deve ser uma entrada independente.
|
||||
9. Caso um exame possua mais de uma medida válida (ex: percentual e absoluto), utilize o valor absoluto com unidade.
|
||||
##Formato de saída (exemplo):
|
||||
{
|
||||
"exames": [
|
||||
["eritrocitos", "4,65 10^6/µL"],
|
||||
["hemoglobina", "14,8 g/dL"],
|
||||
["hematocrito", "43,8 %"],
|
||||
["vcm", "94,3 fL"]
|
||||
...
|
||||
]
|
||||
}
|
||||
##Texto de entrada:' || v_chunk, p_credential, p_comp_id ) json_text
|
||||
)
|
||||
SELECT
|
||||
p_id,
|
||||
v('APP_SESSION'),
|
||||
current_timestamp,
|
||||
v_chunk,
|
||||
jt.exame_nome,
|
||||
jt.exame_valor
|
||||
FROM dados d,
|
||||
JSON_TABLE(
|
||||
d.json_text,
|
||||
'$.exames[*]'
|
||||
COLUMNS (
|
||||
exame_nome VARCHAR2(100) PATH '$[0]',
|
||||
exame_valor VARCHAR2(100) PATH '$[1]'
|
||||
)
|
||||
) jt;
|
||||
|
||||
v_offset := v_offset + v_chunk_size;
|
||||
|
||||
END LOOP;
|
||||
|
||||
end if; -- if v_has = 0 then
|
||||
|
||||
commit;
|
||||
|
||||
end;
|
||||
/
|
||||
Reference in New Issue
Block a user