npm install @trkit-app-pack/legalŞablonlar hukuki danışmanlık yerine geçmez. Yayına almadan önce bir avukata kontrol ettirin.
Şablonlar
| Kimlik | Başlık | Dayanak |
|---|---|---|
kvkk-aydinlatma | KVKK Aydınlatma Metni | 6698 md. 10, Aydınlatma Tebliği |
acik-riza | Açık Rıza Metni | 6698 md. 5/1, 6, 9 |
cerez-politikasi | Çerez Politikası | KVKK Çerez Rehberi |
mesafeli-satis | Mesafeli Satış Sözleşmesi | 6502, Mesafeli Sözleşmeler Yönetmeliği |
on-bilgilendirme | Ön Bilgilendirme Formu | Mesafeli Sözleşmeler Yönetmeliği md. 5–6 |
teslimat-iade | Teslimat ve İade Koşulları | 6502, Yönetmelik |
ticari-ileti | Ticari Elektronik İleti Onayı | 6563 md. 6–8, İYS |
kvkk-basvuru | KVKK Başvuru Formu | 6698 md. 11, 13 |
Her belgenin templateVersion ve legalBasis alanları vardır. Mevzuat değiştiğinde şablon sürümü artar.
Üretme
import { generate, generateAll, toHtml, toMarkdown, toPlainText } from "@trkit-app-pack/legal";
import config from "@/trkit.config";
const { document, warnings } = generate("kvkk-aydinlatma", config);
toHtml(document); // güvenli (kaçışlı) HTML
toMarkdown(document);
toPlainText(document);
// Sipariş bilgisiyle (mesafeli-satis, on-bilgilendirme)
generate("mesafeli-satis", config, { order });Eksik bilgiler metinde [MERSİS NO] gibi görünür ve warnings dizisinde döner.
Yapılandırma
interface LegalConfig {
company: {
unvan: string; marka?: string; mersis?: string; vergiDairesi?: string; vergiNo?: string;
adres: string; telefon?: string; eposta: string; kvkkEposta?: string; kep?: string;
website: string; sahis?: boolean; // şahıs şirketi: MERSİS yerine vergi no
};
kvkk?: {
veriKategorileri?: DataCategoryKey[];
aktarimlar?: { alici: string; amac: string; yurtDisi?: boolean }[];
yurtDisiAktarim?: { hizmetler: string[]; dayanak: "yeterlilik" | "standart-sozlesme" | "baglayici-kurallar" | "arizi-acik-riza" };
verbisNo?: string;
kanallar?: string[];
};
satis?: {
teslimatSuresiGun?: number; // en fazla 30
kargoyaVerilisGun?: number;
kargoFirmalari?: string[];
iadeKargo?: { firma: string; kod?: string };
odemeYontemleri?: string[];
dijitalUrun?: boolean;
};
cerezler?: { ad: string; saglayici: string; amac: string; sure: string; kategori: "zorunlu" | "fonksiyonel" | "analitik" | "pazarlama" }[];
ticariIleti?: { kanallar?: ("sms" | "eposta" | "arama")[]; iysMarkaKodu?: string };
pay?: { provider: string }; // aktarım listesine eklenir
sms?: { provider: string };
guncellemeTarihi?: string; // YYYY-AA-GG
}Veri kategorileri
| Anahtar | Örnek veriler | Hukuki sebep |
|---|---|---|
kimlik | Ad, soyad, fatura için TCKN | Sözleşme, hukuki yükümlülük |
iletisim | Telefon, e-posta, adres | Sözleşme, meşru menfaat |
musteri-islem | Sipariş geçmişi, talepler | Sözleşme, meşru menfaat |
finans | Fatura bilgileri, iade IBAN'ı | Sözleşme, hukuki yükümlülük |
islem-guvenligi | IP, log kayıtları | Hukuki yükümlülük (5651), meşru menfaat |
pazarlama | Tercihler, çerez verileri | Açık rıza |
hukuki-islem | Yazışmalar | Hakkın tesisi, hukuki yükümlülük |
lokasyon | Konum | Açık rıza |
gorsel-isitsel | Kamera, çağrı kaydı | Meşru menfaat |
saglik | Sağlık bilgileri (özel nitelikli) | Açık rıza + ek önlemler |
Açık rıza gerektiren kategoriler açık rıza metnine otomatik eklenir.
Çerez onayı
import { parseCookieConsent, serializeCookieConsent, isAllowed, COOKIE_CONSENT_NAME } from "@trkit-app-pack/legal";React bileşeni için: Çerez banner'ı.
Onay kayıtları
import { createConsentRecord, documentHash, latestByPurpose, type ConsentStore } from "@trkit-app-pack/legal";
const record = await createConsentRecord({
subjectId: "u1",
purpose: "ticari-ileti:sms", // veya "kvkk:acik-riza", "cookie:analitik"
granted: true,
document: "ticari-ileti@2024.01.1",
documentHash: await documentHash(document),
source: "kayit-formu",
ip, salt: process.env.CONSENT_SALT!,
});ConsentStore arayüzü (append, latest) ile kendi veritabanınıza bağlayın. Kayıtları güncellemeyin; her değişiklik yeni bir kayıttır.