feat(drafting): centralize petition knowledge, CMK/HMK procedural rules, and prompt resolver on backend
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
import { Response } from 'express';
|
||||
import { Request, Response } from 'express';
|
||||
import { supabase } from '../lib/supabase';
|
||||
import { AuthenticatedRequest } from '../middleware/auth';
|
||||
import { callAiModelRaw, CEZA_MUHAKEMESI_REFERANSI, HUKUK_MAHKEMELERI_REFERANSI } from './document.controller';
|
||||
import { findRelevantLegislation, LegislationMatch } from '../lib/legislationLookup';
|
||||
import { shouldPersistLegacyTables } from '../lib/localFirstFlag';
|
||||
import { resolvePetitionContext, PETITION_CATEGORIES, PETITION_TYPES_CATALOG } from '../lib/petitionKnowledge';
|
||||
import crypto from 'crypto';
|
||||
|
||||
const DRAFT_SYSTEM_PROMPT = `
|
||||
const BASE_DRAFT_SYSTEM_PROMPT = `
|
||||
Sen uzman bir Türk avukatısın. Sana verilen dosya bilgilerine göre, istenen türde
|
||||
bir dilekçe TASLAĞI yazacaksın. Türk hukuk uygulamasına uygun, resmî bir dille yaz
|
||||
(hitap, hususlar, netice-i talep gibi standart dilekçe yapısını kullan).
|
||||
@@ -43,10 +44,20 @@ function toTraceableLegislation(matches: LegislationMatch[]) {
|
||||
return matches.map(({ maddeNo, baslik, kanun }) => ({ maddeNo, baslik, kanun }));
|
||||
}
|
||||
|
||||
export const getPetitionCatalog = async (_req: Request, res: Response) => {
|
||||
try {
|
||||
res.json({
|
||||
categories: PETITION_CATEGORIES,
|
||||
types: PETITION_TYPES_CATALOG,
|
||||
});
|
||||
} catch (error: any) {
|
||||
res.status(500).json({ error: error.message || 'Internal Server Error' });
|
||||
}
|
||||
};
|
||||
|
||||
// Dilekçe Hazırlama ekranındaki "AI ile Taslak Oluştur" — dosyanın gerçek bilgilerini
|
||||
// (başlık, UYAP'tan gelen taraflar, varsa Dosya Özeti) ve kullanıcının notlarını,
|
||||
// isteğe bağlı olarak seçilen büro şablonunun DİLİNİ/FORMATINI referans alarak
|
||||
// gerçek bir AI taslağı üretir.
|
||||
// backend'deki zengin dilekçe usul ve kural motoruyla birleştirerek AI taslağı üretir.
|
||||
export const generateDraft = async (req: AuthenticatedRequest, res: Response) => {
|
||||
try {
|
||||
const { case_id, petition_type, notes, template_id, latest_analysis_summary_json } = req.body || {};
|
||||
@@ -68,9 +79,7 @@ export const generateDraft = async (req: AuthenticatedRequest, res: Response) =>
|
||||
return res.status(403).json({ error: 'Bu dosyaya erişim yetkiniz yok.' });
|
||||
}
|
||||
|
||||
// Faz 2 — analyses artık kalıcı olarak Postgres'te tutulmuyor. İstekte
|
||||
// gönderilmişse (Electron'un yerel SQLite'tan okuduğu son analiz) öncelikli
|
||||
// kaynak; yoksa (eski istemci/web) mevcut Postgres sorgusuna düşülür.
|
||||
// Faz 2 — analyses artık kalıcı olarak Postgres'te tutulmuyor.
|
||||
let lastAnalysis: { summary_json: any } | null = latest_analysis_summary_json !== undefined
|
||||
? { summary_json: latest_analysis_summary_json }
|
||||
: null;
|
||||
@@ -103,10 +112,21 @@ export const generateDraft = async (req: AuthenticatedRequest, res: Response) =>
|
||||
|
||||
const ozet = lastAnalysis?.summary_json?.ozet;
|
||||
|
||||
let userContent = `YENİ DOSYA BİLGİLERİ:\nDosya: ${caseRow.title}\nTaraflar: ${partiesText}\nDilekçe Türü: ${petition_type}\n`;
|
||||
if (notes && String(notes).trim()) {
|
||||
userContent += `Vurgulanmasını istediğiniz noktalar: ${String(notes).trim()}\n`;
|
||||
// Backend Merkezi Hukuki Prompt & Kural Çözümleyici
|
||||
const resolvedContext = resolvePetitionContext(petition_type, notes);
|
||||
|
||||
const fullSystemPrompt = `
|
||||
${BASE_DRAFT_SYSTEM_PROMPT}
|
||||
|
||||
${resolvedContext.systemPromptAddon}
|
||||
`.trim();
|
||||
|
||||
let userContent = `YENİ DOSYA BİLGİLERİ:\nDosya: ${caseRow.title}\nTaraflar: ${partiesText}\nSeçilen Dilekçe Türü: ${resolvedContext.selectedItem?.title || petition_type}\n`;
|
||||
|
||||
if (resolvedContext.enhancedNotes) {
|
||||
userContent += `\n${resolvedContext.enhancedNotes}\n`;
|
||||
}
|
||||
|
||||
if (ozet && typeof ozet === 'string') {
|
||||
userContent += `\nDosya Özeti (bağlam için):\n${ozet.slice(0, 4000)}\n`;
|
||||
}
|
||||
@@ -118,11 +138,8 @@ export const generateDraft = async (req: AuthenticatedRequest, res: Response) =>
|
||||
const legislationMatches = await findRelevantLegislation(legislationLookupText);
|
||||
userContent += formatReferenceBlock(legislationMatches);
|
||||
|
||||
const { aiContent, aiModel } = await callAiModelRaw(DRAFT_SYSTEM_PROMPT, userContent, 2500, 180_000);
|
||||
const { aiContent, aiModel } = await callAiModelRaw(fullSystemPrompt, userContent, 2500, 180_000);
|
||||
|
||||
// Faz 3 — taslak artık kalıcı olarak Postgres'e YAZILMIYOR (PERSIST_TO_POSTGRES=false
|
||||
// olduğunda); "Dilekçelerim" listesi artık yerel SQLite'tan (Faz 1/2) besleniyor.
|
||||
// Bayrak açıkken (varsayılan) davranış birebir eskisi gibi kalır.
|
||||
let draftRecord: { id: string; created_at?: string } | null = null;
|
||||
if (shouldPersistLegacyTables()) {
|
||||
const { data, error: draftError } = await supabase
|
||||
@@ -130,7 +147,7 @@ export const generateDraft = async (req: AuthenticatedRequest, res: Response) =>
|
||||
.insert([{
|
||||
user_id: userId,
|
||||
case_id,
|
||||
petition_type,
|
||||
petition_type: resolvedContext.selectedItem?.title || petition_type,
|
||||
content: aiContent,
|
||||
template_id: template_id || null,
|
||||
used_legislation: toTraceableLegislation(legislationMatches),
|
||||
@@ -145,7 +162,19 @@ export const generateDraft = async (req: AuthenticatedRequest, res: Response) =>
|
||||
draftRecord = { id: crypto.randomUUID(), created_at: new Date().toISOString() };
|
||||
}
|
||||
|
||||
res.json({ draft: aiContent, draftId: draftRecord?.id || null, model: aiModel, usedTemplate: !!template, usedLegislation: toTraceableLegislation(legislationMatches) });
|
||||
res.json({
|
||||
draft: aiContent,
|
||||
draftId: draftRecord?.id || null,
|
||||
model: aiModel,
|
||||
usedTemplate: !!template,
|
||||
usedLegislation: toTraceableLegislation(legislationMatches),
|
||||
resolvedPetition: resolvedContext.selectedItem ? {
|
||||
id: resolvedContext.selectedItem.id,
|
||||
title: resolvedContext.selectedItem.title,
|
||||
lawRef: resolvedContext.selectedItem.lawRef,
|
||||
courtType: resolvedContext.selectedItem.courtType,
|
||||
} : null,
|
||||
});
|
||||
} catch (error: any) {
|
||||
console.error('Generate Draft Error:', error);
|
||||
res.status(500).json({ error: error.message || 'Internal Server Error' });
|
||||
@@ -211,14 +240,8 @@ export const generateAngarya = async (req: AuthenticatedRequest, res: Response)
|
||||
}
|
||||
userContent += `\nİstenen Dilekçe: ${petitionType}\nLütfen sadece bu bilgileri kullanarak yukarıda tarif edilen standart ${petitionType} metnini oluştur.`;
|
||||
|
||||
// Fast generation using a lightweight model or quick params
|
||||
const { aiContent, aiModel } = await callAiModelRaw(ANGARYA_SYSTEM_PROMPT, userContent, 500);
|
||||
|
||||
// Faz 3 — angarya taslakları da PERSIST_TO_POSTGRES=false olduğunda
|
||||
// kalıcı yazılmıyor. NOT: Angarya için Faz 1'de bir yerel SQLite dual-write
|
||||
// eklenmedi (kapsam dışı tutulan düşük öncelikli özellik) — bayrak
|
||||
// kapatıldığında bu taslaklar sadece HTTP yanıtında var olacak, hiçbir
|
||||
// yerde kalıcı olmayacak. Bilinen ve kabul edilmiş bir sınırlama.
|
||||
let draftRecord: { id: string; created_at?: string } | null = null;
|
||||
if (shouldPersistLegacyTables()) {
|
||||
const { data, error: draftError } = await supabase
|
||||
|
||||
@@ -0,0 +1,458 @@
|
||||
/**
|
||||
* Ceza & Hukuk Muhakemesi Hukuku (HMK, CMK, İİK, İYUK, TMK, TBK)
|
||||
* Backend Merkezi Dilekçe ve Hukuki Prompt Bilgi Bankası
|
||||
*/
|
||||
|
||||
export interface PetitionTypeItem {
|
||||
id: string;
|
||||
title: string;
|
||||
shortTitle: string;
|
||||
categoryId: string;
|
||||
lawRef: string;
|
||||
courtType: string;
|
||||
keyElements: string[];
|
||||
suggestedNotes: string;
|
||||
aiPromptGuide: string;
|
||||
}
|
||||
|
||||
export interface PetitionCategory {
|
||||
id: string;
|
||||
name: string;
|
||||
shortName: string;
|
||||
icon: string;
|
||||
badgeColor: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
export const PETITION_CATEGORIES: PetitionCategory[] = [
|
||||
{
|
||||
id: 'hmk',
|
||||
name: '1. Hukuk Yargılaması (HMK)',
|
||||
shortName: 'Hukuk (HMK)',
|
||||
icon: '⚖️',
|
||||
badgeColor: 'text-[#3B82F6] bg-[#3B82F6]/10 border-[#3B82F6]/30',
|
||||
description: 'Hukuk Muhakemeleri Kanunu kapsamındaki dava, cevap, beyan, delil, ıslah, ihtiyati tedbir ve temyiz dilekçeleri'
|
||||
},
|
||||
{
|
||||
id: 'cmk',
|
||||
name: '2. Ceza Yargılaması (CMK & TCK)',
|
||||
shortName: 'Ceza (CMK)',
|
||||
icon: '🛡️',
|
||||
badgeColor: 'text-[#EF4444] bg-[#EF4444]/10 border-[#EF4444]/30',
|
||||
description: 'Ceza Muhakemesi Kanunu uyarınca şikâyet, KYOK itiraz, tutukluluğa itiraz, savunma ve ceza temyiz talepleri'
|
||||
},
|
||||
{
|
||||
id: 'iik',
|
||||
name: '3. İcra ve İflas Hukuku (İİK)',
|
||||
shortName: 'İcra-İflas (İİK)',
|
||||
icon: '🏢',
|
||||
badgeColor: 'text-[#F59E0B] bg-[#F59E0B]/10 border-[#F59E0B]/30',
|
||||
description: 'İcra takipleri, ödeme emrine itiraz, itirazın iptali/kaldırılması, menfi tespit, istihkak ve ihale feshi'
|
||||
},
|
||||
{
|
||||
id: 'iyuk',
|
||||
name: '4. İdare ve Vergi Yargılaması (İYUK)',
|
||||
shortName: 'İdare-Vergi (İYUK)',
|
||||
icon: '🏛️',
|
||||
badgeColor: 'text-[#8B5CF6] bg-[#8B5CF6]/10 border-[#8B5CF6]/30',
|
||||
description: 'İdari iptal ve tam yargı davaları, yürütmenin durdurulması (YD), vergi cezası iptalleri ve Danıştay başvuruları'
|
||||
},
|
||||
{
|
||||
id: 'is',
|
||||
name: '5. İş ve Sosyal Güvenlik Hukuku',
|
||||
shortName: 'İş Hukuku',
|
||||
icon: '💼',
|
||||
badgeColor: 'text-[#10B981] bg-[#10B981]/10 border-[#10B981]/30',
|
||||
description: 'İşe iade, arabuluculuk başvurusu, kıdem-ihbar alacakları, hizmet tespiti ve iş kazası tazminat davaları'
|
||||
},
|
||||
{
|
||||
id: 'tmk',
|
||||
name: '6. Aile ve Kişiler Hukuku (TMK)',
|
||||
shortName: 'Aile (TMK)',
|
||||
icon: '👨👩👧',
|
||||
badgeColor: 'text-[#EC4899] bg-[#EC4899]/10 border-[#EC4899]/30',
|
||||
description: 'Anlaşmalı/çekişmeli boşanma, 6284 koruma kararı, nafaka, velayet, mal rejimi tasfiyesi ve vesayet'
|
||||
},
|
||||
{
|
||||
id: 'ttk',
|
||||
name: '7. Ticaret, Şirketler ve Tüketici Hukuku',
|
||||
shortName: 'Ticaret & Tüketici',
|
||||
icon: '📈',
|
||||
badgeColor: 'text-[#06B6D4] bg-[#06B6D4]/10 border-[#06B6D4]/30',
|
||||
description: 'Tüketici Hakem Heyeti, zayi çek/senet iptali, ayıplı mal tazminatı ve şirket genel kurul iptali'
|
||||
},
|
||||
{
|
||||
id: 'tbk',
|
||||
name: '8. Gayrimenkul ve Eşya Hukuku',
|
||||
shortName: 'Gayrimenkul (TBK)',
|
||||
icon: '🏠',
|
||||
badgeColor: 'text-[#F97316] bg-[#F97316]/10 border-[#F97316]/30',
|
||||
description: 'Kira tahliye, kira tespit/uyarlama, tapu iptal-tescil, izale-i şüyu ve ecrimisil davaları'
|
||||
},
|
||||
{
|
||||
id: 'aym',
|
||||
name: '9. Anayasa Mahkemesi ve Uluslararası Yargı',
|
||||
shortName: 'AYM & AİHM',
|
||||
icon: '🌐',
|
||||
badgeColor: 'text-[#6366F1] bg-[#6366F1]/10 border-[#6366F1]/30',
|
||||
description: 'Anayasa Mahkemesi (AYM) bireysel başvuru formu ve AİHM insan hakları ihlali başvuru dilekçeleri'
|
||||
},
|
||||
{
|
||||
id: 'usul',
|
||||
name: '10. Genel Usul, Kalem ve Duruşma Talepleri',
|
||||
shortName: 'Usul & Kalem Talepleri',
|
||||
icon: '📑',
|
||||
badgeColor: 'text-[#64748B] bg-[#64748B]/10 border-[#64748B]/30',
|
||||
description: 'Mazeret, süre tutum, vekillikten istifa, Mernis tebligat yenileme, dosya inceleme ve gerekçeli karar tebliği'
|
||||
}
|
||||
];
|
||||
|
||||
export const PETITION_TYPES_CATALOG: PetitionTypeItem[] = [
|
||||
// 1. HUKUK YARGILAMASI (HMK)
|
||||
{
|
||||
id: 'hmk-dava',
|
||||
title: 'Dava Dilekçesi',
|
||||
shortTitle: 'Dava Dilekçesi',
|
||||
categoryId: 'hmk',
|
||||
lawRef: 'HMK m. 119',
|
||||
courtType: 'Asliye Hukuk / Asliye Ticaret / İş Mahkemesi',
|
||||
keyElements: [
|
||||
'Mahkeme Adı ve Dosya Konusu',
|
||||
'Tarafların Kimlik/Adres Bilgileri ve T.C. No',
|
||||
'Davanın Konusu ve Dava Değeri',
|
||||
'Somut Vakıalar ve Maddeler Halinde Açıklamalar',
|
||||
'Dayanılan Hukuki Sebepler ve Deliller Listesi',
|
||||
'Açık ve Net Netice-i Talep (Faiz, Vekalet Ücreti, Yargılama Giderleri)'
|
||||
],
|
||||
suggestedNotes: 'Müvekkilin uğradığı maddi zarar ve alacak kalemlerini madde madde belirtiniz.',
|
||||
aiPromptGuide: 'Dava dilekçesini HMK 119 zorunlu unsurlarına tam uyumlu olarak hazırla. Vakıaları kronolojik ve somut olay örgüsüyle açıkla.'
|
||||
},
|
||||
{
|
||||
id: 'hmk-cevap',
|
||||
title: 'Cevap Dilekçesi',
|
||||
shortTitle: 'Cevap Dilekçesi',
|
||||
categoryId: 'hmk',
|
||||
lawRef: 'HMK m. 129',
|
||||
courtType: 'İlgili Hukuk Mahkemesi',
|
||||
keyElements: [
|
||||
'İlk İtirazlar (Yetki, Görev, Derdestlik, Zamanaşımı vb.)',
|
||||
'Davacının İddialarına Karşı Madde Madde Cevap ve İtiraflar/İnkarlar',
|
||||
'Karşı Savunma Delilleri (Yemin, Tanık, Bilirkişi vb.)',
|
||||
'Davanın Reddi ve Yargılama Giderleri Talebi'
|
||||
],
|
||||
suggestedNotes: 'Davacının iddialarından kabul etmediklerinizi ve zamanaşımı/yetki gibi ilk itirazları belirtiniz.',
|
||||
aiPromptGuide: 'HMK 129 uyarınca cevap dilekçesini yapılandır. İlk itirazları en başta ayrı başlık altında ele al. Davacının her bir iddiasını somut delillerle çürüt.'
|
||||
},
|
||||
{
|
||||
id: 'hmk-cevaba-cevap',
|
||||
title: 'Cevaba Cevap (Replik) Dilekçesi',
|
||||
shortTitle: 'Cevaba Cevap',
|
||||
categoryId: 'hmk',
|
||||
lawRef: 'HMK m. 136',
|
||||
courtType: 'İlgili Hukuk Mahkemesi',
|
||||
keyElements: [
|
||||
'Davalının Cevap Dilekçesindeki İddiaların Çürütülmesi',
|
||||
'Davanın Genişletilmesi Yasağı Sınırları İçinde Yeni Açıklamalar',
|
||||
'Davalının İlk İtirazlarının Hukuken Geçersizliğinin İzahı'
|
||||
],
|
||||
suggestedNotes: 'Davalının cevap dilekçesindeki iddialarına karşı cevabi hususları giriniz.',
|
||||
aiPromptGuide: 'Replik dilekçesini davalının cevaplarına nokta atışı karşı argümanlar sunacak şekilde yaz.'
|
||||
},
|
||||
{
|
||||
id: 'hmk-istinaf',
|
||||
title: 'İstinaf Başvuru Dilekçesi (Hukuk)',
|
||||
shortTitle: 'Hukuk İstinaf',
|
||||
categoryId: 'hmk',
|
||||
lawRef: 'HMK m. 342',
|
||||
courtType: 'Bölge Adliye Mahkemesi (BAM) İlgili Hukuk Dairesi',
|
||||
keyElements: [
|
||||
'İlk Derece Mahkemesi Karar Bilgileri (Esas ve Karar No)',
|
||||
'Tebliğ Tarihi ve Süresinde Başvuru Kaydı',
|
||||
'Somut İstinaf Sebepleri (Usul ve Esas Yönünden Hukuka Aykırılıklar)',
|
||||
'Kararın Kaldırılması ve Yeniden Hüküm Kurulması İstemi'
|
||||
],
|
||||
suggestedNotes: 'Mahkeme kararındaki usul ve esas hatalarını ve eksik bilirkişi incelemesini belirtiniz.',
|
||||
aiPromptGuide: 'HMK 342 kapsamında gerekçeli istinaf dilekçesi yaz. Mahkemenin hangi delili eksik incelediğini ve hangi kanun hükmünü yanlış uyguladığını detaylandır.'
|
||||
},
|
||||
{
|
||||
id: 'hmk-temyiz',
|
||||
title: 'Temyiz Başvuru Dilekçesi (Hukuk)',
|
||||
shortTitle: 'Hukuk Temyiz',
|
||||
categoryId: 'hmk',
|
||||
lawRef: 'HMK m. 364',
|
||||
courtType: 'Yargıtay İlgili Hukuk Dairesi',
|
||||
keyElements: [
|
||||
'BAM Karar Bilgileri ve Tebliğ Tarihi',
|
||||
'Bozma Sebepleri (Kanun Maddesinin Yanlış Uygulanması, Görev/Yetki Hatası)',
|
||||
'Yargıtay İçtihatları ile Çelişki Göstergeleri',
|
||||
'BAM Kararının Bozulması Talebi'
|
||||
],
|
||||
suggestedNotes: 'BAM kararının Yargıtay içtihatlarına ve kanuna aykırı kısımlarını giriniz.',
|
||||
aiPromptGuide: 'Yargıtay temyiz incelemesi için HMK 364 gerekçeli temyiz dilekçesi kurgula.'
|
||||
},
|
||||
|
||||
// 2. CEZA YARGILAMASI (CMK & TCK)
|
||||
{
|
||||
id: 'cmk-savunma',
|
||||
title: 'Esas Hakkında Savunma Dilekçesi',
|
||||
shortTitle: 'Esas Hakkında Savunma',
|
||||
categoryId: 'cmk',
|
||||
lawRef: 'CMK m. 216',
|
||||
courtType: 'Ağır Ceza Mahkemesi / Asliye Ceza Mahkemesi',
|
||||
keyElements: [
|
||||
'İddianame ve Mütalaadaki Suçlamaların Analizi',
|
||||
'Maddi ve Manevi Unsur Yokluğu İzahı',
|
||||
'Hukuka Aykırı Delillerin Dosyadan Çıkarılması Talebi (CMK 206/2-a, 217/2)',
|
||||
'Şüpheden Sanık Yararlanır İlkesi Vurgusu',
|
||||
'Öncelikle Beraat, Aksi Halde Lehe Hükümlerin Uygulanması Talebi'
|
||||
],
|
||||
suggestedNotes: 'Mütalaadaki hangi suçlamaların mesnetsiz olduğunu ve sanığın masumiyet delillerini yazınız.',
|
||||
aiPromptGuide: 'CMK 216 esas hakkında savunma dilekçesi oluştur. Dosya kovuşturma evresindedir, kişi "Sanık"tır. Suçun unsurlarının oluşmadığını ve şüpheden sanık yararlanır ilkesini vurgula.'
|
||||
},
|
||||
{
|
||||
id: 'cmk-tutuklama-itiraz',
|
||||
title: 'Tutukluluğa İtiraz ve Tahliye Talebi',
|
||||
shortTitle: 'Tutukluluğa İtiraz',
|
||||
categoryId: 'cmk',
|
||||
lawRef: 'CMK m. 101, 104, 267',
|
||||
courtType: 'Nöbetçi Asliye Ceza / Nöbetçi Ağır Ceza Mahkemesi',
|
||||
keyElements: [
|
||||
'Tutuklama Karar Tarihi ve Gerekçelerinin Hukuki Eleştirisi',
|
||||
'Kaçma ve Delil Karartma Şüphesinin Somut Olmadığı İzahı',
|
||||
'Kuvvetli Suç Şüphesini Gösteren Somut Delil Bulunmadığı',
|
||||
'Ölçülülük İlkesi ve Adli Kontrolün Yeterli Olacağı Vurgusu (CMK 109)',
|
||||
'Tahliye veya Adli Kontrol Talebi'
|
||||
],
|
||||
suggestedNotes: 'Şüphelinin/sanığın sabit ikametgâhı, kaçma şüphesinin bulunmadığı ve delillerin toplandığını belirtiniz.',
|
||||
aiPromptGuide: 'CMK 101-104 tutukluluğa itiraz dilekçesi yaz. AİHM ve AYM içtihatları doğrultusunda tutuklamanın son çare olduğu ve adli kontrol tedbirlerinin ölçülü olacağını vurgula.'
|
||||
},
|
||||
{
|
||||
id: 'cmk-kyok-itiraz',
|
||||
title: 'Kovuşturmaya Yer Olmadığı Kararına (KYOK) İtiraz',
|
||||
shortTitle: 'KYOK İtiraz',
|
||||
categoryId: 'cmk',
|
||||
lawRef: 'CMK m. 173',
|
||||
courtType: 'Nöbetçi Sulh Ceza Hâkimliği',
|
||||
keyElements: [
|
||||
'KYOK Veren Savcılık ve Soruşturma No',
|
||||
'Tebliğ Tarihi ve 15 Günlük Yasal Süre Kaydı',
|
||||
'Eksik Soruşturma İddiası (Toplanmayan Kamera, HTS, Tanık Delilleri)',
|
||||
'Kamu Davası Açılması İçin Yeterli Şüphenin Mevcut Olduğu',
|
||||
'KYOK Kararının Kaldırılması ve Dava Açılması Talebi'
|
||||
],
|
||||
suggestedNotes: 'Savcılığın hangi delilleri toplamadan veya araştırmadan takipsizlik verdiğini yazınız.',
|
||||
aiPromptGuide: 'CMK 173 takipsizlik kararına itiraz dilekçesi yaz. Eksik soruşturma yürütüldüğünü ve kamu davası açmaya yeterli şüphe bulunduğunu net delillerle ortaya koy.'
|
||||
},
|
||||
{
|
||||
id: 'cmk-istinaf',
|
||||
title: 'İstinaf Başvuru Dilekçesi (Ceza)',
|
||||
shortTitle: 'Ceza İstinaf',
|
||||
categoryId: 'cmk',
|
||||
lawRef: 'CMK m. 272, 273',
|
||||
courtType: 'Bölge Adliye Mahkemesi (BAM) İlgili Ceza Dairesi',
|
||||
keyElements: [
|
||||
'İlk Derece Mahkemesi Kararı ve Tebliğ Tarihi',
|
||||
'Hukuka Aykırılık Nedenleri (Eksik İnceleme, Hatalı Niteleme, Savunma Hakkı Kısıtlaması)',
|
||||
'Hükmün Bozulması ve Beraat Talebi'
|
||||
],
|
||||
suggestedNotes: 'Hükümdeki usul ve esas hatalarını, dinlenmeyen tanıkları veya eksik raporları giriniz.',
|
||||
aiPromptGuide: 'CMK 273 uyarınca gerekçeli ceza istinaf dilekçesi oluştur.'
|
||||
},
|
||||
|
||||
// 3. İCRA VE İFLAS (İİK)
|
||||
{
|
||||
id: 'iik-itiraz',
|
||||
title: 'Ödeme Emrine İtiraz Dilekçesi (İlamsız İcra)',
|
||||
shortTitle: 'Ödeme Emrine İtiraz',
|
||||
categoryId: 'iik',
|
||||
lawRef: 'İİK m. 62',
|
||||
courtType: 'İlgili İcra Dairesi',
|
||||
keyElements: [
|
||||
'İcra Dosya No ve Tebliğ Tarihi (7 Günlük Süre)',
|
||||
'Borca, Faize ve Yetkiye Açık ve Koşulsuz İtiraz',
|
||||
'Takibin Durdurulması Talebi'
|
||||
],
|
||||
suggestedNotes: 'Borcun bulunmadığı, faiz oranının fahiş olduğu veya icra dairesinin yetkisiz olduğunu belirtiniz.',
|
||||
aiPromptGuide: 'İİK 62 ilamsız icra takibine itiraz dilekçesi yaz. Borcun tamamına, faize, ferilerine ve icra dairesinin yetkisine itiraz ederek takibin durdurulmasını sağla.'
|
||||
},
|
||||
{
|
||||
id: 'iik-itirazin-iptali',
|
||||
title: 'İtirazın İptali Dava Dilekçesi',
|
||||
shortTitle: 'İtirazın İptali',
|
||||
categoryId: 'iik',
|
||||
lawRef: 'İİK m. 67',
|
||||
courtType: 'Asliye Ticaret / Asliye Hukuk Mahkemesi',
|
||||
keyElements: [
|
||||
'İcra Takibi ve Borçlunun Haksız İtirazı Bilgisi',
|
||||
'Alacağın Likit ve Belirli Olduğunun İspatı (Fatura, Sözleşme, Cari Hesap)',
|
||||
'İtirazın İptali ile Takibin Devamı',
|
||||
'%20\'den Aşağı Olmamak Üzere İcra İnkâr Tazminatı Talebi'
|
||||
],
|
||||
suggestedNotes: 'Alacağın dayanağı olan fatura, teslim tutanağı veya sözleşme detaylarını giriniz.',
|
||||
aiPromptGuide: 'İİK 67 itirazın iptali dava dilekçesi yaz. İtirazın haksız ve kötü niyetli olduğunu, alacağın likit olduğunu kanıtla ve icra inkar tazminatını talep et.'
|
||||
},
|
||||
|
||||
// 4. İDARE VE VERGİ (İYUK)
|
||||
{
|
||||
id: 'iyuk-iptal',
|
||||
title: 'İdari İşlemin İptali ve Yürütmenin Durdurulması (YD)',
|
||||
shortTitle: 'İptal & YD Davası',
|
||||
categoryId: 'iyuk',
|
||||
lawRef: 'İYUK m. 2, 27',
|
||||
courtType: 'Nöbetçi İdare Mahkemesi',
|
||||
keyElements: [
|
||||
'İptali İstenen İdari İşlemin Tarih, Sayı ve Tebliğ Tarihi',
|
||||
'İşlemin Yetki, Şekil, Sebep, Konu ve Maksat Yönlerinden Sakatlığı',
|
||||
'Telafisi Güç veya İmkânsız Zarar ve Açık Hukuka Aykırılık Şartlarının Gerçekleştiği',
|
||||
'Öncelikle YD Kararı Verilmesi, Neticeten İşlemin İptali Talebi'
|
||||
],
|
||||
suggestedNotes: 'İdari işlemin hangi hukuka aykırılıklar içerdiğini ve derhal durdurulmazsa doğacak zararları yazınız.',
|
||||
aiPromptGuide: 'İYUK 2 ve 27 uyarınca yürütmenin durdurulması istemli idari iptal davası dilekçesi hazırla.'
|
||||
},
|
||||
|
||||
// 5. İŞ VE SOSYAL GÜVENLİK
|
||||
{
|
||||
id: 'is-ise-iade',
|
||||
title: 'İşe İade Dava Dilekçesi',
|
||||
shortTitle: 'İşe İade Davası',
|
||||
categoryId: 'is',
|
||||
lawRef: 'İş Kanunu m. 18-21, 7036 sayılı Kanun',
|
||||
courtType: 'Nöbetçi İş Mahkemesi',
|
||||
keyElements: [
|
||||
'Fesih Bildirim Tarihi ve Arabuluculuk Son Tutanağı Tarihi (Süre Kaydı)',
|
||||
'Feshin Geçerli Bir Sebebe Dayanmadığı',
|
||||
'Feshin Geçersizliğinin Tespiti ve İşe İade',
|
||||
'4 Aya Kadar Boşta Geçen Süre Ücreti ve 4-8 Ay Arası İşe Başlatmama Tazminatı'
|
||||
],
|
||||
suggestedNotes: 'İşçinin kıdemi, işyerindeki çalışan sayısı ve feshin haksız gerekçesini giriniz.',
|
||||
aiPromptGuide: 'İş Kanunu m. 18-21 uyarınca işe iade dava dilekçesi kurgula.'
|
||||
},
|
||||
|
||||
// 6. AİLE VE KİŞİLER HUKUKU (TMK)
|
||||
{
|
||||
id: 'tmk-bosanma-cekimeli',
|
||||
title: 'Çekişmeli Boşanma Dava Dilekçesi',
|
||||
shortTitle: 'Çekişmeli Boşanma',
|
||||
categoryId: 'tmk',
|
||||
lawRef: 'TMK m. 166',
|
||||
courtType: 'Nöbetçi Aile Mahkemesi',
|
||||
keyElements: [
|
||||
'Evlilik Birliğinin Temelden Sarsılması Vakıaları (Kronolojik Olaylar)',
|
||||
'Kusur Durumu ve Karşı Tarafın Ağır Kusuru',
|
||||
'Müşterek Çocukların Tedbiren ve Kalıcı Velayeti Talebi',
|
||||
'Tedbir, İştirak ve Yoksulluk Nafakası Talepleri',
|
||||
'Maddi ve Manevi Tazminat Talepleri (TMK 174/1-2)'
|
||||
],
|
||||
suggestedNotes: 'Karşı tarafın kusurlu davranışlarını, çocukların durumunu ve nafaka/tazminat taleplerinizi yazınız.',
|
||||
aiPromptGuide: 'TMK 166/1 evlilik birliğinin temelden sarsılması nedeniyle çekişmeli boşanma dilekçesi yaz.'
|
||||
},
|
||||
|
||||
// 7. GAYRİMENKUL & KİRA (TBK)
|
||||
{
|
||||
id: 'tbk-tahliye-ihtiyac',
|
||||
title: 'Konut/İşyeri İhtiyacı Nedeniyle Tahliye Davası',
|
||||
shortTitle: 'İhtiyaç Nedeniyle Tahliye',
|
||||
categoryId: 'tbk',
|
||||
lawRef: 'TBK m. 350',
|
||||
courtType: 'Nöbetçi Sulh Hukuk Mahkemesi',
|
||||
keyElements: [
|
||||
'Kira Sözleşmesi Bilgileri ve Kira Başlangıç Tarihi',
|
||||
'İhtiyacın Gerçek, Samimi ve Zorunlu Olduğunun Somut Kanıtları',
|
||||
'Kira Dönemi Sonu ve Yasal Süresinde Açılan Dava',
|
||||
'Kiralananın Tahliyesi ve Teslimi İstemi'
|
||||
],
|
||||
suggestedNotes: 'İhtiyaç sahibinin (ev sahibi veya 1. derece yakını) neden bu eve/işyerine zorunlu ihtiyacı olduğunu yazınız.',
|
||||
aiPromptGuide: 'TBK 350 uyarınca konut veya işyeri ihtiyacı sebebiyle tahliye dava dilekçesi hazırla.'
|
||||
},
|
||||
|
||||
// 8. USUL & KALEM TALEPLERİ
|
||||
{
|
||||
id: 'usul-mazeret',
|
||||
title: 'Mesleki Mazeret Bildirim Dilekçesi',
|
||||
shortTitle: 'Mazeret Dilekçesi',
|
||||
categoryId: 'usul',
|
||||
lawRef: 'HMK / CMK Usul Hükümleri',
|
||||
courtType: 'İlgili Mahkeme',
|
||||
keyElements: [
|
||||
'Duruşma Gün ve Saati Bilgisi',
|
||||
'Mesleki Mazeret Sebebi (Çakışan Duruşma Mahkeme ve Dosya Bilgisi)',
|
||||
'Mazeretin Kabulü ve Yeni Duruşma Gününün UYAP Üzerinden Öğrenilmesine Karar Verilmesi'
|
||||
],
|
||||
suggestedNotes: 'Çakışan diğer duruşmanızın mahkemesini ve dosya numarasını belirtiniz.',
|
||||
aiPromptGuide: 'Standart mesleki mazeret dilekçesi hazırla. Kısa, net ve resmî dille mazeretin kabulünü talep et.'
|
||||
},
|
||||
{
|
||||
id: 'usul-sure-tutum',
|
||||
title: 'Süre Tutum (Müddet-i Muhafaza) Dilekçesi',
|
||||
shortTitle: 'Süre Tutum Dilekçesi',
|
||||
categoryId: 'usul',
|
||||
lawRef: 'CMK m. 273 / HMK m. 342',
|
||||
courtType: 'Kararı Veren Mahkeme',
|
||||
keyElements: [
|
||||
'Tefhim Edilen Kısa Karar Bilgisi',
|
||||
'Yasal İstinaf/Temyiz Süresinin Korunması Kaydı',
|
||||
'Gerekçeli Kararın Tebliği Akabinde Ayrıntılı Gerekçeli İstinaf/Temyiz Dilekçesi Sunulacağı Beyanı'
|
||||
],
|
||||
suggestedNotes: 'Kısa kararın tefhim tarihini belirtiniz.',
|
||||
aiPromptGuide: 'Süre tutum dilekçesi yaz. Gerekçeli kararın tebliğine kadar istinaf süresinin tutulduğunu resmî üslupla beyan et.'
|
||||
}
|
||||
];
|
||||
|
||||
export function getPetitionById(idOrTitle: string): PetitionTypeItem | undefined {
|
||||
if (!idOrTitle) return undefined;
|
||||
const norm = idOrTitle.trim().toLowerCase();
|
||||
return PETITION_TYPES_CATALOG.find(
|
||||
(p) =>
|
||||
p.id.toLowerCase() === norm ||
|
||||
p.title.toLowerCase() === norm ||
|
||||
p.shortTitle.toLowerCase() === norm ||
|
||||
norm.includes(p.title.toLowerCase())
|
||||
);
|
||||
}
|
||||
|
||||
export function resolvePetitionContext(petitionIdOrTitle: string, userNotes?: string): {
|
||||
systemPromptAddon: string;
|
||||
enhancedNotes: string;
|
||||
selectedItem?: PetitionTypeItem;
|
||||
} {
|
||||
const item = getPetitionById(petitionIdOrTitle);
|
||||
if (!item) {
|
||||
return {
|
||||
systemPromptAddon: '',
|
||||
enhancedNotes: userNotes || ''
|
||||
};
|
||||
}
|
||||
|
||||
const isCmk = item.categoryId === 'cmk';
|
||||
const cmkAddon = isCmk ? `
|
||||
[CEZA MUHAKEMESİ HUKUKU (CMK & TCK) KESİN KURALLARI]:
|
||||
1. Soruşturma aşamasında kişi "Şüpheli", iddianamenin kabulü / tensip zaptından sonraki kovuşturma aşamasında "Sanık", kesinleşen hüküm sonrası "Hükümlü" olarak adlandırılır.
|
||||
2. Mahkemede dava açıldıktan sonra dosya asla "iddianame aşamasında" veya "soruşturma evresinde" olamaz; dosya "Kovuşturma Evresi"ndedir.
|
||||
3. İstinabe / talimat evrakları kovuşturma safhasında bir delil toplama işlemidir.
|
||||
` : '';
|
||||
|
||||
const systemPromptAddon = `
|
||||
${cmkAddon}
|
||||
DİLEKÇE TÜRÜ ÖZEL HUKUKİ TALİMATI:
|
||||
Seçilen Dilekçe Türü: ${item.title} (${item.lawRef})
|
||||
Hedef Görevli Makam: ${item.courtType}
|
||||
Zorunlu Hukuki Unsurlar & Kontrol Listesi:
|
||||
${item.keyElements.map(el => `- ${el}`).join('\n')}
|
||||
|
||||
DİLEKÇE OLUŞTURMA REHBERİ:
|
||||
${item.aiPromptGuide}
|
||||
`.trim();
|
||||
|
||||
const enhancedNotes = `
|
||||
[Dilekçe Türü: ${item.title} - Dayanak: ${item.lawRef}]
|
||||
[Görevli Makam: ${item.courtType}]
|
||||
Zorunlu Unsurlar: ${item.keyElements.join(', ')}
|
||||
${userNotes && userNotes.trim() ? `Avukat Notları & Ek Talepler:\n${userNotes.trim()}` : ''}
|
||||
`.trim();
|
||||
|
||||
return {
|
||||
systemPromptAddon,
|
||||
enhancedNotes,
|
||||
selectedItem: item
|
||||
};
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
import { Router } from 'express';
|
||||
import { requireAuth } from '../middleware/auth';
|
||||
import { generateDraft, generateAngarya } from '../controllers/drafting.controller';
|
||||
import { generateDraft, generateAngarya, getPetitionCatalog } from '../controllers/drafting.controller';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/catalog', getPetitionCatalog);
|
||||
router.post('/generate', requireAuth, generateDraft);
|
||||
router.post('/generate-angarya', requireAuth, generateAngarya);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user