mirror of
https://github.com/hoshikawa2/select_ai.git
synced 2026-03-03 16:09:38 +00:00
Adjustments
This commit is contained in:
156
README.md
156
README.md
@@ -215,111 +215,145 @@ Comentários ajudam o LLM a entender o domínio (descrições de tabelas/colunas
|
||||
|
||||
```sql
|
||||
COMMENT ON TABLE DATASET_ED_ADMISSION IS
|
||||
'Tabela de pacientes do pronto-socorro / ER patients admission table';
|
||||
'Tabela de pacientes que deram entrada no pronto-socorro / ER patients admission table';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.subject_id IS
|
||||
'Patient ID / ID do paciente (unique identifier)';
|
||||
'Patient ID / ID do paciente (unique identifier)';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.hadm_id IS
|
||||
'Hospital admission ID / ID da internação hospitalar (NULL if not admitted)';
|
||||
'Hospital admission ID / ID da internação hospitalar (NULL if not admitted)';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.stay_id IS
|
||||
'ER stay ID / ID da estadia no pronto-socorro';
|
||||
'ER stay ID / ID da estadia no pronto-socorro, ou o mesmo que o ID de internação';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.intime IS
|
||||
'ER entry timestamp / Data-hora de entrada no pronto-socorro (use EXTRACT(MONTH) for month filter)';
|
||||
'ER entry timestamp / Data-hora de entrada no pronto-socorro (use EXTRACT(MONTH) for month filter)';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.outtime IS
|
||||
'ER discharge timestamp / Data-hora de saída do pronto-socorro';
|
||||
'ER discharge timestamp / Data-hora de saída do pronto-socorro';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.gender IS
|
||||
'Gender (M/F) / Sexo (M/F)';
|
||||
'Gender (Male or M/Female or F) / Sexo (Masculino ou M/Feminino ou F)';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.race IS
|
||||
'Race/Ethnicity / Raça ou etnia do paciente';
|
||||
'Race/Ethnicity / Raça ou etnia do paciente';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.arrival_transport IS
|
||||
'Arrival transport mode (ambulance, walk) / Forma de chegada (ambulância, caminhada)';
|
||||
'Arrival transport mode (ambulance, walk) / Forma de chegada (ambulância, caminhada)';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.disposition IS
|
||||
'Disposition after ER (ADMITTED, HOME, etc.) / Destino após atendimento';
|
||||
'Disposition after ER (ADMITTED, HOME, etc.) / Destino após atendimento';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.admitted_from_ed IS
|
||||
'Hospitalized from ER (1=yes, 0=no) / Internado a partir do pronto-socorro';
|
||||
'Hospitalized from ER (1=yes, 0=no) / Internado a partir do pronto-socorro (1=internação/0=Sem internação)';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.temperature IS
|
||||
'Body temperature (Celsius) / Temperatura corporal';
|
||||
'Body temperature (Celsius) / Temperatura corporal';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.heartrate IS
|
||||
'Heart rate (bpm) / Frequência cardíaca';
|
||||
'Heart rate (bpm) / Frequência cardíaca';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.resprate IS
|
||||
'Respiratory rate (breaths/min) / Frequência respiratória';
|
||||
'Respiratory rate (breaths/min) / Frequência respiratória';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.o2sat IS
|
||||
'Oxygen saturation (SpO2) / Saturação de oxigênio';
|
||||
'Oxygen saturation (SpO2) / Saturação de oxigênio';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.sbp IS
|
||||
'Systolic blood pressure / Pressão arterial sistólica';
|
||||
'Systolic blood pressure / Pressão arterial sistólica';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.dbp IS
|
||||
'Diastolic blood pressure / Pressão arterial diastólica';
|
||||
'Diastolic blood pressure / Pressão arterial diastólica';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.n_diagnosis IS
|
||||
'Number of diagnoses / Número de diagnósticos registrados';
|
||||
'Number of diagnoses / Número de diagnósticos registrados';
|
||||
|
||||
COMMENT ON COLUMN DATASET_ED_ADMISSION.split IS
|
||||
'Data split flag (train, val, test) / Particionamento dos dados';
|
||||
'Data split flag (train, val, test) / Particionamento dos dados';
|
||||
```
|
||||
|
||||
### 5.6 Criar uma view para NL com nomes claros
|
||||
|
||||
Esta view, mais amigável, facilitará a LLM do banco de dados a entender mais facilmente os campos.
|
||||
|
||||
Vista no schema atual (quando estiver em ADMIN):
|
||||
|
||||
```sql
|
||||
CREATE OR REPLACE VIEW MEU_USUARIO.NLU_ED_ADMISSION AS
|
||||
SELECT
|
||||
subject_id AS patient_id,
|
||||
hadm_id AS admission_id,
|
||||
stay_id AS er_stay_id,
|
||||
intime AS er_entry_time,
|
||||
outtime AS er_exit_time,
|
||||
gender, race, arrival_transport, disposition,
|
||||
admitted_from_ed AS admitted,
|
||||
temperature, heartrate, resprate, o2sat, sbp, dbp,
|
||||
n_diagnosis, split,
|
||||
EXTRACT(MONTH FROM intime) AS month_num,
|
||||
EXTRACT(YEAR FROM intime) AS year_num
|
||||
FROM ADMIN.DATASET_ED_ADMISSION;
|
||||
```
|
||||
|
||||
E uma view equivalente no schema do usuário (recomendado para consumo pelo app):
|
||||
Criar uma view no schema do usuário (recomendado para consumo pelo app):
|
||||
|
||||
```sql
|
||||
-- execute no MESMO schema usado pelo SELECT AI (ex.: MEU_USUARIO)
|
||||
CREATE OR REPLACE VIEW MEU_USUARIO.NLU_ED_ADMISSION AS
|
||||
SELECT
|
||||
subject_id AS patient_id,
|
||||
hadm_id AS admission_id,
|
||||
stay_id AS er_stay_id,
|
||||
intime AS er_entry_time,
|
||||
outtime AS er_exit_time,
|
||||
gender, race, arrival_transport, disposition,
|
||||
admitted_from_ed AS admitted, -- 1/0
|
||||
temperature, heartrate, resprate, o2sat, sbp, dbp,
|
||||
n_diagnosis, split,
|
||||
EXTRACT(MONTH FROM intime) AS month_num,
|
||||
EXTRACT(YEAR FROM intime) AS year_num
|
||||
subject_id AS patient_id, -- ID do paciente
|
||||
hadm_id AS admission_id, -- ID da internação (NULL se não internado)
|
||||
stay_id AS er_stay_id, -- ID da estadia no PS
|
||||
intime AS er_entry_time, -- data/hora de entrada no PS
|
||||
outtime AS er_exit_time, -- data/hora de saída do PS
|
||||
gender,
|
||||
race,
|
||||
arrival_transport,
|
||||
disposition, -- ADMITTED, HOME, etc.
|
||||
admitted_from_ed AS admitted, -- 1=internado, 0=não
|
||||
temperature,
|
||||
heartrate,
|
||||
resprate,
|
||||
o2sat,
|
||||
sbp,
|
||||
dbp,
|
||||
n_diagnosis,
|
||||
split,
|
||||
EXTRACT(MONTH FROM intime) AS month_num, -- 1..12
|
||||
TO_CHAR(intime, 'fmMonth', 'NLS_DATE_LANGUAGE=PORTUGUESE') as month_name,
|
||||
EXTRACT(YEAR FROM intime) AS year_num -- ano numérico
|
||||
FROM ADMIN.DATASET_ED_ADMISSION;
|
||||
|
||||
COMMENT ON TABLE MEU_USUARIO.NLU_ED_ADMISSION IS 'ER admissions with friendly names for NL queries / Tabela para NL';
|
||||
COMMENT ON COLUMN NLU_ED_ADMISSION.patient_id IS 'Patient ID / ID do paciente';
|
||||
COMMENT ON COLUMN NLU_ED_ADMISSION.admitted IS 'Hospitalized from ER (1=yes, 0=no) / Internado a partir do PS';
|
||||
COMMENT ON COLUMN NLU_ED_ADMISSION.er_entry_time IS 'ER entry timestamp / Entrada no PS';
|
||||
COMMENT ON COLUMN NLU_ED_ADMISSION.month_num IS 'Month number (1..12)';
|
||||
COMMENT ON COLUMN NLU_ED_ADMISSION.year_num IS 'Year';
|
||||
COMMENT ON TABLE MEU_USUARIO.NLU_ED_ADMISSION IS 'Tabela de Internações de pacientes que deram entrada no pronto-socorro com nomes de campos amigaveis para consultas em linguagem natural';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.gender IS
|
||||
'Genero (Masculino ou M/Feminino ou F)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.race IS
|
||||
'Raça ou etnia do paciente';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.arrival_transport IS
|
||||
'Forma de chegada (ambulância, caminhada)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.disposition IS
|
||||
'Destino após atendimento (ADMITTED=Internados/Internado, HOME=Dispensados/Dispensado/Sem Internação/Sem Internações, TRANSFER=Transferido/Transferidos)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.temperature IS
|
||||
'Temperatura corporal (celsius)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.heartrate IS
|
||||
'Frequência cardíaca em BPM';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.resprate IS
|
||||
'Frequência respiratória (respiração/minuto)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.o2sat IS
|
||||
'Saturação de oxigênio (SpO2)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.sbp IS
|
||||
'Pressão arterial sistólica';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.dbp IS
|
||||
'Pressão arterial diastólica';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.n_diagnosis IS
|
||||
'Número de diagnósticos registrados';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.split IS
|
||||
'Particionamento dos dados (train, val, test)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.patient_id IS 'ID do paciente';
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.admitted IS 'Admitted indica se Paciente foi Internado (1=Internado/0=Não Internado)';
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.er_entry_time IS 'Data de Entrada no pronto-socorro';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.month_num IS
|
||||
'Número do mês da entrada no PS / Mês (1=Janeiro, 2=Fevereiro, 3=Março, 4=Abril, 5=Maio, 6=Junho, 7=Julho, 8=Agosto, 9=Setembro, 10=Outubro, 11=Novembro, 12=Dezembro)';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.month_name IS
|
||||
'Nome do mês de entrada do paciente no PS (ex.: Janeiro, Fevereiro, Março, ...). Use para exibição; para filtros, prefira month_num e year_num.';
|
||||
|
||||
COMMENT ON COLUMN MEU_USUARIO.NLU_ED_ADMISSION.year_num IS 'Ano de Entrada no pronto-socorro';
|
||||
```
|
||||
|
||||
>**Por que?** Nomes como patient_id, admitted, month_num facilitam a tradução NL→SQL e evitam ambiguidade.
|
||||
@@ -370,9 +404,13 @@ python app_select_ai.py
|
||||
|
||||
### Acessando a aplicação
|
||||
Abra `http://localhost:5001` e faça perguntas como:
|
||||
- “comparar risco de internacao de pacientes”
|
||||
- “quantos pacientes chegaram no hospital”
|
||||
- “mostrar pacientes e suas pressoes arteriais acima de 120 80”
|
||||
- quantos pacientes chegaram no hospital
|
||||
- mostrar pacientes e suas pressoes arteriais acima de 120 80
|
||||
- quantos pacientes deram entrada no hospital no mes "Junho"
|
||||
- quantos pacientes do genero F
|
||||
- quantos pacientes do genero M que tenham pressao acima de 120 80
|
||||
- listar pacientes do genero M com todos os seus dados de mediçao que tenham pressao acima de 120 80
|
||||
- quantos pacientes internados no hospital por genero
|
||||
|
||||
### Exportar resultados
|
||||
- **PDF**: botão “Exportar PDF”.
|
||||
|
||||
@@ -262,7 +262,7 @@ PAGE = """
|
||||
<div class="footer">
|
||||
<form class="ask" method="post" onsubmit="markScrollToBottom()">
|
||||
<input type="text" name="frase" placeholder="Faça sua pergunta… (Enter para enviar)" required>
|
||||
<input type="text" name="tabela" value="{{ default_table }}">
|
||||
<input type="text" name="tabela" value="{{ default_table }}" style="display:none;">
|
||||
<button type="submit">Enviar</button>
|
||||
</form>
|
||||
<div class="muted" style="margin-top:6px">Dica: cite colunas (ex.: <code>admitted</code>, <code>month_num</code>, <code>year_num</code>) para respostas mais precisas.</div>
|
||||
|
||||
Reference in New Issue
Block a user