revision
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Response } from 'express';
|
||||
import { supabase } from '../lib/supabase';
|
||||
import { AuthenticatedRequest } from '../middleware/auth';
|
||||
import { runIddianameAnalysis, runCaseNarrativeAnalysis } from './document.controller';
|
||||
import { runIddianameAnalysis, runCaseNarrativeAnalysis, runStatementAnalysis } from './document.controller';
|
||||
import { findOrCreateCaseByTitle } from '../lib/caseLookup';
|
||||
|
||||
export const createCase = async (req: AuthenticatedRequest, res: Response) => {
|
||||
@@ -109,6 +109,57 @@ export const summarizeCase = async (req: AuthenticatedRequest, res: Response) =>
|
||||
}
|
||||
};
|
||||
|
||||
// Çelişki Avcısı: İfade ve sorgu evraklarını alıp analiz eder.
|
||||
export const analyzeStatements = async (req: AuthenticatedRequest, res: Response) => {
|
||||
try {
|
||||
const { caseId } = req.params;
|
||||
if (!caseId) {
|
||||
return res.status(400).json({ error: 'Geçersiz caseId' });
|
||||
}
|
||||
|
||||
const { data: docs, error: docsError } = await supabase
|
||||
.from('documents')
|
||||
.select('filename, extracted_text')
|
||||
.eq('case_id', caseId)
|
||||
.order('uploaded_at', { ascending: true });
|
||||
if (docsError) throw docsError;
|
||||
|
||||
// Sadece ifade, sorgu, beyan, tutanak, duruşma içeren belgeleri filtrele
|
||||
const keywords = ['ifade', 'sorgu', 'beyan', 'tutanak', 'duruşma'];
|
||||
const statementDocs = (docs || []).filter((d) => {
|
||||
if (!d.extracted_text || !String(d.extracted_text).trim()) return false;
|
||||
const fn = normalizeTr(d.filename);
|
||||
return keywords.some(kw => fn.includes(kw));
|
||||
});
|
||||
|
||||
if (statementDocs.length === 0) {
|
||||
return res.status(400).json({ error: 'Bu dosyada ifade/beyan evrakı bulunamadı.' });
|
||||
}
|
||||
|
||||
const perDocLimit = Math.max(1000, Math.floor(15000 / statementDocs.length));
|
||||
const combinedText = statementDocs
|
||||
.map((d) => `--- ${d.filename} ---\n${String(d.extracted_text).slice(0, perDocLimit)}`)
|
||||
.join('\n\n');
|
||||
|
||||
const analysisInput = `Aşağıdaki belgeler sadece ifade ve sorgu evraklarıdır:\n\n${combinedText}`;
|
||||
|
||||
const { summaryJson, aiModel } = await runStatementAnalysis(analysisInput);
|
||||
|
||||
// Çelişki analizi sonucunu 'analyses' tablosuna kaydet
|
||||
const { data: analysisRecord, error: analysisError } = await supabase
|
||||
.from('analyses')
|
||||
.insert([{ case_id: caseId, document_id: null, summary_json: { statementAnalysis: summaryJson }, model_used: aiModel }])
|
||||
.select()
|
||||
.single();
|
||||
if (analysisError) throw analysisError;
|
||||
|
||||
res.json({ analysis: analysisRecord });
|
||||
} catch (error: any) {
|
||||
console.error('Analyze Statements Error:', error);
|
||||
res.status(500).json({ error: error.message || 'Internal Server Error' });
|
||||
}
|
||||
};
|
||||
|
||||
// UYAP Evrak İndirici eklentisinin "Taraf Bilgileri" sekmesinden yakaladığı
|
||||
// davacı/davalı/sanık + vekil bilgisini kaydeder. AI'nin OCR metninden tahmin
|
||||
// ettiği "Taraflar" alanından çok daha güvenilir — doğrudan UYAP'ın yapılandırılmış
|
||||
|
||||
Reference in New Issue
Block a user