trkit
Menü

Paketler

@trkit-app-pack/legal

KVKK ve e-ticaret yasal metin şablonları, çerez onayı ve onay kayıtları.

.mdChatGPT'de açClaude'da aç
npm install @trkit-app-pack/legal

Şablonlar hukuki danışmanlık yerine geçmez. Yayına almadan önce bir avukata kontrol ettirin.

Şablonlar

KimlikBaşlıkDayanak
kvkk-aydinlatmaKVKK Aydınlatma Metni6698 md. 10, Aydınlatma Tebliği
acik-rizaAçık Rıza Metni6698 md. 5/1, 6, 9
cerez-politikasiÇerez PolitikasıKVKK Çerez Rehberi
mesafeli-satisMesafeli Satış Sözleşmesi6502, Mesafeli Sözleşmeler Yönetmeliği
on-bilgilendirmeÖn Bilgilendirme FormuMesafeli Sözleşmeler Yönetmeliği md. 5–6
teslimat-iadeTeslimat ve İade Koşulları6502, Yönetmelik
ticari-iletiTicari Elektronik İleti Onayı6563 md. 6–8, İYS
kvkk-basvuruKVKK Başvuru Formu6698 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 verilerHukuki sebep
kimlikAd, soyad, fatura için TCKNSözleşme, hukuki yükümlülük
iletisimTelefon, e-posta, adresSözleşme, meşru menfaat
musteri-islemSipariş geçmişi, taleplerSözleşme, meşru menfaat
finansFatura bilgileri, iade IBAN'ıSözleşme, hukuki yükümlülük
islem-guvenligiIP, log kayıtlarıHukuki yükümlülük (5651), meşru menfaat
pazarlamaTercihler, çerez verileriAçık rıza
hukuki-islemYazışmalarHakkın tesisi, hukuki yükümlülük
lokasyonKonumAçık rıza
gorsel-isitselKamera, çağrı kaydıMeşru menfaat
saglikSağ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.