processar.php — leitura técnica completa

sistema/painel/paginas/analises/processar.php
Endpoint que lê a foto da análise, consulta configurações e chama a IA para preencher o diagnóstico.

AnálisesEndpoint de processamento IA355 linhas

Responsabilidade do arquivo

Endpoint que lê a foto da análise, consulta configurações e chama a IA para preencher o diagnóstico.

Dependências observadas:
Conexão PDO / configurações globaisOpenAIResposta JSONBanco de dados

Tipo

Endpoint de processamento IA

Grupo

Análises

Total de linhas

355

Código completo

1<?php 2header('Content-Type: application/json; charset=utf-8'); 3require_once("../../../conexao.php"); 4 5$tabela = 'analise_capilar'; 6$id = @$_POST['id']; 7 8if($id == ""){ 9 echo json_encode(array( 10 'status' => 'Erro', 11 'mensagem' => 'ID não informado' 12 ), JSON_UNESCAPED_UNICODE); 13 exit(); 14} 15 16$query = $pdo->prepare("SELECT * FROM $tabela WHERE id = :id LIMIT 1"); 17$query->bindValue(":id", $id); 18$query->execute(); 19$res = $query->fetchAll(PDO::FETCH_ASSOC); 20 21if(@count($res) == 0){ 22 echo json_encode(array( 23 'status' => 'Erro', 24 'mensagem' => 'Registro não encontrado' 25 ), JSON_UNESCAPED_UNICODE); 26 exit(); 27} 28 29$foto = trim(@$res[0]['foto']); 30$grau_falha_banco = trim(@$res[0]['grau_falha']); 31 32if($foto == ""){ 33 echo json_encode(array( 34 'status' => 'Erro', 35 'mensagem' => 'Nenhuma foto enviada para análise' 36 ), JSON_UNESCAPED_UNICODE); 37 exit(); 38} 39 40$pasta = __DIR__ . '/../../images/analises/'; 41$caminho_foto = $pasta . $foto; 42 43if(!is_dir($pasta)){ 44 echo json_encode(array( 45 'status' => 'Erro', 46 'mensagem' => 'Pasta de imagens da análise não encontrada' 47 ), JSON_UNESCAPED_UNICODE); 48 exit(); 49} 50 51if(!file_exists($caminho_foto)){ 52 echo json_encode(array( 53 'status' => 'Erro', 54 'mensagem' => 'Arquivo da foto não encontrado' 55 ), JSON_UNESCAPED_UNICODE); 56 exit(); 57} 58 59if(!is_file($caminho_foto)){ 60 echo json_encode(array( 61 'status' => 'Erro', 62 'mensagem' => 'Arquivo inválido para análise' 63 ), JSON_UNESCAPED_UNICODE); 64 exit(); 65} 66 67$query2 = $pdo->query("SELECT * FROM config LIMIT 1"); 68$res2 = $query2->fetchAll(PDO::FETCH_ASSOC); 69 70if(@count($res2) == 0){ 71 echo json_encode(array( 72 'status' => 'Erro', 73 'mensagem' => 'Configurações não encontradas' 74 ), JSON_UNESCAPED_UNICODE); 75 exit(); 76} 77 78$openai_key = trim(@$res2[0]['openai_key']); 79 80if($openai_key == ""){ 81 echo json_encode(array( 82 'status' => 'Erro', 83 'mensagem' => 'OpenAI Key não cadastrada' 84 ), JSON_UNESCAPED_UNICODE); 85 exit(); 86} 87 88$extensao = strtolower(pathinfo($caminho_foto, PATHINFO_EXTENSION)); 89$mime = 'image/jpeg'; 90 91if($extensao == 'png'){ 92 $mime = 'image/png'; 93}else if($extensao == 'webp'){ 94 $mime = 'image/webp'; 95}else if($extensao == 'jpg' || $extensao == 'jpeg'){ 96 $mime = 'image/jpeg'; 97} 98 99$conteudo_imagem = @file_get_contents($caminho_foto); 100 101if($conteudo_imagem === false){ 102 echo json_encode(array( 103 'status' => 'Erro', 104 'mensagem' => 'Não foi possível ler a imagem para análise' 105 ), JSON_UNESCAPED_UNICODE); 106 exit(); 107} 108 109$imagem_base64 = base64_encode($conteudo_imagem); 110$imagem_data_url = "data:" . $mime . ";base64," . $imagem_base64; 111 112$prompt_final = "Você é um especialista em análise capilar para prótese capilar."; 113$prompt_final .= "\nAnalise a imagem enviada do couro cabeludo."; 114$prompt_final .= "\nResponda somente em JSON válido."; 115$prompt_final .= "\nRetorne exatamente estas chaves:"; 116$prompt_final .= "\ncor_detectada"; 117$prompt_final .= "\ndensidade_detectada"; 118$prompt_final .= "\ngrau_falha"; 119$prompt_final .= "\nsugestao_protese"; 120 121$prompt_final .= "\n\nRegras obrigatórias:"; 122$prompt_final .= "\n1. Não escreva explicações."; 123$prompt_final .= "\n2. Não escreva markdown."; 124$prompt_final .= "\n3. Não escreva texto fora do JSON."; 125$prompt_final .= "\n4. cor_detectada deve ser SOMENTE um dos códigos abaixo:"; 126$prompt_final .= "\n#1B, #1B10, #1B20, #1B30, #1B40, #1B50, #1B60, #2, #210, #220, #230, #240, #250, #3, #310, #320, #330, #340, #4, #410, #420, #430, #440, #5, #6"; 127$prompt_final .= "\n5. Interprete obrigatoriamente os códigos com branco/grisalho da seguinte forma:"; 128$prompt_final .= "\n#1B10 = preto natural + 10% branco"; 129$prompt_final .= "\n#1B20 = preto natural + 20% branco"; 130$prompt_final .= "\n#1B30 = preto natural + 30% branco"; 131$prompt_final .= "\n#1B40 = preto natural + 40% branco"; 132$prompt_final .= "\n#1B50 = preto natural + 50% branco"; 133$prompt_final .= "\n#1B60 = preto natural + 60% branco"; 134$prompt_final .= "\n#210 = castanho escuro + 10% branco"; 135$prompt_final .= "\n#220 = castanho escuro + 20% branco"; 136$prompt_final .= "\n#230 = castanho escuro + 30% branco"; 137$prompt_final .= "\n#240 = castanho escuro + 40% branco"; 138$prompt_final .= "\n#250 = castanho escuro + 50% branco"; 139$prompt_final .= "\n#310 = castanho médio + 10% branco"; 140$prompt_final .= "\n#320 = castanho médio + 20% branco"; 141$prompt_final .= "\n#330 = castanho médio + 30% branco"; 142$prompt_final .= "\n#340 = castanho médio + 40% branco"; 143$prompt_final .= "\n#410 = castanho + 10% branco"; 144$prompt_final .= "\n#420 = castanho + 20% branco"; 145$prompt_final .= "\n#430 = castanho + 30% branco"; 146$prompt_final .= "\n#440 = castanho + 40% branco"; 147$prompt_final .= "\n6. É obrigatório respeitar o grisalho visível da foto. Se houver branco/grisalho, retornar o código com percentual de branco correspondente da lista permitida."; 148$prompt_final .= "\n7. Não simplifique uma cor grisalha para uma cor sólida. Exemplo: não retornar #1B se houver percentual visível de branco."; 149$prompt_final .= "\n8. densidade_detectada deve ser SOMENTE um destes valores:"; 150$prompt_final .= "\n80%, 100%, 130%, 150%"; 151$prompt_final .= "\n9. grau_falha NÃO deve ser calculado pela IA."; 152$prompt_final .= "\n10. grau_falha deve retornar exatamente este valor já existente no sistema: " . $grau_falha_banco; 153$prompt_final .= "\n11. sugestao_protese deve ser SOMENTE um dos modelos abaixo:"; 154$prompt_final .= "\nMicropele 0.04, Micropele 0.06, Micropele 0.08, Micropele 0.10"; 155$prompt_final .= "\n12. A sugestão de prótese deve respeitar o que o profissional utiliza no sistema, sem inventar outro modelo."; 156$prompt_final .= "\n13. Se houver dúvida entre dois códigos, escolha o código permitido mais próximo visualmente, mantendo o percentual de branco aparente."; 157$prompt_final .= "\n14. Nunca invente formato novo fora da lista permitida."; 158 159$prompt_final .= "\n\nExemplo de resposta válida:"; 160$prompt_final .= '\n{"cor_detectada":"#310","densidade_detectada":"100%","grau_falha":"15 X 24","sugestao_protese":"Micropele 0.08"}'; 161 162$modelo_ia = 'gpt-4o'; 163 164$dados = array( 165 'model' => $modelo_ia, 166 'input' => array( 167 array( 168 'role' => 'user', 169 'content' => array( 170 array( 171 'type' => 'input_text', 172 'text' => $prompt_final 173 ), 174 array( 175 'type' => 'input_image', 176 'image_url' => $imagem_data_url 177 ) 178 ) 179 ) 180 ) 181); 182 183$ch = curl_init(); 184 185curl_setopt($ch, CURLOPT_URL, "https://api.openai.com/v1/responses"); 186curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 187curl_setopt($ch, CURLOPT_POST, true); 188curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); 189curl_setopt($ch, CURLOPT_TIMEOUT, 90); 190curl_setopt($ch, CURLOPT_HTTPHEADER, array( 191 "Content-Type: application/json", 192 "Authorization: Bearer " . $openai_key 193)); 194curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dados)); 195 196$resposta = curl_exec($ch); 197$http = curl_getinfo($ch, CURLINFO_HTTP_CODE); 198$erro = curl_error($ch); 199 200curl_close($ch); 201 202if($erro != ""){ 203 echo json_encode(array( 204 'status' => 'Erro', 205 'mensagem' => 'Erro ao processar análise' 206 ), JSON_UNESCAPED_UNICODE); 207 exit(); 208} 209 210if($resposta == ""){ 211 echo json_encode(array( 212 'status' => 'Erro', 213 'mensagem' => 'Resposta vazia da análise' 214 ), JSON_UNESCAPED_UNICODE); 215 exit(); 216} 217 218$resposta_decodificada = json_decode($resposta, true); 219 220if(!is_array($resposta_decodificada)){ 221 echo json_encode(array( 222 'status' => 'Erro', 223 'mensagem' => 'Resposta inválida da análise' 224 ), JSON_UNESCAPED_UNICODE); 225 exit(); 226} 227 228if($http != 200){ 229 $mensagem_erro = 'Erro ao processar análise'; 230 231 if(isset($resposta_decodificada['error']['message']) && $resposta_decodificada['error']['message'] != ''){ 232 $mensagem_erro = $resposta_decodificada['error']['message']; 233 } 234 235 echo json_encode(array( 236 'status' => 'Erro', 237 'mensagem' => $mensagem_erro 238 ), JSON_UNESCAPED_UNICODE); 239 exit(); 240} 241 242$texto_resposta = ''; 243 244if(isset($resposta_decodificada['output']) && is_array($resposta_decodificada['output'])){ 245 for($i = 0; $i < count($resposta_decodificada['output']); $i++){ 246 if(isset($resposta_decodificada['output'][$i]['content']) && is_array($resposta_decodificada['output'][$i]['content'])){ 247 for($j = 0; $j < count($resposta_decodificada['output'][$i]['content']); $j++){ 248 if( 249 isset($resposta_decodificada['output'][$i]['content'][$j]['type']) && 250 $resposta_decodificada['output'][$i]['content'][$j]['type'] == 'output_text' 251 ){ 252 $texto_resposta .= $resposta_decodificada['output'][$i]['content'][$j]['text']; 253 } 254 } 255 } 256 } 257} 258 259if($texto_resposta == '' && isset($resposta_decodificada['output_text'])){ 260 $texto_resposta = $resposta_decodificada['output_text']; 261} 262 263if($texto_resposta == ''){ 264 echo json_encode(array( 265 'status' => 'Erro', 266 'mensagem' => 'A IA não retornou dados para análise' 267 ), JSON_UNESCAPED_UNICODE); 268 exit(); 269} 270 271$texto_resposta = trim($texto_resposta); 272$texto_resposta = preg_replace('/^```json/i', '', $texto_resposta); 273$texto_resposta = preg_replace('/^```/i', '', $texto_resposta); 274$texto_resposta = preg_replace('/```$/i', '', $texto_resposta); 275$texto_resposta = trim($texto_resposta); 276 277$dados_ia = json_decode($texto_resposta, true); 278 279if(!is_array($dados_ia)){ 280 echo json_encode(array( 281 'status' => 'Erro', 282 'mensagem' => 'A IA retornou um formato inválido' 283 ), JSON_UNESCAPED_UNICODE); 284 exit(); 285} 286 287$cor_detectada = isset($dados_ia['cor_detectada']) ? trim($dados_ia['cor_detectada']) : ''; 288$densidade_detectada = isset($dados_ia['densidade_detectada']) ? trim($dados_ia['densidade_detectada']) : ''; 289$grau_falha = isset($dados_ia['grau_falha']) ? trim($dados_ia['grau_falha']) : ''; 290$sugestao_protese = isset($dados_ia['sugestao_protese']) ? trim($dados_ia['sugestao_protese']) : ''; 291 292$cores_permitidas = array( 293 '#1B', '#1B10', '#1B20', '#1B30', '#1B40', '#1B50', '#1B60', 294 '#2', '#210', '#220', '#230', '#240', '#250', 295 '#3', '#310', '#320', '#330', '#340', 296 '#4', '#410', '#420', '#430', '#440', 297 '#5', '#6' 298); 299 300$densidades_permitidas = array('80%', '100%', '130%', '150%'); 301 302$modelos_permitidos = array( 303 'Micropele 0.04', 304 'Micropele 0.06', 305 'Micropele 0.08', 306 'Micropele 0.10' 307); 308 309if(!in_array($cor_detectada, $cores_permitidas)){ 310 $cor_detectada = ''; 311} 312 313if(!in_array($densidade_detectada, $densidades_permitidas)){ 314 $densidade_detectada = ''; 315} 316 317if(!in_array($sugestao_protese, $modelos_permitidos)){ 318 $sugestao_protese = ''; 319} 320 321if($grau_falha_banco != ""){ 322 $grau_falha = $grau_falha_banco; 323} 324 325if($cor_detectada == "" && $densidade_detectada == "" && $sugestao_protese == ""){ 326 echo json_encode(array( 327 'status' => 'Erro', 328 'mensagem' => 'A IA não retornou dados válidos dentro do padrão' 329 ), JSON_UNESCAPED_UNICODE); 330 exit(); 331} 332 333$query3 = $pdo->prepare("UPDATE $tabela SET 334 cor_detectada = :cor_detectada, 335 densidade_detectada = :densidade_detectada, 336 grau_falha = :grau_falha, 337 sugestao_protese = :sugestao_protese 338 WHERE id = :id"); 339 340$query3->bindValue(":cor_detectada", $cor_detectada); 341$query3->bindValue(":densidade_detectada", $densidade_detectada); 342$query3->bindValue(":grau_falha", $grau_falha); 343$query3->bindValue(":sugestao_protese", $sugestao_protese); 344$query3->bindValue(":id", $id); 345$query3->execute(); 346 347echo json_encode(array( 348 'status' => 'Sucesso', 349 'mensagem' => 'Análise processada com sucesso', 350 'cor_detectada' => $cor_detectada, 351 'densidade_detectada' => $densidade_detectada, 352 'grau_falha' => $grau_falha, 353 'sugestao_protese' => $sugestao_protese 354), JSON_UNESCAPED_UNICODE); 355?>

Leitura linha por linha

LinhaCódigoExplicação técnica
1<?phpAbre um bloco PHP. A partir daqui o arquivo passa a executar lógica no servidor.
2header('Content-Type: application/json; charset=utf-8');Define a resposta como JSON UTF-8. Isso é importante para o AJAX interpretar corretamente o retorno do endpoint.
3require_once("../../../conexao.php");Importa `../../../conexao.php` para disponibilizar conexão, sessão, funções utilitárias ou validações necessárias ao restante do fluxo.
4 Linha em branco usada para separar blocos e melhorar a leitura.
5$tabela = 'analise_capilar';Centraliza o nome da tabela `analise_capilar` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
6$id = @$_POST['id'];Lê dados de entrada vindos da requisição, sessão ou upload e normaliza o valor para uso no restante da rotina.
7 Linha em branco usada para separar blocos e melhorar a leitura.
8if($id == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
9 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
10 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
11 'mensagem' => 'ID não informado'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
12 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
13 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
14}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
15 Linha em branco usada para separar blocos e melhorar a leitura.
16$query = $pdo->prepare("SELECT * FROM $tabela WHERE id = :id LIMIT 1");Centraliza o nome da tabela `tabela` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
17$query->bindValue(":id", $id);Associa um valor PHP a um parâmetro nomeado da query preparada.
18$query->execute();Executa a query preparada no banco de dados.
19$res = $query->fetchAll(PDO::FETCH_ASSOC);Lê o resultado retornado pelo banco e o converte para uma estrutura PHP que o restante do arquivo consegue consumir.
20 Linha em branco usada para separar blocos e melhorar a leitura.
21if(@count($res) == 0){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
22 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
23 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
24 'mensagem' => 'Registro não encontrado'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
25 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
26 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
27}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
28 Linha em branco usada para separar blocos e melhorar a leitura.
29$foto = trim(@$res[0]['foto']);Inicializa `$foto` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
30$grau_falha_banco = trim(@$res[0]['grau_falha']);Inicializa `$grau_falha_banco` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
31 Linha em branco usada para separar blocos e melhorar a leitura.
32if($foto == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
33 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
34 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
35 'mensagem' => 'Nenhuma foto enviada para análise'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
36 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
37 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
38}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
39 Linha em branco usada para separar blocos e melhorar a leitura.
40$pasta = __DIR__ . '/../../images/analises/';Define a variável `$pasta`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
41$caminho_foto = $pasta . $foto;Define a variável `$caminho_foto`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
42 Linha em branco usada para separar blocos e melhorar a leitura.
43if(!is_dir($pasta)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
44 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
45 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
46 'mensagem' => 'Pasta de imagens da análise não encontrada'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
47 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
48 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
49}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
50 Linha em branco usada para separar blocos e melhorar a leitura.
51if(!file_exists($caminho_foto)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
52 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
53 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
54 'mensagem' => 'Arquivo da foto não encontrado'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
55 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
56 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
57}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
58 Linha em branco usada para separar blocos e melhorar a leitura.
59if(!is_file($caminho_foto)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
60 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
61 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
62 'mensagem' => 'Arquivo inválido para análise'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
63 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
64 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
65}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
66 Linha em branco usada para separar blocos e melhorar a leitura.
67$query2 = $pdo->query("SELECT * FROM config LIMIT 1");Executa uma consulta direta no banco. É um ponto que merece atenção extra quando houver dados vindos do usuário.
68$res2 = $query2->fetchAll(PDO::FETCH_ASSOC);Lê o resultado retornado pelo banco e o converte para uma estrutura PHP que o restante do arquivo consegue consumir.
69 Linha em branco usada para separar blocos e melhorar a leitura.
70if(@count($res2) == 0){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
71 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
72 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
73 'mensagem' => 'Configurações não encontradas'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
74 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
75 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
76}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
77 Linha em branco usada para separar blocos e melhorar a leitura.
78$openai_key = trim(@$res2[0]['openai_key']);Inicializa `$openai_key` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
79 Linha em branco usada para separar blocos e melhorar a leitura.
80if($openai_key == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
81 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
82 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
83 'mensagem' => 'OpenAI Key não cadastrada'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
84 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
85 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
86}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
87 Linha em branco usada para separar blocos e melhorar a leitura.
88$extensao = strtolower(pathinfo($caminho_foto, PATHINFO_EXTENSION));Define a variável `$extensao`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
89$mime = 'image/jpeg';Define `$mime` com um valor literal usado como configuração local do arquivo.
90 Linha em branco usada para separar blocos e melhorar a leitura.
91if($extensao == 'png'){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
92 $mime = 'image/png';Define `$mime` com um valor literal usado como configuração local do arquivo.
93}else if($extensao == 'webp'){Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
94 $mime = 'image/webp';Define `$mime` com um valor literal usado como configuração local do arquivo.
95}else if($extensao == 'jpg' || $extensao == 'jpeg'){Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
96 $mime = 'image/jpeg';Define `$mime` com um valor literal usado como configuração local do arquivo.
97}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
98 Linha em branco usada para separar blocos e melhorar a leitura.
99$conteudo_imagem = @file_get_contents($caminho_foto);Define a variável `$conteudo_imagem`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
100 Linha em branco usada para separar blocos e melhorar a leitura.
101if($conteudo_imagem === false){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
102 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
103 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
104 'mensagem' => 'Não foi possível ler a imagem para análise'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
105 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
106 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
107}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
108 Linha em branco usada para separar blocos e melhorar a leitura.
109$imagem_base64 = base64_encode($conteudo_imagem);Define a variável `$imagem_base64`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
110$imagem_data_url = "data:" . $mime . ";base64," . $imagem_base64;Define `$imagem_data_url` com um valor literal usado como configuração local do arquivo.
111 Linha em branco usada para separar blocos e melhorar a leitura.
112$prompt_final = "Você é um especialista em análise capilar para prótese capilar.";Define `$prompt_final` com um valor literal usado como configuração local do arquivo.
113$prompt_final .= "\nAnalise a imagem enviada do couro cabeludo.";Manipula uma variável PHP usada na construção do fluxo.
114$prompt_final .= "\nResponda somente em JSON válido.";Manipula uma variável PHP usada na construção do fluxo.
115$prompt_final .= "\nRetorne exatamente estas chaves:";Manipula uma variável PHP usada na construção do fluxo.
116$prompt_final .= "\ncor_detectada";Manipula uma variável PHP usada na construção do fluxo.
117$prompt_final .= "\ndensidade_detectada";Manipula uma variável PHP usada na construção do fluxo.
118$prompt_final .= "\ngrau_falha";Manipula uma variável PHP usada na construção do fluxo.
119$prompt_final .= "\nsugestao_protese";Manipula uma variável PHP usada na construção do fluxo.
120 Linha em branco usada para separar blocos e melhorar a leitura.
121$prompt_final .= "\n\nRegras obrigatórias:";Manipula uma variável PHP usada na construção do fluxo.
122$prompt_final .= "\n1. Não escreva explicações.";Manipula uma variável PHP usada na construção do fluxo.
123$prompt_final .= "\n2. Não escreva markdown.";Manipula uma variável PHP usada na construção do fluxo.
124$prompt_final .= "\n3. Não escreva texto fora do JSON.";Manipula uma variável PHP usada na construção do fluxo.
125$prompt_final .= "\n4. cor_detectada deve ser SOMENTE um dos códigos abaixo:";Manipula uma variável PHP usada na construção do fluxo.
126$prompt_final .= "\n#1B, #1B10, #1B20, #1B30, #1B40, #1B50, #1B60, #2, #210, #220, #230, #240, #250, #3, #310, #320, #330, #340, #4, #410, #420, #430, #440, #5, #6";Manipula uma variável PHP usada na construção do fluxo.
127$prompt_final .= "\n5. Interprete obrigatoriamente os códigos com branco/grisalho da seguinte forma:";Manipula uma variável PHP usada na construção do fluxo.
128$prompt_final .= "\n#1B10 = preto natural + 10% branco";Manipula uma variável PHP usada na construção do fluxo.
129$prompt_final .= "\n#1B20 = preto natural + 20% branco";Manipula uma variável PHP usada na construção do fluxo.
130$prompt_final .= "\n#1B30 = preto natural + 30% branco";Manipula uma variável PHP usada na construção do fluxo.
131$prompt_final .= "\n#1B40 = preto natural + 40% branco";Manipula uma variável PHP usada na construção do fluxo.
132$prompt_final .= "\n#1B50 = preto natural + 50% branco";Manipula uma variável PHP usada na construção do fluxo.
133$prompt_final .= "\n#1B60 = preto natural + 60% branco";Manipula uma variável PHP usada na construção do fluxo.
134$prompt_final .= "\n#210 = castanho escuro + 10% branco";Manipula uma variável PHP usada na construção do fluxo.
135$prompt_final .= "\n#220 = castanho escuro + 20% branco";Manipula uma variável PHP usada na construção do fluxo.
136$prompt_final .= "\n#230 = castanho escuro + 30% branco";Manipula uma variável PHP usada na construção do fluxo.
137$prompt_final .= "\n#240 = castanho escuro + 40% branco";Manipula uma variável PHP usada na construção do fluxo.
138$prompt_final .= "\n#250 = castanho escuro + 50% branco";Manipula uma variável PHP usada na construção do fluxo.
139$prompt_final .= "\n#310 = castanho médio + 10% branco";Manipula uma variável PHP usada na construção do fluxo.
140$prompt_final .= "\n#320 = castanho médio + 20% branco";Manipula uma variável PHP usada na construção do fluxo.
141$prompt_final .= "\n#330 = castanho médio + 30% branco";Manipula uma variável PHP usada na construção do fluxo.
142$prompt_final .= "\n#340 = castanho médio + 40% branco";Manipula uma variável PHP usada na construção do fluxo.
143$prompt_final .= "\n#410 = castanho + 10% branco";Manipula uma variável PHP usada na construção do fluxo.
144$prompt_final .= "\n#420 = castanho + 20% branco";Manipula uma variável PHP usada na construção do fluxo.
145$prompt_final .= "\n#430 = castanho + 30% branco";Manipula uma variável PHP usada na construção do fluxo.
146$prompt_final .= "\n#440 = castanho + 40% branco";Manipula uma variável PHP usada na construção do fluxo.
147$prompt_final .= "\n6. É obrigatório respeitar o grisalho visível da foto. Se houver branco/grisalho, retornar o código com percentual de branco correspondente da lista permitida.";Manipula uma variável PHP usada na construção do fluxo.
148$prompt_final .= "\n7. Não simplifique uma cor grisalha para uma cor sólida. Exemplo: não retornar #1B se houver percentual visível de branco.";Manipula uma variável PHP usada na construção do fluxo.
149$prompt_final .= "\n8. densidade_detectada deve ser SOMENTE um destes valores:";Manipula uma variável PHP usada na construção do fluxo.
150$prompt_final .= "\n80%, 100%, 130%, 150%";Manipula uma variável PHP usada na construção do fluxo.
151$prompt_final .= "\n9. grau_falha NÃO deve ser calculado pela IA.";Manipula uma variável PHP usada na construção do fluxo.
152$prompt_final .= "\n10. grau_falha deve retornar exatamente este valor já existente no sistema: " . $grau_falha_banco;Manipula uma variável PHP usada na construção do fluxo.
153$prompt_final .= "\n11. sugestao_protese deve ser SOMENTE um dos modelos abaixo:";Manipula uma variável PHP usada na construção do fluxo.
154$prompt_final .= "\nMicropele 0.04, Micropele 0.06, Micropele 0.08, Micropele 0.10";Manipula uma variável PHP usada na construção do fluxo.
155$prompt_final .= "\n12. A sugestão de prótese deve respeitar o que o profissional utiliza no sistema, sem inventar outro modelo.";Manipula uma variável PHP usada na construção do fluxo.
156$prompt_final .= "\n13. Se houver dúvida entre dois códigos, escolha o código permitido mais próximo visualmente, mantendo o percentual de branco aparente.";Manipula uma variável PHP usada na construção do fluxo.
157$prompt_final .= "\n14. Nunca invente formato novo fora da lista permitida.";Manipula uma variável PHP usada na construção do fluxo.
158 Linha em branco usada para separar blocos e melhorar a leitura.
159$prompt_final .= "\n\nExemplo de resposta válida:";Manipula uma variável PHP usada na construção do fluxo.
160$prompt_final .= '\n{"cor_detectada":"#310","densidade_detectada":"100%","grau_falha":"15 X 24","sugestao_protese":"Micropele 0.08"}';Manipula uma variável PHP usada na construção do fluxo.
161 Linha em branco usada para separar blocos e melhorar a leitura.
162$modelo_ia = 'gpt-4o';Define `$modelo_ia` com um valor literal usado como configuração local do arquivo.
163 Linha em branco usada para separar blocos e melhorar a leitura.
164$dados = array(Define a variável `$dados`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
165 'model' => $modelo_ia,Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
166 'input' => array(Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
167 array(Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
168 'role' => 'user',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
169 'content' => array(Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
170 array(Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
171 'type' => 'input_text',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
172 'text' => $prompt_finalLinha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
173 ),Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
174 array(Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
175 'type' => 'input_image',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
176 'image_url' => $imagem_data_urlLinha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
177 )Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
178 )Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
179 )Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
180 )Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
181);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
182 Linha em branco usada para separar blocos e melhorar a leitura.
183$ch = curl_init();Define a variável `$ch`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
184 Linha em branco usada para separar blocos e melhorar a leitura.
185curl_setopt($ch, CURLOPT_URL, "https://api.openai.com/v1/responses");Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
186curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
187curl_setopt($ch, CURLOPT_POST, true);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
188curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
189curl_setopt($ch, CURLOPT_TIMEOUT, 90);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
190curl_setopt($ch, CURLOPT_HTTPHEADER, array(Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
191 "Content-Type: application/json",Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
192 "Authorization: Bearer " . $openai_keyLinha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
193));Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
194curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dados));Converte o array de resposta para JSON antes de devolver ao front-end.
195 Linha em branco usada para separar blocos e melhorar a leitura.
196$resposta = curl_exec($ch);Define a variável `$resposta`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
197$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);Define a variável `$http`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
198$erro = curl_error($ch);Define a variável `$erro`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
199 Linha em branco usada para separar blocos e melhorar a leitura.
200curl_close($ch);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
201 Linha em branco usada para separar blocos e melhorar a leitura.
202if($erro != ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
203 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
204 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
205 'mensagem' => 'Erro ao processar análise'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
206 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
207 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
208}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
209 Linha em branco usada para separar blocos e melhorar a leitura.
210if($resposta == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
211 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
212 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
213 'mensagem' => 'Resposta vazia da análise'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
214 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
215 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
216}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
217 Linha em branco usada para separar blocos e melhorar a leitura.
218$resposta_decodificada = json_decode($resposta, true);Define a variável `$resposta_decodificada`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
219 Linha em branco usada para separar blocos e melhorar a leitura.
220if(!is_array($resposta_decodificada)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
221 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
222 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
223 'mensagem' => 'Resposta inválida da análise'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
224 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
225 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
226}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
227 Linha em branco usada para separar blocos e melhorar a leitura.
228if($http != 200){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
229 $mensagem_erro = 'Erro ao processar análise';Define `$mensagem_erro` com um valor literal usado como configuração local do arquivo.
230 Linha em branco usada para separar blocos e melhorar a leitura.
231 if(isset($resposta_decodificada['error']['message']) && $resposta_decodificada['error']['message'] != ''){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
232 $mensagem_erro = $resposta_decodificada['error']['message'];Define a variável `$mensagem_erro`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
233 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
234 Linha em branco usada para separar blocos e melhorar a leitura.
235 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
236 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
237 'mensagem' => $mensagem_erroLinha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
238 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
239 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
240}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
241 Linha em branco usada para separar blocos e melhorar a leitura.
242$texto_resposta = '';Define `$texto_resposta` com um valor literal usado como configuração local do arquivo.
243 Linha em branco usada para separar blocos e melhorar a leitura.
244if(isset($resposta_decodificada['output']) && is_array($resposta_decodificada['output'])){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
245 for($i = 0; $i < count($resposta_decodificada['output']); $i++){Inicia um laço de repetição para percorrer registros, opções ou elementos da interface.
246 if(isset($resposta_decodificada['output'][$i]['content']) && is_array($resposta_decodificada['output'][$i]['content'])){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
247 for($j = 0; $j < count($resposta_decodificada['output'][$i]['content']); $j++){Inicia um laço de repetição para percorrer registros, opções ou elementos da interface.
248 if(Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
249 isset($resposta_decodificada['output'][$i]['content'][$j]['type']) &&Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
250 $resposta_decodificada['output'][$i]['content'][$j]['type'] == 'output_text'Manipula uma variável PHP usada na construção do fluxo.
251 ){Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
252 $texto_resposta .= $resposta_decodificada['output'][$i]['content'][$j]['text'];Manipula uma variável PHP usada na construção do fluxo.
253 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
254 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
255 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
256 }Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
257}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
258 Linha em branco usada para separar blocos e melhorar a leitura.
259if($texto_resposta == '' && isset($resposta_decodificada['output_text'])){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
260 $texto_resposta = $resposta_decodificada['output_text'];Define a variável `$texto_resposta`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
261}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
262 Linha em branco usada para separar blocos e melhorar a leitura.
263if($texto_resposta == ''){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
264 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
265 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
266 'mensagem' => 'A IA não retornou dados para análise'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
267 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
268 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
269}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
270 Linha em branco usada para separar blocos e melhorar a leitura.
271$texto_resposta = trim($texto_resposta);Inicializa `$texto_resposta` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
272$texto_resposta = preg_replace('/^```json/i', '', $texto_resposta);Define a variável `$texto_resposta`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
273$texto_resposta = preg_replace('/^```/i', '', $texto_resposta);Define a variável `$texto_resposta`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
274$texto_resposta = preg_replace('/```$/i', '', $texto_resposta);Define a variável `$texto_resposta`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
275$texto_resposta = trim($texto_resposta);Inicializa `$texto_resposta` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
276 Linha em branco usada para separar blocos e melhorar a leitura.
277$dados_ia = json_decode($texto_resposta, true);Define a variável `$dados_ia`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
278 Linha em branco usada para separar blocos e melhorar a leitura.
279if(!is_array($dados_ia)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
280 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
281 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
282 'mensagem' => 'A IA retornou um formato inválido'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
283 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
284 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
285}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
286 Linha em branco usada para separar blocos e melhorar a leitura.
287$cor_detectada = isset($dados_ia['cor_detectada']) ? trim($dados_ia['cor_detectada']) : '';Inicializa `$cor_detectada` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
288$densidade_detectada = isset($dados_ia['densidade_detectada']) ? trim($dados_ia['densidade_detectada']) : '';Inicializa `$densidade_detectada` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
289$grau_falha = isset($dados_ia['grau_falha']) ? trim($dados_ia['grau_falha']) : '';Inicializa `$grau_falha` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
290$sugestao_protese = isset($dados_ia['sugestao_protese']) ? trim($dados_ia['sugestao_protese']) : '';Inicializa `$sugestao_protese` já removendo espaços nas pontas, reduzindo ruído antes de validar ou salvar.
291 Linha em branco usada para separar blocos e melhorar a leitura.
292$cores_permitidas = array(Define a variável `$cores_permitidas`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
293 '#1B', '#1B10', '#1B20', '#1B30', '#1B40', '#1B50', '#1B60',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
294 '#2', '#210', '#220', '#230', '#240', '#250',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
295 '#3', '#310', '#320', '#330', '#340',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
296 '#4', '#410', '#420', '#430', '#440',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
297 '#5', '#6'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
298);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
299 Linha em branco usada para separar blocos e melhorar a leitura.
300$densidades_permitidas = array('80%', '100%', '130%', '150%');Define a variável `$densidades_permitidas`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
301 Linha em branco usada para separar blocos e melhorar a leitura.
302$modelos_permitidos = array(Define a variável `$modelos_permitidos`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
303 'Micropele 0.04',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
304 'Micropele 0.06',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
305 'Micropele 0.08',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
306 'Micropele 0.10'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
307);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
308 Linha em branco usada para separar blocos e melhorar a leitura.
309if(!in_array($cor_detectada, $cores_permitidas)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
310 $cor_detectada = '';Define `$cor_detectada` com um valor literal usado como configuração local do arquivo.
311}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
312 Linha em branco usada para separar blocos e melhorar a leitura.
313if(!in_array($densidade_detectada, $densidades_permitidas)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
314 $densidade_detectada = '';Define `$densidade_detectada` com um valor literal usado como configuração local do arquivo.
315}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
316 Linha em branco usada para separar blocos e melhorar a leitura.
317if(!in_array($sugestao_protese, $modelos_permitidos)){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
318 $sugestao_protese = '';Define `$sugestao_protese` com um valor literal usado como configuração local do arquivo.
319}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
320 Linha em branco usada para separar blocos e melhorar a leitura.
321if($grau_falha_banco != ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
322 $grau_falha = $grau_falha_banco;Define a variável `$grau_falha`, que será usada pelo restante do arquivo para controlar dados, estado ou resposta.
323}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
324 Linha em branco usada para separar blocos e melhorar a leitura.
325if($cor_detectada == "" && $densidade_detectada == "" && $sugestao_protese == ""){Abre uma condição para validar pré-requisitos ou desviar o fluxo conforme os dados recebidos.
326 echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
327 'status' => 'Erro',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
328 'mensagem' => 'A IA não retornou dados válidos dentro do padrão'Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
329 ), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
330 exit();Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
331}Marca abertura/fechamento de bloco de código, objeto, array ou estrutura de controle.
332 Linha em branco usada para separar blocos e melhorar a leitura.
333$query3 = $pdo->prepare("UPDATE $tabela SET Centraliza o nome da tabela `tabela` em uma variável, facilitando reaproveitamento do valor nas queries do arquivo.
334 cor_detectada = :cor_detectada, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
335 densidade_detectada = :densidade_detectada, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
336 grau_falha = :grau_falha, Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
337 sugestao_protese = :sugestao_proteseLinha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
338 WHERE id = :id");Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
339 Linha em branco usada para separar blocos e melhorar a leitura.
340$query3->bindValue(":cor_detectada", $cor_detectada);Associa um valor PHP a um parâmetro nomeado da query preparada.
341$query3->bindValue(":densidade_detectada", $densidade_detectada);Associa um valor PHP a um parâmetro nomeado da query preparada.
342$query3->bindValue(":grau_falha", $grau_falha);Associa um valor PHP a um parâmetro nomeado da query preparada.
343$query3->bindValue(":sugestao_protese", $sugestao_protese);Associa um valor PHP a um parâmetro nomeado da query preparada.
344$query3->bindValue(":id", $id);Associa um valor PHP a um parâmetro nomeado da query preparada.
345$query3->execute();Executa a query preparada no banco de dados.
346 Linha em branco usada para separar blocos e melhorar a leitura.
347echo json_encode(array(Converte o array de resposta para JSON antes de devolver ao front-end.
348 'status' => 'Sucesso',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
349 'mensagem' => 'Análise processada com sucesso',Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
350 'cor_detectada' => $cor_detectada,Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
351 'densidade_detectada' => $densidade_detectada,Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
352 'grau_falha' => $grau_falha,Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
353 'sugestao_protese' => $sugestao_proteseLinha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
354), JSON_UNESCAPED_UNICODE);Linha de implementação que compõe a lógica normal do arquivo e deve ser lida em conjunto com o bloco onde está inserida.
355?>Fecha o bloco PHP atual para voltar à saída HTML.

Navegação entre arquivos do grupo