mirror of
https://github.com/hoshikawa2/select_ai.git
synced 2026-03-06 02:10: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
|
```sql
|
||||||
COMMENT ON TABLE DATASET_ED_ADMISSION IS
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
### 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.
|
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):
|
Criar uma view no schema do usuário (recomendado para consumo pelo app):
|
||||||
|
|
||||||
```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):
|
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
-- execute no MESMO schema usado pelo SELECT AI (ex.: MEU_USUARIO)
|
-- execute no MESMO schema usado pelo SELECT AI (ex.: MEU_USUARIO)
|
||||||
CREATE OR REPLACE VIEW MEU_USUARIO.NLU_ED_ADMISSION AS
|
CREATE OR REPLACE VIEW MEU_USUARIO.NLU_ED_ADMISSION AS
|
||||||
SELECT
|
SELECT
|
||||||
subject_id AS patient_id,
|
subject_id AS patient_id, -- ID do paciente
|
||||||
hadm_id AS admission_id,
|
hadm_id AS admission_id, -- ID da internação (NULL se não internado)
|
||||||
stay_id AS er_stay_id,
|
stay_id AS er_stay_id, -- ID da estadia no PS
|
||||||
intime AS er_entry_time,
|
intime AS er_entry_time, -- data/hora de entrada no PS
|
||||||
outtime AS er_exit_time,
|
outtime AS er_exit_time, -- data/hora de saída do PS
|
||||||
gender, race, arrival_transport, disposition,
|
gender,
|
||||||
admitted_from_ed AS admitted, -- 1/0
|
race,
|
||||||
temperature, heartrate, resprate, o2sat, sbp, dbp,
|
arrival_transport,
|
||||||
n_diagnosis, split,
|
disposition, -- ADMITTED, HOME, etc.
|
||||||
EXTRACT(MONTH FROM intime) AS month_num,
|
admitted_from_ed AS admitted, -- 1=internado, 0=não
|
||||||
EXTRACT(YEAR FROM intime) AS year_num
|
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;
|
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 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 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 MEU_USUARIO.NLU_ED_ADMISSION.gender IS
|
||||||
COMMENT ON COLUMN NLU_ED_ADMISSION.er_entry_time IS 'ER entry timestamp / Entrada no PS';
|
'Genero (Masculino ou M/Feminino ou F)';
|
||||||
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 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.
|
>**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
|
### Acessando a aplicação
|
||||||
Abra `http://localhost:5001` e faça perguntas como:
|
Abra `http://localhost:5001` e faça perguntas como:
|
||||||
- “comparar risco de internacao de pacientes”
|
- quantos pacientes chegaram no hospital
|
||||||
- “quantos pacientes chegaram no hospital”
|
- mostrar pacientes e suas pressoes arteriais acima de 120 80
|
||||||
- “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
|
### Exportar resultados
|
||||||
- **PDF**: botão “Exportar PDF”.
|
- **PDF**: botão “Exportar PDF”.
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ PAGE = """
|
|||||||
<div class="footer">
|
<div class="footer">
|
||||||
<form class="ask" method="post" onsubmit="markScrollToBottom()">
|
<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="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>
|
<button type="submit">Enviar</button>
|
||||||
</form>
|
</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>
|
<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