Análise do projeto ph.app.br
- Análise do projeto ph.app.br
- Infraestrutura necessária
- Definição do banco de dados Assistente_Virtual
- Estudar como o site OpenAI pode ajudar a criar o Assistant API da OpenAI
- Criar API de comunicação com o banco de dados
- Banco de Dados de Informações Adicionais
- Testes e Validação:
- Documentação e Treinamento:
- Manutenção e Atualização Contínua:
Infraestrutura necessária
- Criar máquina virtual LinuxMint-ph com tudo que precisamos para o projeto;
-
Criar usuário phdemelo e dar permissões de administrador; ✅
- adm
- cdrom
- dip
- lpadmin
- phpaulo
- plugdev
- sambashare
- sudo
- xrdp
-
Instalar xrdp e abrir para acesso publico para poder operar quando não estivermos próximo ao servidor. ✅
-
Ao tentar compartilhar para acesso publico tive que contratar um IP fixo 45.160.125.12 e contratar o plano 300 mega da Smart Soluções; ✅
-
Instalar PostgresSQL e abrir para acesso publico; ✅
-
Criar o banco de dados assistente_virtual; ✅
- Criar documento: Como trocar a senha do banco postgreSQL no linux caso se esqueça?
-
Fazer backup do banco de dados assistente_virtual.
-
Instalar cliente de banco de dados dbeaver-ce para executar os script sql do projeto na criação e manutenção do banco de dados. ✅
-
Instalar Servidor Web Apache2 e abrir para acesso publico para poder publicar os Serviço Rest para que a IA tenha acesso;
-
Instalar IDE Lazarus e o compilador free pascal para criar programas de cadastros e relatórios das tabelas do banco de dados. ✅
-
Criar Serviço Rest para comunicar-se com a inteligência artificial.
-
Instalar o interpretador python para estudo do Paulo Henrique; ✅
-
Compartilhar a pasta user/local/Lazarus para que eu possa usar na minha máquina a mesma versão do Lazarus que vou usar na máquina do Paulo Henrique. ✅
-
Definição do banco de dados Assistente_Virtual
-
operadores //Pode ser a secretária virtual
- id // tipo Integer serial
- nome // String com 50 posições não pode ser nulo
- login // String com 50 posições paulosspacheco@yahoo.com.br
- password // String com 50 posições
- telefone : // String com 20 posições
-
hospitais
- id // tipo Integer serial
- nome // String com 50 posições pode ser nulo
- telefone // String com 20 posições pode ser nulo
-
status_da_agenda_ou_consulta
- id // tipo Integer serial
- nome // String com 20 posições pode ser nulo
-
médicos
- id // tipo Integer serial
- id_operadores //Tipo Integer
- nome // String com 50 posições pode ser nulo
- telefone // String com 25 posições pode ser nulo
- telefone_da_secretaria // String com 25 posições pode ser nulo
- login // String com 50 posições pode ser nulo
- se>nha // String com 20 posições pode ser nulo
-
serviço_de_agendas
- id // tipo Integer serial
- id_operador // tipo Integer
- nome // String com 100 posições pode ser nulo
- login // String com 50 posições pode ser nulo
- senha // String com 50 posições pode ser nulo
-
convênios
- id // tipo Integer serial
- id_médico // tipo Integer
- nome // String com 50 posições pode ser nulo
- login // String com 50 posições pode ser nulo
- senha // String com 50 posições pode ser nulo
-
clientes
- id // tipo Integer serial
- nome // String com 50 posições. Obs: Não pode ser nulo
- telefone_whatsApp;// String com 25 posições. Obs: pode ser nulo
- e_mail // String com 50 posições e pode ser nulo
- login // String com 50 posições e não pode ser nulo
- senha // String com 20 posições e não pode ser nulo
- id_convênio // tipo Integer pode ser nulo
- dataTime_disponível // Tipo da data e pode ser nulo. Obs: Usado para pesquisar na agenda uma data mais próxima
- matricula_no_convênio // String com 50 posições e pode ser nulo.
-
integração // Usado para ser logar
- id // tipo Integer serial
- endereço_do_site // String com 255 posições e não pode ser nulo
- login // String com 50 posições e não pode ser nulo. Obs: Login para acessar o endereço_do_site
- senha // String com 20 posições e não pode ser nulo. Obs: Senha para acessar o endereço_do_site
- status // Campo lógico e não pode ser nulo Obs: Usado para saber o se o site está conectado
-
expediente_do_medico_data // Chave múltipla id_medico+Data
- id // tipo Integer serial
- id_medico // tipo Integer e não pode ser nulo
- dataTime // tipo data e não pode ser nulo
-
expediente_do_medico_horas // Chave múltipla id_medico+Data+Hora_inicial
- id_expediente_do_medico_data // tipo Integer e não pode ser nulo
- dataTime_inicial // Data e Hora inicial do expediente do médico e não pode ser nulo
- dataTime_final // Data e Hora final do expediente do médico e não pode ser nulo
-
agenda
- id // tipo Integer serial
- id_Medico // tipo Integer e não pode ser nulo
- id_Cliente // tipo Integer e não pode ser nulo
- dataTime // Data e hora prevista da consulta e não pode ser nulo
- dataTime_confirmação // Data e hora da confirmação da consulta e não pode ser nulo
- id_convênio //tipo Integer e pode ser nulo caso id_formas_de_pagamento não for nulo.
- id_status_da_agenda_ou_consulta //tipo Integer e não pode ser nulo
- id_formas_de_pagamento //tipo Integer e pode ser nulo caso id_convênio não for nulo.
- dataTime // Data e hora em que a agenda foi criada e não pode ser nulo
- observações // String com 255 posições e pode ser nulo
-
formas_de_pagamento
- id // tipo Integer serialNatureza
- Nome // String com 30 posições e não pode ser nulo. Obs: Pode ser: 0 - Dinheiro; 1 - Pix; 2 - Convênio; 3 - Cartão de debito; 4 - Catão de credito Mastercard; 5 - Catão de credito Visa; etc....
-
consulta //Usado para baixar baixar a agenda
- id // tipo Integer serial
- id_agenda // tipo Integer e pode ser nulo. Obs: Uma consulta não é obrigado ter agenda.
- id_cliente // tipo Integer e não pode ser nulo.
- id_medico // tipo Integer e não pode ser nulo.
- dataTime // Data e hora da consulta e não pode ser nulo
- id_convênio // tipo Integer e pode ser nulo. Obs: Uma consulta não é obrigado ter convênio
- id_forma_de_pagamento // tipo Integer e pode ser nulo se id_convênio não for nulo.
- id_status_da_agenda_ou_consulta // tipo Integer e não pode ser nulo
- Observação // String com 255 posições e pode ser nulo
Estudar como o site OpenAI pode ajudar a criar o Assistant API da OpenAI
-
Checar se é possível comunicar-se com a IA usando o compilador free pascal; ✅
- Nota:
- Projeto CHATGPT criado por Marcelo Maurin Martins e está disponível no github;
- Projeto DelphiOpenAI criado por HemulGM com licença MIT.
- Nota:
-
A IA precisa de chave de autenticação onde a mesma pode ser adquirida aqui;
-
A IA comunica-se com o programa por meio de prompts, usando a linguagem JSON para receber um pedido do usuário e a resposta é retornada com outro JSON com dados que o programa precisa para continuar o diálogo.
-
Exemplo 01:
-
Vamos criar algumas especificações de função para fazer interface com uma API climática hipotética.
- Passaremos essas especificações de função para a API de conclusões de bate-papo para gerar argumentos de função que sigam a especificação.
tools = [ { "type": "function", "function": { "name": "get_current_weather", "description": "Obtenha o clima atual", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "A cidade e o estado, por ex. São Francisco, Califórnia", }, "format": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "A unidade de temperatura a ser usada. Inferir isso a partir da localização dos usuários.", }, }, "required": ["location", "format"], }, } }, { "type": "function", "function": { "name": "get_n_day_weather_forecast", "description": "Obtenha uma previsão do tempo para N dias", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "A cidade e o estado, por ex. São Francisco, Califórnia", }, "format": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "A unidade de temperatura a ser usada. Inferir isso a partir da localização dos usuários.", }, "num_days": { "type": "integer", "description": "O número de dias para previsão", } }, "required": ["location", "format", "num_days"] }, } }, ]
-
-
Exemplos:
- Linguagem python:
-
-
Referências:
- api-reference
- developer-quickstart
- Introduction API OpenAi
- Developer-quickstart
- python-library
- typescript-javascript-library
- community.openai.com
- step-1-setup-curl
- Adding your API client to the Community Libraries page
- Melhores práticas para engenharia imediata com API OpenAI
- Referência da API - Solicitar corpo
- Como contar tokens com tiktoken
- DelphiOpenAI
- incrível-chatgpt
- Obs:
- Esse documento mostrou-me:
- Biblioteca DelphiOpenAI completa para comunicação com chatgpt,
- Dicas sobre chatgpt-prompts
- Esse documento mostrou-me:
- Obs:
- .
Criar API de comunicação com o banco de dados
-
Tecnologias usadas no projeto:
- Linguagem free pascal
- IDE Lazarus
- Pacotes
- LCL
- Para edição de formulários gráficos
- fcl-web
- Para comunicação com protocolo HTTP
- Maricarai
- Para criação de formulários LCL e HTML
- CHATGPT-main
- Usado para comunicação com chatgpt
- LCL
- Linguagem javascript
- Editor VsCode
- Usado para editar o javascript que vou usar na IDE Lazaros
- Editor VsCode
- Objeto JSON
- Editor VsCode
- Usado para editar o JSON que vou usar na IDE Lazaros
- Editor VsCode
- Python
- Editor VsCode
- Só prendendo usar essa linguagem caso não consiga fazer com pascal.
- Editor VsCode
- Linguagem free pascal
-
Criar pasta avm onde A=Assistente, V=Virtual e M=Médicos
- Criar pasta avm/dm onde D=Data e M=module ✅
- Nesta pasta deve ser registrada todo processamento que não dependa de componentes visuais;
-
Criar datamodule DM_Connections para concentrar as conexões com o banco de dados;
- Este módulo deve deve conter os seguintes componentes com suas respectivas propriedades definidas abaixo:
- SQLTransaction1 - Este componente é usado para definir o banco de dados a ser usado; ✅
- Name: 'SQLConnector1'; ✅
- ConnectorType : 'PostGresSQL'; ✅
- DataBaseName : 'assistente_virtual'; ✅
- Nota: O nome do database é sensível as letras maiúsculas e minusculas. ✅
- HostName:'45.160.125.12'; ✅
- UserName: postgres; ✅
- Password:'masterkey'; ✅
- LoginPrompt : 'true'; ✅
- Nota : Usado parar informa ao programa se o formulário pedindo o username e password deve ser executado;
- Transaction : 'SQLTransaction1'; ✅
- SQLTransaction1 - Transação na qual um TSQLQuery é tratado;
- Name : 'SQLTransaction1';
- DataBase: 'SQLConnector1';
- SQLQuery1 - Classe para lidar com comandos SQL (com ou sem conjunto de resultados);
- Name : SQLQuery1;
- SQLTransaction1 - Este componente é usado para definir o banco de dados a ser usado; ✅
- Este módulo deve deve conter os seguintes componentes com suas respectivas propriedades definidas abaixo:
-
Criar datamodule DM_operador para consultas para incluir, alterar e excluir a tabela de operadores;
-
Criar datamodule DM_hospitais para consultas para incluir, alterar e excluir a tabela de hospitais;
-
Criar datamodule DM_status_da_agenda_ou_consulta para consultas para incluir, alterar e excluir a tabela de status_da_agenda_ou_consulta;
-
Criar datamodule DM_medicos para consultas para incluir, alterar e excluir a tabela de médicos;
-
Criar datamodule DM_serviço_de_agendas para consultas para incluir, alterar e excluir a tabela de serviço_de_agendas;
-
Criar datamodule DM_convenios para consultas para incluir, alterar e excluir a tabela de convênios;
-
Criar datamodule DM_clientes para consultas para incluir, alterar e excluir a tabela de clientes;
-
Criar datamodule DM_integracao para consultas para incluir, alterar e excluir a tabela de integração ;
-
Criar datamodule DM_expediente_do_medico_data para consultas para incluir, alterar e excluir a tabela de expediente_do_medico_data ;
-
Criar datamodule DM_expediente_do_medico_horas para consultas para incluir, alterar e excluir a tabela de expediente_do_medico_horas;
-
Criar datamodule DM_agenda para consultas para incluir, alterar e excluir a tabela de agenda;
-
Criar datamodule DM_formas_de_pagamento para consultas para incluir, alterar e excluir a tabela de formas_de_pagamento;
-
Criar datamodule DM_consulta para consultas para incluir, alterar e excluir a tabela de consulta;
-
Criar datamodule DM_Main para concentrar todos os datamodule do projeto;
-
- Nesta pasta deve ser registrada todo processamento que não dependa de componentes visuais;
- Criar pasta avm/dm onde D=Data e M=module ✅
-
Criar pasta lcl onde L=Lazarus, C=Component e L=Library
- Criar pasta avm/lcl
- Criar projeto de nome avm_lcl;
- Criar pasta avm/lcl/units
- Nesta pasta deve ficar todos os formulários que dependem do pacote lcl
-
Criar formulário TForm_Main para edição de todos os formulário do projeto:
-
Criar formulário TForm_model para o modelo básico de um formulário CRUD que possa ser herdado;
- Adicionar os componentes: (obs: Checar se posso aproveitar o form básico que criei para o gcic vcl.)
- Class Panel;
- Class Menu;
- OnEventLogin;
- OnEvent????
- Criar menu de opções
- Adicionar os componentes: (obs: Checar se posso aproveitar o form básico que criei para o gcic vcl.)
-
Criar formulário modelo básico de um formulário crud mestre/detalhe que possa ser herdado;
- Pensar....
-
Criar formulário _TForm_operado_r edição da tabela de operadores;
-
Criar formulário TForm_hospitais edição da tabela de hospitais;
-
Criar formulário TForm_status_da_agenda_ou_consulta edição da tabela de status_da_agenda_ou_consulta;
-
Criar formulário TForm_medicos edição da tabela de médicos;
-
Criar formulário TForm_serviço_de_agendas edição da tabela de serviço_de_agendas;
-
Criar formulário TForm_convenios edição da tabela de convênios;
-
Criar formulário TForm_clientes edição da tabela de clientes;
-
Criar formulário TForm_integracao edição da tabela de integração ;
-
Criar formulário TForm_expediente_do_medico_data edição da tabela de expediente_do_medico_data ;
-
Criar formulário TForm_expediente_do_medico_horas edição da tabela de expediente_do_medico_horas;
-
Criar formulário TForm_agenda edição da tabela de agenda;
-
Criar formulário TForm_formas_de_pagamento edição da tabela de formas_de_pagamento;
-
Criar formulário TForm_consulta edição da tabela de consulta;
-
- Nesta pasta deve ficar todos os formulários que dependem do pacote lcl
- Criar pasta avm/lcl
-
Criar programa para coletar as informações do paciente
-
Obs?
- Quais textos utilizar para interagir com o cliente no WhatsApp?
- Podemos usar a IA para textos humanizados.
- Outras forma é fazer perguntas e o cliente responde com o número da opção.
- Quais textos utilizar para interagir com o cliente no WhatsApp?
-
Cadastros necessários para comunicar-se com os clientes:
- Medico
- Convênio
- Serviço_de_agendas
- Integração
- Expediente_do_medico_data
- Expediente_do_medico_horas
-
Criar programa para confirmações de consultas.
- Cadastros atualizados aqui:
- clientes
- Agenda
- Disponibilidade_do_Paciente
- Cadastros atualizados aqui:
-
Confirmação de Consultas: 1. Utilize a API do WhatsApp para enviar 2. Implementar a API de voz da OpenAI para fazer chamadas de voz automatizadas para confirmação de consultas.
-
Banco de Dados de Informações Adicionais
- Criar um banco de dados adicional para armazenar informações sobre convênios, preços de consultas e hospitais onde o médico atende.
Testes e Validação:
- Realizar testes abrangentes para garantir o funcionamento adequado de todas as funcionalidades.
Documentação e Treinamento:
- Preparar documentação detalhada e oferecer treinamento para o médico e a equipe sobre o uso da secretária virtual.
Manutenção e Atualização Contínua:
- Criar um plano de manutenção e atualização para manter a segurança, eficiência e compatibilidade do sistema.