Ana içeriğe geç

📑 Okul Evrakları Yönetimi ve Otonom Dağıtım Ekosistemi

Okul Evrakları Yönetimi ve Otonom Dağıtım Ekosistemi; ilkokul zümre öğretmenlerinin her hafta karşılaştığı resmi evrak, günlük plan, Okul Temelli Planlama (OTP), kulüp/egzersiz ve sınıf defteri doldurma yükünü tamamen ortadan kaldıran, python-docx XML manipülasyonu ve 7/24 otonom Telegram botu ile güçlendirilmiş bağımsız bir idari otomasyon altyapısıdır.

  • Teknoloji Yığını


    Python 3.11+, python-docx (XML düzeyi manipülasyon), poppler-utils (pdftotext), Telegram Bot API, Systemd Servisi, JSON Yapılandırması.

  • Mizanpaj & Standart


    ISO Kalite Yönetim Standardı Slim Antet (5x130 dxa), 6.5 pt font kilidi, dinamik sayfa numaraları, 0.35 inç yazıcı güvenli marjinler.

  • Otonom Dağıtım


    Pazar akşamları haftalık hibrit teslimat (1 Defter Çizelgesi Word + 1 Haftalık Planlar ZIP), kişiye özel geçmiş arşiv paketi, acil durum kilidi.

  • Pedagojik Çerçeve


    Türkiye Yüzyılı Maarif Modeli Okul Temelli Planlama (OTP 18 Plan), Çocuk Kulübü (Etüt), Yaratıcı Drama Egzersizi, Aylık Rehberlik Raporları.


💡 Neden Yaptık? (Problem ve İhtiyaç Analizi)

Eğitim öğretim süreçlerinin en kıymetli unsuru öğretmenin sınıfta öğrenciyle geçirdiği nitelikli zamandır. Ancak günümüz okul ortamında bürokratik kırtasiye yükü, öğretmenlerin enerjisini tüketen ciddi bir verimsizlik kaynağı haline gelmiştir:

Geleneksel Evrak Yönetimindeki 5 Kronik Tıkanıklık

  1. Haftalık Kırtasiye ve Zaman Stresi: Bir sınıf öğretmeni her hafta 6 farklı branşın günlük planını, kulüp planını, drama egzersizini, sınıf defteri kazanımlarını ve ay sonlarında rehberlik raporlarını hazırlamak için haftada en az 2-3 saatini ekran başında harcamaktadır.
  2. Word ve ONLYOFFICE Font Bozulması (11 pt Calibri Kâbusu): Farklı kaynaklardan indirilen Word şablonları düzenlenirken metin hücreleri Word'ün varsayılan 11 pt Calibri fontuna düşmekte; tablo yükseklikleri patlamakta, tek sayfaya sığması gereken belgeler 2-3 sayfaya taşarak yazıcıda kâğıt israfına yol açmaktadır.
  3. Yazıcı Marjin Kesilmeleri: Standart 1.0 inç (2.54 cm) kenar boşlukları yatay planlarda tablo alanını aşırı daraltırken; kenar boşluğu bırakılmadığında ise resmi antet ve tablolar yazıcı tamburu tarafından kenarlardan kesilmektedir.
  4. Maarif Modeli OTP ve Rehberlik Kazanımlarının Dağınıklığı: Türkiye Yüzyılı Maarif Modeli kapsamında uygulanan 18 Okul Temelli Planlama (OTP) etkinliği ve 37 haftalık rehberlik kazanımları farklı genelgelerde ve PDF'lerde dağınık durmakta; hangi hafta hangi ders saatinde ne işleneceği belirsiz kalmaktadır.
  5. Sınıf Defteri Doldurma Çilesi: 30 saatlik haftalık müfredat dersi, 10 saatlik çocuk kulübü ve drama egzersizi kazanımlarını öğretmenin kendi günlük ders programı sırasıyla deftere geçirmesi; resmi tatil günlerinde (örneğin 29 Ekim) kazanımların kayması nedeniyle her cuma günü öğretmenler için yorucu bir bulmacaya dönüşmektedir.
  6. Zümre İçi Dosya Kirliliği ve Kaybolan Belgeler: WhatsApp gruplarında paylaşılan dosyalar zaman aşımına uğramakta, her öğretmende farklı bir versiyon kalmakta, okul idaresine teslim edilen evraklar arasında imza ve başlık uyumsuzluğu yaşanmaktadır.

🛠️ Neler Yaptık? (Çözüm ve Sistem Mimarisi)

Bu sorunları kökünden çözmek amacıyla; ham evrakların içeri alınmasından, XML düzeyinde ISO standartlarına kavuşturulmasına ve Telegram üzerinden otonom dağıtımına kadar uzanan uçtan uca entegre bir otomasyon boru hattı kurulmuştur:

flowchart TD
    subgraph Girdi ["📥 1. Ham Evrak & Kaynaklar"]
        RAW["📁 00_GELEN_EVRAKLAR<br>• MEBders Günlük Planları<br>• Müfredat Kazanım PDF'leri<br>• Kulüp & Drama Şablonları"]
        DATA["📊 Veri Kaynakları<br>• OTP 18 Etkinlik Veri Havuzu<br>• 37 Haftalık Rehberlik Takvimi<br>• Haftalık Ders Programı Matrisi"]
    end

    subgraph Cekirdek ["⚙️ 2. Python-Docx & XML Motoru"]
        ANTET["📐 ISO Slim Antet Motoru<br>• 5x130 dxa Satır Yüksekliği<br>• 6.5 pt Kilitli Font & PAGE/NUMPAGES<br>• 0.35 inç Yazıcı Güvenli Marjin"]
        OTP_ENGINE["🧠 OTP & Kazanım Eşleştirici<br>• 18 Müstakil OTP Günlük Planı<br>• Müfredat Derslerine OTP Entegrasyonu"]
        DEFTER["📋 Defter Çizelgesi Jeneratörü<br>• 9 Ders Saati x 5 Gün Matrisi<br>• Sıfır Boş Hücre Fallback Algoritması"]
        ZUMRE_BLOCK["✍️ Standart Zümre Onay Bloğu<br>• Yatay cantSplit Tek Parça Tablo<br>• Tüm Zümre Öğretmenleri + Müdür"]
    end

    subgraph DagitimHatti ["🚀 3. Hibrit Dağıtım & Bot Servisi"]
        TELEGRAM["🤖 7/24 Telegram Bot Servisi<br>• Kişiye Özel Kayıt & Tanıma<br>• 30 sn Nezaket Bekleme Aralığı<br>• Acil Durum Emniyet Kilidi"]
        HIBRIT["📦 Hibrit Paketleme<br>• 1 Word Defter Doldurma Çizelgesi<br>• 1 Haftalık Planlar ZIP Arşivi<br>• 97+ Dosyalık Geçmiş Arşiv ZIP"]
        CLEANUP["🧹 Otomatik Arşivleme & Temizlik<br>• Hafta Geçince ZIP'e Ekleme<br>• Diskten Otomatik Klasör Silme"]
    end

    RAW --> ANTET
    DATA --> OTP_ENGINE
    DATA --> DEFTER
    ANTET --> ZUMRE_BLOCK
    OTP_ENGINE --> DEFTER
    ZUMRE_BLOCK --> HIBRIT
    DEFTER --> HIBRIT
    HIBRIT --> TELEGRAM
    TELEGRAM --> CLEANUP

1. 35+ Yıllık Planın Standartlaştırılması

Zümredeki tüm branşların (Türkçe, Matematik, Hayat Bilgisi, Fen Bilimleri, İngilizce, Görsel Sanatlar, Müzik, Beden Eğitimi, Rehberlik) yıllık planları taranmış; eski şablon artıkları, yüzen tablolar (w:tblpPr) ve dağınık imzalar temizlenerek tek tip zümre onay bloğu yerleştirilmiştir. Sayfa sonlarında bölünmeyi engelleyen (w:cantSplit) yapıda tüm zümre öğretmenleri ve okul müdürü onay tablosu belgenin sonuna mühürlenmiştir.

2. Maarif Modeli OTP 18 Günlük Ders Planı

Türkiye Yüzyılı Maarif Modeli standartlarında; Dikkati Çekme, Güdüleme, İstasyon Çalışmaları, Rubrik ve Kontrol Listelerini içeren 18 adet müstakil günlük ders planı üretilmiş; ayrıca bu etkinlikler yıllık takvimdeki 9 stratejik haftanın ilgili ders saatlerine (Türkçe, Matematik, Fen, Beden vb.) doğrudan entegre edilmiştir.

3. 148 Çocuk Kulübü ve Yaratıcı Drama Günlük Planı

37 haftalık eğitim yılı boyunca her hafta 4 ayrı ders saati için (Etüt Beden Eğitimi 5 saat, Etüt Görsel Sanatlar 3 saat, Etüt Müzik 2 saat, Egzersiz Yaratıcı Drama 5 saat) toplam 148 müstakil Word planı üretilmiş ve öğretmenlerin şubelerine özel onay bloklarıyla arşivlenmiştir.

4. Tek Sayfa A4 Yatay "Defter Doldurma Çizelgesi"

Öğretmenin her gün masasında duracak tek bir yaprak A4 yatay çizelge geliştirilmiştir. Günde 9 saat (6 saat temel müfredat + 2 saat etüt + 1 saat drama) olmak üzere haftalık 45 ders hücresi; öğretmenin birebir ders programı sırasıyla MEB kazanımları, kulüp etkinlikleri ve OTP yönergeleriyle doldurulur.

5. ISO Kalite Standardı Slim Antet Sistemi

Word belgelerinin üst bilgisinde yaşanan bozulmaları önlemek amacıyla 5x130 dxa ve 6.5 pt kuralı geliştirilmiştir: - 5 satırın tamamı eşit 130 dxa satır yüksekliğinde kilitlenir. - Üst bilgi etiketleri ve dinamik PAGE / NUMPAGES alan kodları 6.5 pt (sz="13") olarak XML seviyesinde sabitlenir. Bu sayede Word varsayılanı olan 11 pt'ye dönüş engellenir. - Sayfa kenar boşlukları yazıcı kesilme riskini sıfırlayan 0.35 inç (~9 mm) olarak standardize edilmiştir.

6. 7/24 Otonom Hibrit Telegram Botu

Sistemin kalbinde, öğretmenlerle samimi ve kesintisiz iletişim kuran bir Telegram bot servisi çalışır: - Hibrit Dağıtım: Sohbet kirliliğini önlemek için haftalık teslimat yalnızca 2 dosyaya indirgenmiştir: Anında açılabilsin diye 1 adet doğrudan Word Defter Çizelgesi ve arşivlenmek üzere 1 adet Haftalık Planlar ZIP Paketi. - Kişiye Özel Geçmiş Arşiv: Bota yeni katılan bir öğretmen adını yazdığı anda geçmiş tüm haftaların planlarını ve rehberlik raporlarını tek bir ZIP paketi olarak alır. - 30 Saniye Nezaket Aralığı: Telegram API hız sınırlarına takılmamak ve öğretmenin bildirim yağmuruna tutulmasını önlemek için ardışık gönderimler arasına 30 saniyelik bekleme konulmuştur. - Emniyet Kilidi (otomatik_gonderim_aktif): Yetkisiz veya zamansız gönderimleri engellemek için dinamik JSON emniyet kilidi ile korunur.


🚀 Nasıl Yaptık? (Adım Adım Kurulum ve Yeniden Üretim Kılavuzu)

Bu sistemi kendi okulunuzda veya zümrenizde sıfırdan kurup çalıştırmak için aşağıdaki adımları sırasıyla uygulayabilirsiniz.

Adım 1: Dizin Hiyerarşisi ve Evrak Havuzu Mantığı

Evrak karmaşasını önlemek için 00_GELEN_EVRAKLAR gelen kutusu ve GORULDU_ISLENDI arşivi mantığı kullanılır:

mkdir -p Okul_Evraklari/{00_GELEN_EVRAKLAR/GORULDU_ISLENDI,01_Planlar_ve_Programlar,08_Sablonlar}
Okul_Evraklari/
├── 00_GELEN_EVRAKLAR/             # Ham Word/PDF yüklemeleri (işlenince arşive taşınır)
│   └── GORULDU_ISLENDI/           # İşlenmiş orijinal dosyalar ve ISLENENLER_KAYDI.md
├── 01_Planlar_ve_Programlar/
│   ├── 01_Yillik_Planlar/         # Zümre onaylı yıllık planlar
│   ├── 02_Gunluk_Planlar/         # Haftalık MEBders + OTP planları
│   └── 03_Defter_Cizelgeleri/     # A4 Yatay tek sayfa defter çizelgeleri
├── 08_Sablonlar/                  # ISO slim antet ve resmi okul şablonları
└── telegram_bot_servisi.py        # Otonom Telegram dağıtım motoru

Adım 2: python-docx ile Word XML Manipülasyonu

Word'ün görsel arayüzü tablo satır yüksekliklerini ve font boyutlarını çoğu zaman bozar. Kalıcı ve bozulmayan bir antet oluşturmak için doğrudan lxml / OpenXML etiketleri yazılır:

# antet_sistemi.py
import docx
from docx.oxml import OxmlElement, parse_xml
from docx.oxml.ns import qn, nsdecls
from docx.shared import Inches

def apply_iso_slim_header(doc, doc_no="ÖRN.PLN.001", doc_name="GÜNLÜK DERS PLANI"):
    section = doc.sections[0]
    section.header_distance = Inches(0.0)
    section.top_margin = Inches(0.78)
    section.bottom_margin = Inches(0.35)
    section.left_margin = Inches(0.35)
    section.right_margin = Inches(0.35)

    header = section.header
    # Eski üst bilgileri temizle
    for p in header.paragraphs:
        p._element.getparent().remove(p._element)

    # 5 satır x 3 sütun antet tablosu
    table = header.add_table(rows=5, cols=3, width=Inches(7.55))
    tblPr = table._element.tblPr

    # 5 satırın tamamını 130 dxa (~6.5 pt yüksekliğe) kilitle ve bölünmeyi engelle
    for row in table.rows:
        trPr = row._element.get_or_add_trPr()
        trHeight = parse_xml(f'<w:trHeight {nsdecls("w")} w:val="130" w:hRule="exact"/>')
        cantSplit = parse_xml(f'<w:cantSplit {nsdecls("w")}/>')
        trPr.append(trHeight)
        trPr.append(cantSplit)

    # Sağ meta sütununda fontu 6.5 pt (sz="13") olarak XML düzeyinde sabitle
    def set_meta_text(cell, label, val):
        p = cell.paragraphs[0]
        p.text = ""
        pPr = p._element.get_or_add_pPr()
        spacing = parse_xml(f'<w:spacing {nsdecls("w")} w:before="0" w:after="0" w:line="120" w:lineRule="exact"/>')
        pPr.append(spacing)

        # 6.5 pt Times New Roman kuralı
        r = p.add_run(f"{label}: {val}")
        r.font.name = "Times New Roman"
        rPr = r._element.get_or_add_rPr()
        sz = parse_xml(f'<w:sz {nsdecls("w")} w:val="13"/>')
        rPr.append(sz)

    set_meta_text(table.cell(0, 2), "Doküman No", doc_no)
    set_meta_text(table.cell(1, 2), "İlk Yayın Tarihi", "01.09.2026")
    set_meta_text(table.cell(2, 2), "Revizyon No", "000")

Adım 3: Maarif Modeli OTP ve Haftalık Kazanım Pipeline'ı

18 Okul Temelli Planlama etkinliğinin yıllık plana dağılımı sözlük matrisi ile modellenir ve haftalık planlar oluşturulurken ilgili derse otomatik enjekte edilir:

# otp_veri_kaynagi.py
OTP_ETKINLIK_HAVUZU = {
    1: {
        "kod": "BO.3.1.2",
        "ad": "Adil Oyun Anayasası ve İş Birlikli Oyunlar",
        "ders": "BEDEN EĞİTİMİ",
        "hafta": 7,
        "sure": 2, # ders saati
        "kazanim": "Oyun kurallarına uyma, adil oyun anlayışı geliştirme ve takım içi iş birliği sergileme."
    },
    2: {
        "kod": "F.3.2.1",
        "ad": "Beş Duyu Laboratuvarı ve Bilim İnsanı Dedektifleri",
        "ders": "FEN BİLİMLERİ",
        "hafta": 7,
        "sure": 1,
        "kazanim": "Duyu organlarının sağlığını korumak için yapılması gerekenleri deneylerle açıklar."
    }
}

Adım 4: Akıllı Defter Doldurma Çizelgesi Üretimi

Resmi tatiller, yarım günler ve eksik PDF verilerinde tablonun boş kalmasını engelleyen akıllı fallback algoritması:

# uret_defter_doldurma_cizelgeleri.py (Özet Mantık)
def get_topic(subj, pool_bucket, last_seen_topics, subject_fallbacks):
    # 1. Öncelik: Havuzda o haftaya ait kazanım varsa tüket
    if pool_bucket.get(subj):
        topic = pool_bucket[subj].pop(0)
        last_seen_topics[subj] = topic
        return topic

    # 2. Öncelik: Havuz boşaldıysa aynı dersin bir önceki saatteki konusunu sürdür
    if subj in last_seen_topics and last_seen_topics[subj]:
        return f"{last_seen_topics[subj]} (Uygulama ve Değerlendirme)"

    # 3. Öncelik: Ders bazlı varsayılan pedagojik yedek metin
    return subject_fallbacks.get(subj, "Müfredat kazanımları doğrultusunda pekiştirme çalışmaları.")

Adım 5: Telegram Bot Servisi ve Zamanlayıcı Mimarisi

Öğretmenleri tanıyan, 30 saniye aralıklarla dosyaları ileten ve emniyet kilidi sunan bot servisi:

# telegram_bot_servisi.py
import json, time, requests

def load_config():
    with open("telegram_config.json", "r", encoding="utf-8") as f:
        return json.load(f)

def send_telegram_document(token, chat_id, file_path, caption=""):
    url = f"https://api.telegram.org/bot{token}/sendDocument"
    with open(file_path, "rb") as f:
        response = requests.post(
            url,
            data={"chat_id": chat_id, "caption": caption},
            files={"document": f},
            timeout=60
        )
    return response.json()

def evraklari_gonder(token, chat_id, ogretmen_adi):
    cfg = load_config()
    if not cfg.get("otomatik_gonderim_aktif", False):
        print(f"[EMNİYET KİLİDİ AKTİF] {ogretmen_adi} için gönderim yapılmadı.")
        return

    bekleme = cfg.get("gonderim_araligi_saniye", 30)

    # 1. Tek Sayfa Defter Çizelgesi Word
    defter_docx = f"cizelgeler/Defter_Cizelgesi_{ogretmen_adi}.docx"
    send_telegram_document(token, chat_id, defter_docx, "📑 Bu Haftanın Defter Doldurma Çizelgesi")
    time.sleep(bekleme)

    # 2. Haftalık Tüm Planlar ZIP Paketi
    planlar_zip = f"arsivler/Haftalik_Planlar_{ogretmen_adi}.zip"
    send_telegram_document(token, chat_id, planlar_zip, "📦 Haftalık Ders Planları Arşivi")

telegram_config.json yapılandırma şablonu:

{
  "bot_token": "123456789:ABCdefGHIjklMNOpqrsTUVwxyz",
  "bot_username": "OrnekOkulEvrakBot",
  "otomatik_gonderim_aktif": true,
  "gonderim_araligi_saniye": 30,
  "aktif_hafta": "Hafta_08",
  "ogretmenler": {
    "Ahmet Öğretmen": "111111111",
    "Mehmet Öğretmen": "222222222"
  }
}

Adım 6: Hibrit Dağıtım ve Otomatik Arşivleme Mantığı

Öğretmenin cep telefonunda yüzlerce dağınık belgeyle boğuşmasını engellemek için hafta tamamlandığında eski hafta dosyaları geçmiş arşiv ZIP paketine eklenir ve aktif dağıtım klasörü diskten silinir:

import shutil, zipfile

def haftayi_arsivle(ogretmen_adi, hafta_adi):
    zip_path = f"arsivler/Gecmis_Evraklar_Arsivi_{ogretmen_adi}.zip"
    hafta_klasoru = f"dagitim/{hafta_adi}/{ogretmen_adi}"

    # Arşiv ZIP dosyasına ekle
    with zipfile.ZipFile(zip_path, "a", zipfile.ZIP_DEFLATED) as zipf:
        for root, _, files in os.walk(hafta_klasoru):
            for file in files:
                full_path = os.path.join(root, file)
                arcname = os.path.relpath(full_path, "dagitim")
                zipf.write(full_path, arcname)

    # Mükerrerliği önlemek için işlenen aktif haftayı diskten temizle
    shutil.rmtree(hafta_klasoru)
    print(f"{hafta_adi} arşive aktarıldı ve disk alanı temizlendi.")

📊 Sonuç Nedir? (Somut Çıktılar ve Etki)

Bu otomasyonun devreye alınmasıyla birlikte okuldaki bürokratik işleyişte ölçülebilir kazanımlar elde edilmiştir:

Performans Göstergesi Geleneksel Manuel Süreç Otonom Ekosistem Çıktısı Net Kazanç
Haftalık Evrak Hazırlık Süresi ~2.5 - 3 Saat / Öğretmen 0 Dakika (Tam Otomatik) Yıllık 100+ Saat Tasarruf
Sınıf Defteri Doldurma Her gün 15-20 dk kazanım arama Tek sayfa A4'ten 3 dakikada yazım Günde 15 dk zihinsel ferahlık
Baskı & Sayfa Kayma Hatası %35 (Taşan tablolar, 11pt font) %0 (180+ evrakta tam XML kilidi) Sıfır kâğıt israfı, kusursuz çıktı
Zümre Evrak Teslim Uyumu Gecikmeler, farklı şablonlar Pazar 20:00 tek tıkla standart teslim %100 Zümre Eşgüdümü
Veri Güvenliği & Gizlilik Bulut sitelerine evrak yükleme %100 Yerel Python motoru Sıfır Veri Sızıntısı

Elde Edilen Temel Başarılar

  • 180+ Resmi Belgede Kusursuz Tipografi: Yıllık planlar, kulüp belgeleri ve haftalık ders planlarının tamamında milimetrik kenar boşlukları ve ISO onay blokları sağlandı.
  • Pazar Akşamı Rahatlığı: Öğretmenler her pazar akşamı Telegram'dan gelen tek bir bildirimle tüm haftanın planlarına ve defter çizelgelerine hazır olarak haftaya başlama konforuna ulaştı.
  • Sıfır Veri Sızıntısı: Sistem üçüncü taraf ticari yapay zeka bulutlarına öğrenci veya öğretmen verisi aktarmadan tamamen yerel kaynaklarla çalışır.

🔒 Açık Kaynak, Güvenlik ve Gizlilik Prensipleri

  1. Öğrenci Verisi İzolasyonu (KVKK / GDPR): Sistemde üretilen rehberlik raporlarında, kulüp formlarında ve defter doldurma çizelgelerinde hiçbir öğrencinin kişisel bilgisi veya notu saklanmaz. Öğrenci görüşme bölümleri öğretmenlerin el yazısıyla doldurması için standart şablon olarak bırakılır.
  2. Kişiselleştirilmiş İsimsizleştirme: Telegram üzerinden dağıtılan belgeler yalnızca ilgili zümre öğretmeninin adı ve şubesine onaylanır; kurum dışına kapalı yerel veritabanında tutulur.
  3. Açık Kaynak Kod Bütünlüğü: Tüm betikler modüler, taşınabilir ve ek lisans maliyeti gerektirmeyen standart Python kütüphaneleriyle hazırlanmıştır.