Upload files to "/"

This commit is contained in:
2026-05-08 13:12:00 +00:00
parent 37db2e049d
commit 8c40a71b6e
5 changed files with 489 additions and 0 deletions

View 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;
/