: ok data: #serializeJSON({type:"error",message:"contract_id required"})# SELECT s.id as supp_id, s.type, d.id as doc_id, d.filename, d.elements_json FROM supplements s JOIN documents d ON s.document_id = d.id WHERE s.contract_id = AND d.elements_json IS NOT NULL ORDER BY s.created_at data: #serializeJSON({type:"error",message:"Нет распарсенных файлов. Сначала нажмите Парсинг."})# SELECT prompt_text FROM prompts WHERE contract_id = SELECT row_num, name, price, qty, sum, date_start FROM spec_rows WHERE supplement_id = ORDER BY row_num data: #serializeJSON({type:"extract_skip",supplement_id:sid,filename:supps.filename,count:ex.recordCount})# data: #serializeJSON({type:"extract_start",supplement_id:sid,filename:supps.filename})# data: #serializeJSON({type:"extract_error",supplement_id:sid,filename:supps.filename,error:"LLM HTTP #cfhttp.statusCode#",time_s:elapsed})# DELETE FROM spec_rows WHERE supplement_id = INSERT INTO spec_rows (supplement_id, row_num, name, price, qty, sum, date_start) VALUES ( , , , , , , ) data: #serializeJSON({type:"extract_done",supplement_id:sid,filename:supps.filename,count:arrayLen(savedRows),time_s:elapsed})# data: #serializeJSON({type:"extract_error",supplement_id:sid,filename:supps.filename,error:"JSON parse: " & cfcatch.message,time_s:elapsed})# SELECT id FROM supplements WHERE contract_id= AND type='initial' ORDER BY created_at LIMIT 1 SELECT id FROM supplements WHERE contract_id= ORDER BY created_at LIMIT 1 SELECT id, type FROM supplements WHERE contract_id= AND id!= ORDER BY created_at data: #serializeJSON({type:"done",total_time_s:totalTime,all_changes:allChanges})# data: #serializeJSON({type:"error",message:cfcatch.message,detail:cfcatch.detail})#