Mikrofab SuiteMikrofab SuiteÖlçüm & Analiz
Kilavuz  /  8. Raporlama ve Dışa Aktarım
Simülasyon · v5.85.0

Raporlama ve Dışa Aktarım

Bu bölüm, Mikrofab ölçüm ve analiz yazılımının ürettiği rapor ve dışa aktarım (export) çıktılarının tamamını kapsar: bir ölçümün nasıl izlenebilir, makine-okunur ve kurcalama-belirtili (tamper-evident) bir kayda dönüştüğünü, bu kayıttan hangi sunum biçimlerinin (HTML/PDF) türetildiğini, hangi tablo biçimlerinin (CSV/TXT/XLSX/JSON) yazıldığını ve dosyaların nasıl adlandırıldığını ayrıntılarıyla anlatır.

ℹ️
Not Temel ilke — Tek model, çok biçim. Bir rapor, ölçümün resmî ve izlenebilir kaydıdır. Önce kanonik (canonical) bir veri nesnesi (JSON) üretilir; insana yönelik tüm sunumlar (HTML, PDF, ekran tabloları) bu tek nesneden türetilir. Böylece "ekranda gördüğünüz sayı" ile "arşivlenen sayı" daima aynı kaynaktan gelir; biçim değişse de veri değişmez.
Veri ve Raporlar çalışma alanı ana ekranı
Şekil. Veri ve Raporlar çalışma alanı: rapor üretimi ve kitaplık burada toplanır.
🎓 Ne işe yarar? — Raporlama ve dışa aktarım nedir, neden var

Bir ölçüm yaptınız ve ekranda güzel bir grafik gördünüz — peki bu sonuç yarın, bir ay sonra ya da başka bir bilgisayarda da güvenilir bir kanıt olarak durabilir mi? Raporlama tam olarak bunu sağlar: ölçümü, kim/ne/ne zaman/hangi cihazla bilgisini içeren, değiştirilirse belli olan kalıcı bir resmî tutanağa dönüştürür. Dışa aktarım ise bu tutanağı başkalarının açıp kullanabileceği biçimlere (CSV, Excel, PDF, JSON) çevirir.

  • Neden yapılır: sonucun izlenebilir, paylaşılabilir ve arşivlenebilir olması için — "ekranda gördüm" yeterli değildir, kanıt gerekir.
  • Ne öğretir / ne ölçer: bir ölçümün hangi dosyalara döküldüğünü, her dosyanın ne taşıdığını ve hangisinin "resmî kayıt" sayıldığını.
  • Nerede kullanılır: laboratuvar defteri, kalite kontrol, müşteriye teslim, makaleye/rapora ek ve uzun süreli arşiv.

1. Genel Bakış: Üç Rapor Yolu

Yazılım, üç ayrı yerden rapor/çıktı üretir. Hepsi aynı disiplini (künye + sha256 bütünlük + "eksik != sıfır" + belirlenimci çıktı) paylaşır ama farklı amaçlara hizmet eder.

Rapor yoluNerede üretilirTetikleyiciKanonik çıktıSunum
Ölçüm raporuÖlçüm bittiğinde otomatikHer kayıt (DataWriter.save)*_report.json + *_report.csv(İsteğe bağlı) "Rapor oluştur" → HTML + PDF
Analiz raporuAnaliz çalışma alanı"Dışa Aktar" menüsüreport_jsonreport_pdf (HTML → Qt PDF)
Birleştirme raporuVeri ve Raporlar workspace"Raporu oluştur" düğmesi*_rapor.jsonHTML + PDF (+ CSV)

Mimari olarak akış şudur:

                          +- write_json  (kanonik, makine-okunur, checksum kaynağı)
   rapor sözlüğü ---------+- write_csv   (tablo)              -- VERİ biçimi
   (build_report / compose)
                          +- build_report_html (kaçışlı/escaped) -- SUNUM (veriden türetilir)
                                                                    PDF: Qt QTextDocument

Rapor motoru bu deponun içinde, app/reporting/ altında yaşar; paylaşılan harici bir reporting paketi yoktur. Çekirdek dosyalar:

  • app/reporting/report_model.py — kanonik ölçüm raporu modeli + JSON/CSV yazıcılar.
  • app/reporting/report_builder.py — saf HTML üretici (build_report_html).
  • app/reporting/analysis_report.py — analiz raporu (künye + payload, aynı mühür disiplini).
  • app/reporting/report_compose.py — birden çok kaynağı birleştiren Rapor Oluşturucu motoru.
  • app/reporting/report_index.py — üretilmiş raporları tarayıp listeleyen indeks (DB'siz).
  • app/storage/data_writer.py — ölçüm sırasında/sonunda ham + rapor dosyalarını yazan katman.
  • app/gui/analyze/exporters.py — Analiz çalışma alanı dışa aktarım yazıcıları.

2. Ölçüm Raporu (Otomatik, Her Kayıtta)

🎓 Ne işe yarar? — Ölçüm raporu (otomatik kayıt)

Bu, hiç düğmeye basmadan elde ettiğiniz "varsayılan" çıktıdır: her ölçüm bittiğinde yazılım otomatik olarak o koşuya ait bir klasör açar ve hem ham veriyi hem de resmî kaydı diske yazar. Bir deney sırasında defterinize anında not düşmeniz gibi — siz ekstra bir şey yapmadan her koşu izlenebilir bir kayda dönüşür.

  • Neden yapılır: hiçbir ölçüm kaybolmasın; her koşu kendiliğinden, tarih-saatli ve benzersiz bir klasöre düşsün diye.
  • Ne öğretir / ne ölçer: bir koşunun diske tam olarak hangi dosyalar olarak (CSV, TXT, XLSX, kanonik JSON...) yazıldığını.
  • Nerede kullanılır: her gün, her ölçümde — bu sizin temel veri arşivinizdir; diğer rapor yolları bunun üstüne kurulur.

Bir ölçüm tamamlandığında DataWriter.save(...) çağrılır ve tek koşu için tüm dosyalar o koşuya ait alt klasöre yazılır. Bu, yazılımın "varsayılan" rapor üreticisidir: kullanıcı ekstra bir düğmeye basmadan, her ölçüm izlenebilir bir kayıt olarak diske düşer.

Ölçüm çalışma alanı ekranı
Şekil. Ölçüm çalışma alanı: her tamamlanan koşu otomatik olarak kendi klasörüne kaydedilir.

2.1 Koşu klasörü ve dosya adlandırma

Her ölçüm koşusu, çıktı klasörü altında kendi alt klasörüne yazılır. Klasör adı run_folder_name(...) ile üretilir:

<çıktı_klasörü>/YYYY-MM-DD-<Gün>-<Tür>-<HHMMSS>/
örnek: measurements/2026-06-12-Wed-PV-103045/
ParçaAçıklamaÖrnek
YYYY-MM-DDKoşu tarihi2026-06-12
<Gün>3 harfli gün kısaltması, arayüz diline göre (OS yereli değil)Wed / Çar
<Tür>Ölçüm ailesi kısaltması (cihaz-ailesinden)TFT / Thin / PV / Gen
<HHMMSS>Koşu saati (her koşuyu benzersiz yapar)103045
ℹ️
Not (OneDrive uyumu): Sondaki HHMMSS her koşuyu benzersiz yaptığı için iki makinede aynı klasör eş zamanlı yazılmaz; bu, OneDrive'ın PC-adlı çatışma kopyası (..._IK4ULCE-7 gibi) üretmesini engeller. Klasör adına PC adı eklenmez.

Klasör içindeki dosyaların temel adı (base_name) şudur:

<önek>_<TFT>_<MOD>_<YYYYMMDD_HHMMSS>_<sonek>

Önek (filename_prefix) ve sonek (filename_suffix) boş ise atlanır; yasak dosya karakterleri (<>:"/\|?* ve kontrol karakterleri) sanitize_token ile temizlenir.

2.2 Yazılan dosyalar

DataWriter.save varsayılan olarak şu biçimleri yazar (export_formats ile ayarlanır; öntanımlı ("csv", "txt", "xlsx") + her zaman rapor + metadata):

DosyaBiçimAyraç / kodlamaİçerik
<base>.csvHam veri tablosuvirgül, UTF-8CSV_COLUMNS (13 sütun, ham noktalar)
<base>.txtHam veri tablosusekme (tab), UTF-8Aynı sütunlar, sekme ayraçlı
<base>.xlsxExcel çalışma kitabıopenpyxl"measurement" sayfası + "Özet" sayfası
<base>_metadata.jsonSerbest metadataUTF-8, girintiliCihaz kimliği, parametreler, özet, sayım
<base>_report.jsonKanonik raporUTF-8, sıralanmış anahtarKünye + kolonlar + satırlar + sha256 mühür
<base>_report.csvKanonik tablovirgül, UTF-8 + BOMAile kolonları, nokta-ondalık
<base>.h5(İsteğe bağlı) HDF5h5pyİkili bilimsel format; mühür korunur
<base>_partial.csvCrash-safe ara dosyavirgül, UTF-8Koşu sırasında; başarıyla bitince silinir

Ham veri CSV/TXT/XLSX şu 13 sütunu (CSV_COLUMNS) taşır:

timestamp, measurement_mode, tft_id, sweep_direction, step_index,
vds_set, vgs_set, vds_measured, vgs_measured, ids, igs, compliance_hit, elapsed_s
İpucu (crash-safe yazım): Uzun ölçümlerde (Bias Stres, Recipe) her nokta anında *_partial.csv'ye eklenir ve diske flush edilir. Uygulama çökerse veya güç kesilirse o ana kadarki veri korunur. Ölçüm başarıyla bitip nihai dosyalar yazılınca partial dosya silinir; aksi hâlde diskte kalır ve daha sonra read_points_csv ile geri yüklenebilir.

2.3 Kanonik rapor (*_report.json) — Künye / İzlenebilirlik

🎓 Ne işe yarar? — Kanonik rapor ve izlenebilirlik künyesi

Kanonik rapor (*_report.json), bir ölçümün "tek doğru kopyası" sayılan makine-okunur dosyasıdır; ekranda gördüğünüz tüm sayılar buradan türetilir. Künye ise bu dosyanın başındaki kimlik kartıdır: bir ilaç kutusunun üstündeki üretim bilgisi gibi hangi cihaz, hangi sürüm, hangi numune, ne zaman sorularını yanıtlar.

  • Neden yapılır: sonuç ile onun kökeni (cihaz/sürüm/zaman/numune) ayrılmaz biçimde birlikte saklansın diye.
  • Ne öğretir / ne ölçer: bir ölçümün nereden geldiğini; bilinmeyen alanların uydurulmayıp null bırakıldığını (dürüstlük kuralı).
  • Nerede kullanılır: akredite/izlenebilir laboratuvar kayıtları, denetim ve "bu sayı nereden çıktı?" sorusunun yanıtı.

Kanonik rapor, report_model.build_report(...) ile üretilir ve üç-seviyeli izlenebilirlik künyesini (künye = traceability header) taşır. Aşağıdaki tablo, raporun üst düzeyindeki alanları ve kaynağını gösterir.

AlanAçıklamaKaynak / kural
schema_versionŞema sürümüSabit "1.0"
report_idBenzersiz rapor kimliğiuuid4().hex
report_revisionRevizyon noRevizyonda artar; raporlar sessizce düzenlenmez
levelRapor seviyesi"base" / "customer" / "accredited" (öntanımlı customer)
statusKoşu durumu"complete" / "partial" — yarıda kesilen koşu gizlenmez
created_atÜretim UTC (ms)ISO-8601, ...Z; çağırandan gelir (belirlenimcilik)
created_at_localOperatör yerel saaticontext.started_at (yalnız gösterim)
app_id / app_versionYazılım kimliği/sürümüSabit "tft-measurement" + __version__
recipe{name, version}context.mode + yazılım sürümü
station{id, serial}VISA kaynağı + cihaz IDN (seri no PII değildir)
calibration{status, cert_no, valid_until}Şu an stub (status:"unknown"); akredite için PLANLANAN
sample{id, lot, wafer}tft_id; lot/wafer şu an null
operatorOperatörUygulamada alan yok → uydurulmaz, null
environmentAçık-hava ortam künyesiOpen-Meteo anlık değeri; outdoor_* etiketli
simulatedMock/gerçek bayrağıCihaz IDN'inde "MOCK"/"SIM" → true; bilinmiyorsa null
⚠️
Uyarı (dürüstlük kuralı): Yazılımın sahip olmadığı bilgi asla uydurulmaz; bilinmeyen alan null olarak yazılır (ör. operator). simulated bayrağı, IDN yoksa null kalır — rapor hiçbir zaman gerçek bir ölçüm olduğunu iddia etmez. Bu, akredite laboratuvar izlenebilirliğinin temelidir.
ℹ️
Not (ortam künyesi): environment bloğu açık-hava (Open-Meteo) göstergesidir; cihazı asıl etkileyen laboratuvar iç-ortam koşulu DEĞİLDİR. Bu nedenle anahtarlar açıkça outdoor_temp_c, outdoor_humidity_pct, outdoor_cloud_cover_pct, outdoor_condition ve kaynak open-meteo ile etiketlenir. Veri yoksa tüm alanlar null.

2.4 Kolon aileleri — ölçüme göre doğru şema

🎓 Ne işe yarar? — Kolon aileleri (ölçüme göre doğru şema)

Her ölçüm türü farklı büyüklükler üretir: bir transistör için kapı/akaç gerilimleri anlamlıyken, bir güneş hücresi için güç (W) anlamlıdır. Kolon aileleri, raporun tablosunu otomatik olarak o ölçüme uygun sütunlarla doldurur — her işe doğru aletin geldiği bir takım çantası gibi, böylece güneş hücresi raporunda gereksiz "Vgs hep 0" sütunları görmezsiniz.

  • Neden yapılır: her ölçüm ailesi yalnızca kendi anlamlı sütunlarını taşısın, yanıltıcı/boş kolonlar oluşmasın diye.
  • Ne öğretir / ne ölçer: hangi ölçüm modunun hangi sütunları (ve türetilmiş büyüklükleri, ör. PV gücü P, direnç R) ürettiğini.
  • Nerede kullanılır: farklı cihaz/ölçüm türlerini aynı yazılımla raporlarken doğru ve okunur tablolar elde etmede.

Önemli bir tasarım kararı: rapor tablosunun kolonları ölçüm ailesine göre seçilir. Eski sürümlerde tek sabit şema TFT-şekilliydi (Vds/Vgs/Ids/Igs); bir güneş hücresi raporu bu yüzden "transistör raporu" gibi görünür, Vgs/Igs hep 0 çıkardı. Artık her aile kendi kolonlarını seçer; tüm yazıcılar (JSON/CSV/HDF5) report["columns"]'u kullandığından otomatik olarak doğru şema biner.

Ölçüm moduAileKolonlar (birim)
TRANSFER, IV, PULSED_IV, BIAS_STRESS…tftvds_set(V), vgs_set(V), vds_measured(V), vgs_measured(V), ids(A), igs(A)
DIODE, SCHOTTKY, T_IV, KELVIN, PROBE_IVtwo_terminalv_set(V), v_measured(V), i(A)
PV_JV, PV_DARK_JV, PV_HYST, PV_MPPT…pvv_set(V), v_measured(V), i(A), p(W)
FOUR_POINT, VDPfour_probei(A), v_measured(V)
ENDURANCEendurancecycle, state, v_read(V), v_measured(V), i_read(A), resistance_ohm(Ω)

Tüm ailelerde ortak baş/kuyruk kolonları: point (tam sayı), step_index, sweep_direction, elapsed_s (s), status. Birim ve tip kolon tanımında durur, satırda tekrarlanmaz (tek kaynak); etiket yereli label_key üzerinden i18n'den gelir.

Türetilmiş kolon formülleri:

Formül PV gücü (p): her nokta için P = |V_measured · I| (birim: W). Girdi vds_measured (V) ve ids (A); biri eksikse çıktı null (eksik != sıfır).
Formül Endurance okuma direnci (resistance_ohm): R = |V_measured / I| (birim: Ω). Akım 0 veya eksikse çıktı null.

2.5 Satırlar ve durum (status) — "Eksik != sıfır"

🎓 Ne işe yarar? — Satır durumu ve "eksik ≠ sıfır" ilkesi

Ölçüm sırasında bazı noktalar ölçülemeyebilir veya cihaz bir sınıra takılabilir. Yazılım bu durumları gizlemez: her satıra bir status (ok / na / fail) etiketi koyar ve ölçülemeyen bir değeri asla 0 ile doldurmaz, boş (null) bırakır. Bir anketteki "boş bırakıldı" ile "0 puan" arasındaki fark gibi — ikisini karıştırmak sonucu yanlış yorumlatır.

  • Neden yapılır: ölçülemeyen veri ile gerçekten sıfır olan veri birbirine karışmasın, analiz sahte sıfırlarla bozulmasın diye.
  • Ne öğretir / ne ölçer: her noktanın geçerli mi (ok), ölçülemedi mi (na), yoksa sınıra mı takıldığını (fail).
  • Nerede kullanılır: veri kalitesini değerlendirirken ve eksik noktaların sonucu nasıl etkilediğini anlarken.

_point_to_row(...) her MeasurementPoint'i bir satıra çevirir. Sayısal olmayan / NaN / Inf değerler null'a (asla 0'a değil) eşlenir. Her satırın status alanı:

DurumAnlamıKoşul
okGeçerli ölçümAksi tüm durumlar
naÖlçülemediAile "na-nitelikleri"nin tamamı None (ör. TFT'de hem ids hem igs)
failSınır/uyumluluk çarpmasıcompliance_hit = true (compliance limitine takıldı)
"rows": [
  { "point": 1, "vds_set": 0.0, "ids": 1.2e-6, "igs": 1e-9, "status": "ok"   },
  { "point": 2, "vds_set": 0.1, "ids": null,   "igs": null, "status": "na"   },  // eksik != 0
  { "point": 3, "vds_set": 0.2, "ids": 2.0e-3, "igs": 1e-9, "status": "fail" }   // compliance
]
⚠️
Uyarı (kısmi koşu): Eğer len(points) < parameters.step_count ise rapor durumu otomatik status="partial" olur; yarıda kesilen bir koşu asla "tamamlandı" gibi gösterilmez. Bu, metroloji dürüstlüğünün gereğidir.

2.6 Bütünlük (integrity / checksum)

🎓 Ne işe yarar? — Bütünlük mührü (sha256 checksum)

Her kanonik rapor, içeriğinden hesaplanan sha256 adında bir "parmak izi" taşır. Dosyada tek bir rakam bile sonradan değişse bu parmak izi tutmaz; böylece raporun kurcalanıp kurcalanmadığı anlaşılır. Bir zarfın üstündeki, kırılınca belli olan mühür gibi çalışır.

  • Neden yapılır: bir raporun üretildiğinden beri değiştirilmediğini kanıtlayabilmek (kurcalama-belirtili kayıt) için.
  • Ne öğretir / ne ölçer: aynı verinin daima aynı özeti vereceğini; özet tutmuyorsa dosyanın değiştiğini.
  • Nerede kullanılır: arşiv güvenliği, iki dosyanın aynı ölçümden geldiğini doğrulama ve denetim.

Her kanonik rapor bir sha256 özeti taşır; böylece dosya sonradan değiştirilirse anlaşılır (kurcalama-belirtili).

girdi  : rapor sözlüğü (integrity.value = "" yapılmış hâli)
formül : sha256( kanonik_json(rapor) )   // sort_keys=True, ensure_ascii=False, kompakt
çıktı  : integrity = { "algo": "sha256", "value": "<64-hex>" }

write_json, dosyayı yazmadan önce seal_integrity(...) çağırır; bu yüzden diskteki JSON mühürlü değeri taşır. Checksum, kendine referans olmadan hesaplanır (önce value boş bırakılır). Aynı rapor → bayt-aynı çıktı → aynı checksum.

3. Ölçüm Raporu — HTML ve PDF Sunumu ("Rapor Oluştur")

🎓 Ne işe yarar? — HTML/PDF rapor sunumu ("Rapor oluştur")

Kanonik JSON/CSV makineler içindir; insanlar içinse okunaklı, grafiği ve tabloları gömülü tek parça bir HTML (ve PDF) rapor üretilir. Bu, kanonik kaydın aynı verinin güzelce ciltlenmiş, paylaşıma hazır hâli gibidir — sayılar birebir aynıdır, yalnızca sunum insana yöneliktir.

  • Neden yapılır: sonucu bir meslektaşa, danışmana veya müşteriye gönderip yazdırılabilir tek bir belge vermek için.
  • Ne öğretir / ne ölçer: başlık, grafik, ölçüm koşulları ve çıkarılan parametrelerin bir arada nasıl sunulduğunu.
  • Nerede kullanılır: paylaşım, sunum, baskı ve dosyaya ek — taşınabilir tek dosya gerektiğinde.

Kanonik JSON/CSV makine içindir; insana yönelik tek parça HTML rapor (ve mümkünse PDF) ölçüm sonucu ekranında "Rapor oluştur" düğmesiyle üretilir (_generate_report). Bu sunum, kanonik nesnenin görünür hâlidir.

Üretilmiş ölçüm raporu HTML/PDF görünümü
Şekil. Ölçüm raporu sunumu (HTML/PDF): başlık bloğu, gömülü grafik, ölçüm koşulları ve çıkarılan parametreler.

3.1 Rapor yapısı (bölümler)

Üretilen HTML/PDF şu sırayla bölümlerden oluşur (build_report_html):

  1. Başlık bloğu — Rapor başlığı (ör. "TFT Ölçüm Raporu"), alt başlık (<TFT> — <Mod>) ve üretim zamanı (generated_at).
  2. Grafik — Mevcut ölçüm grafiği PNG olarak gömülür (işaretçiler dahil). HTML'de base64 data: URI; PDF'te QTextDocument.addResource ile plot.png kaynağı olarak.
  3. Ölçüm Koşulları tablosu — Mod, TFT kimliği, cihaz IDN, VISA kaynağı, kanallar (drain/gate), röle durumu, nokta sayısı, yazılım sürümü; ardından sweep parametreleri ve (varsa) açık-hava ortam satırları.
  4. Çıkarılan Parametreler tablosu — Mod-bilen cilalı etiketler (Voc/Isc/FF/PCE, Vth, Ion/Ioff…). Özel üretici yoksa ham özet (summary) dökümüne düşülür. Bu tablo, Sonuç sayfasıyla tek kaynak (summary_format) kullanır; raporda gördüğünüz sayılar ekrandaki sayılarla birebir aynıdır.
  5. Kullanıcı Notuuser_comment varsa serbest metin kutusu.
  6. Alt bilgi — Yazılım sürümü damgası.

3.2 Çıktı dosyaları ve adlandırma

"Rapor oluştur" iki dosya yazar (çıktı klasörüne doğrudan, koşu alt klasörüne değil):

<TFT>_<MOD>_<YYYYMMDD_HHMMSS>_report.html
<TFT>_<MOD>_<YYYYMMDD_HHMMSS>_report.pdf
  • HTML: Grafik base64 gömülü olduğundan tek dosya taşınabilir, tarayıcıda açılır.
  • PDF: Qt QTextDocumentQPrinter ile üretilir; ek bağımlılık yoktur. Grafik plot.png kaynağı olarak gömülür.
ℹ️
Not Sayısal değerler raporda akıllı biçimlenir: çok küçük (<1e-3) veya çok büyük (>=1e5) değerler bilimsel gösterimle (1.2345e-06), diğerleri {:.4g} ile yazılır. Tüm dinamik değerler html.escape ile kaçışlı yazılır (güvenlik).

4. Analiz Raporu (Analiz Çalışma Alanı — "Dışa Aktar" Menüsü)

🎓 Ne işe yarar? — Analiz raporu (Dışa Aktar menüsü)

Ölçüm raporu "ham koşuyu" belgelerken, analiz raporu bir dosyadan çıkarılan yorumlanmış sonucu (ör. Voc/Isc/FF/PCE, eşik gerilimi) belgeler. Analiz çalışma alanında bir analizi çözdükten sonra "Dışa Aktar" menüsünden istediğiniz biçimde dışarı verirsiniz. Ham ölçüm "çekilen fotoğraf" ise, analiz raporu "fotoğrafın altına yazılan açıklamadır."

  • Neden yapılır: hesaplanan metrikleri, belirsizlikleri ve hangi yöntemle/standarda göre çıkarıldığını kayıt altına almak için.
  • Ne öğretir / ne ölçer: metrik değerlerini + belirsizliklerini, kullanılan yöntemi, güvenilirlik hükmünü ve veri kökenini (provenance).
  • Nerede kullanılır: sonuçları raporlarken, güvenilirlik damgasıyla paylaşırken (güvenilmez sonuç için onay istenir).

Analiz çalışma alanında bir analiz çözüldükten sonra, üst çubuktaki "Dışa Aktar" (analyze2.header.export) düğmesi bir menü açar. Menü içeriği, aktif analiz modülünün tanımlayıcısının (descriptor) desteklediği biçimlerle uygulanan biçimlerin kesişimidir.

Analiz çalışma alanı ve PV metrik sonuçları
Şekil. Analiz çalışma alanı: çözülen analiz sonrası "Dışa Aktar" menüsü ile rapor/biçim üretilir.

4.1 Dışa aktarım menüsü seçenekleri

Menü öğesi (TR)JetonYazıcıÇıktı
CSV (veri sütunları)csvwrite_dataset_csvKanonik veri tablosu (nokta-ondalık, virgül)
CSV (Excel uyumlu: ; ayraç, virgül ondalık)csv_excelwrite_dataset_csv_excelYerel-Excel kolaylık kopyası
PNG (grafik)pngplot_canvas.export_pngAktif grafiğin PNG görüntüsü
Excel (.xlsx)xlsxwrite_metrics_xlsx"Metrics" + "Provenance" sayfaları
JSON raporreport_jsonanalysis_report.write_jsonKanonik analiz raporu (künye + payload + sha256)
PDF raporreport_pdfwrite_report_pdfHTML → Qt PDF (grafik gömülü)
İpucu "CSV (veri sütunları)" seçildiğinde menüye hemen ardından Excel uyumlu yoldaşı da eklenir; böylece Türkçe/Avrupa yerelli Excel kullanıcıları iki tıklamayla doğru açılan kopyayı alabilir (bkz. Bölüm 6.2).
⚠️
Uyarı (güvenilir olmayan veri): report_json veya report_pdf seçildiğinde, eğer analiz ✕ Güvenilir değil (ör. STC dışı koşul, düşük uyum) olarak işaretliyse, yazıcı çalışmadan önce bir onay istenir (_confirm_report_unreliable). Böylece güvenilmez bir sonuç yanlışlıkla resmî rapor olarak dışarı verilmez.

4.2 Analiz raporu (report_json / report_pdf) yapısı

Analiz raporu build_analysis_report(...) ile üretilir; ölçüm raporuyla aynı künye disiplinini taşır ve report_model'in mühür/checksum/write_json işlevlerini yeniden kullanır (yani JSON bayt-kararlı ve bütünlük mühürlüdür). Üst düzey alanlar:

AlanDeğer
schema_version"1.0"
report_iduuid4().hex
report_type"analysis"
created_atUTC ISO-8601 (ms)
app_id / app_version"tft-measurement" + sürüm
simulatednull (analiz dosya-tabanlıdır; cihaz iddiası yok)
analysisPayload (aşağıda)
integrity{algo: "sha256", value: ...}

analysis payload'ı (Qt'siz, dile-bağımsız; etiketler i18n anahtarı olarak tutulur):

  • descriptor — Analiz modülü kimliği, sürümü, kategori, başlık/özet anahtarları, motor.
  • metrics[] — Her metrik için ham GUM alanları + biçimlenmiş gösterim: {key, label_key, unit, value, u_std, k, n, r2, display, primary}. Değer yoksa value=null, display="—".
  • method{description_key, equations[], conventions[], fit_method}. Denklemler düz-metin (plain) + not olarak taşınır; konvansiyonlar i18n anahtarıdır.
  • standards[] — Atıf yapılan standartlar: {id, designation, title, edition, scope} (registry'den çözülür).
  • reliability — Kalite hükmü: ✓ Güvenilir (reliable) / ✕ Güvenilir değil (unreliable) / ⚠ STC dışı (non_stc).
  • provenance — Köken/iz zarfı: {data_file, file_hash, column_mapping, parameters, software_version, timestamp_utc}.
  • narrative, notes[], conditions[] — Anlatı, notlar ve descriptor'ın gerektirdiği koşul jetonları.

4.3 Belirsizlik gösterimi (Quantity / GUM)

🎓 Ne işe yarar? — Belirsizlik gösterimi (Quantity / GUM)

Hiçbir ölçüm tam kesin değildir; her sonucun bir "± ne kadar" payı vardır. Bu modül, metrikleri uluslararası GUM kılavuzuna uygun biçimde değer ± belirsizlik olarak gösterir. Bir terazinin "100 g ± 2 g" yazması gibi — sayının tek başına değil, güven aralığıyla birlikte anlamı vardır.

  • Neden yapılır: bir sonuca ne kadar güvenilebileceğini sayısal olarak ifade etmek için (bilimsel dürüstlük).
  • Ne öğretir / ne ölçer: standart belirsizlik (u), kapsam çarpanı (k), genişletilmiş belirsizlik (U = k·u) ve örneklem sayısı n.
  • Nerede kullanılır: akredite raporlar, karşılaştırmalı ölçümler ve "bu fark anlamlı mı?" kararlarında.

Analiz metrikleri, GUM (Ölçüm Belirsizliğinin İfadesi Kılavuzu) çizgisinde bir Quantity nesnesi üzerinden biçimlenir (format_quantity). Gösterim kuralları:

Formül değer ± belirsizlik (kapsam notu)
KoşulÇıktı
u_std > 0 ve n >= 2± terim gösterilir
k ayarlı (genişletilmiş)U = k · u_std, son ek k={k}, n={n}
k yok (standart)son ek std. unc., n={n}
u_std yok / n<2yalnız değer gösterilir
  • Genişletilmiş belirsizlik: U = k · u_std (k = kapsam çarpanı / coverage factor).
  • Veri dosyalarında (JSON/Excel) ham alanlar (value, u_std, k, n) ayrı ayrı tutulur; biçimlenmiş display yalnız kolaylık içindir.

4.4 Excel dışa aktarımı (write_metrics_xlsx)

Analiz Excel çıktısı iki sayfa içerir:

  1. "Metrics" — Sütunlar: metric, value, unit, u_std, n, display, reliability. Her descriptor metriği için bir satır; Quantity yoksa değer boş, display="—".
  2. "Provenance" — Köken zarfı anahtar/değer: data_file, file_hash, software_version, timestamp_utc, ayrıca JSON olarak column_mapping ve parameters.
ℹ️
Not write_metrics_xlsx, openpyxl paketini tembel (lazy) import eder. Paket yoksa veya dosya yazılamazsa yazıcı sessizce False döner — istisna fırlatmaz. Hiçbir Analiz dışa aktarım yazıcısı çökmez; hata daima False olarak döner.

5. Birleştirme Raporu (Veri ve Raporlar Çalışma Alanı)

🎓 Ne işe yarar? — Birleştirme raporu (Rapor Oluşturucu)

Tek bir ölçüm yerine, birden çok ölçümü/analizi ve üretim adımlarını tek bir profesyonel rapora toplamak istediğinizde bu yolu kullanırsınız. Dağınık sayfaları tek bir ciltli dosyaya toplamak gibi — şablon seçer, bölümleri işaretler, canlı önizlemeyle istediğiniz raporu oluşturursunuz.

  • Neden yapılır: bir numuneye ait tüm kanıtı (ölçümler + adımlar + grafikler) tek, paylaşılabilir bir belgede toplamak için.
  • Ne öğretir / ne ölçer: birden çok kaynağın nasıl seçilip bölümlere göre tek rapora dizildiğini.
  • Nerede kullanılır: numune dosyası, müşteri teslimi, proje raporu — çok kaynaklı özet gerektiğinde.

Tekil ölçüm/analiz raporlarının ötesinde, Veri ve Raporlar çalışma alanı (workspace) birden çok kaynağı tek bir profesyonel rapora birleştiren bir Rapor Oluşturucu sunar. Motor report_compose.py'dir: saf, Qt'siz; yukarıdaki yazıcıların üzerine yeni bir yazıcı eklemez.

Veri ve Raporlar çalışma alanı genel görünümü
Şekil. Veri ve Raporlar çalışma alanı: birden çok kaynağı tek bir rapora birleştiren Rapor Oluşturucu burada yer alır.

5.1 Çalışma alanı sekmeleri

SekmeAnahtarİşlev
Genel BakışoverviewKPI kartları (ölçüm/analiz/numune/rapor sayısı) + hızlı eylemler + son etkinlik
Veri KitaplığılibraryGömülü veritabanı tablosu + seçili kaydın detay/inceleme paneli
Rapor OluşturucubuilderŞablon + bölüm seçici + canlı önizleme + "Oluştur"
RaporlarreportsÜretilmiş raporların kitaplığı (künye + bayatlık + "Aç")
Karşılaştır / BindircompareBirden çok eğriyi üst üste bindirme
Veritabanı / İstatistikstatsBir numunenin ölçümlerinde Ort±σ / min / max / n
Genel Bakış sekmesi KPI kartları
Şekil. Genel Bakış sekmesi: ölçüm/analiz/numune/rapor sayılarını gösteren KPI kartları ve hızlı eylemler.

5.2 Rapor Oluşturucu — üç sütunlu akış

Rapor Oluşturucu üç sütundan oluşur (sürükle-bırak alan kuyusu yoktur; kolon aileleri belirlenimcidir):

Sütun 1 — Kurulum:

AyarSeçenekler
KaynakSeçili veri (kitaplık/karşılaştırdan eklenen kayıtlar) veya Lab Defteri (numune köprüsü)
ŞablonTFT Karakterizasyon / Numune Dosyası / Karşılaştırma / PV Hücre Özeti / Boş
BiçimPDF + HTML / PDF / HTML / Full (PDF + HTML + CSV + JSON)
SeviyeMüşteri (sha256 künye) / Taban

Sütun 2 — İçerik: Seçili kaynağa göre ya seçili ölçüm onay-kutu listesi ya da Lab Defteri numune seçici (üretim adımları + bağlı ölçümler). Altında bölüm onay-kutuları.

Sütun 3 — Canlı önizleme: Seçimler değiştikçe report_compose.compose(...) ile üretilen HTML anında önizlenir (önizleme asla çökmez; hata olursa kırmızı mesaj gösterir).

Rapor Oluşturucu canlı önizleme örneği
Şekil. Rapor Oluşturucu çıktısı: seçimlere göre canlı önizlenen profesyonel rapor.

5.3 Rapor bölümleri

BölümAnahtarÖntanımlıKilitliİçerik
Künye / izlenebilirlikkunyeAçıkEvetschema_version, app_version, sample.id, created_at, source_sha256, integrity (daima ilk, kapatılamaz)
Çıkarılan parametre tablosuparamsAçıkHayırÖlçüm metrik tablosu (Ion/Ioff, Vth, µFE, SS, gm_max, V_on, Rect., Ron, µ_sat, Nokta)
Üretim adımları (Lab Defteri)stepsAçıkHayırNumune künyesi + üretim adımları + parametreler
Ölçüm koşullarıconditionsAçıkHayırMod, VDS, NPLC, Ortalama, Tarama, Cihaz, VISA (ilk ölçümden)
Grafik (eğriler)plotKapalıHayırGUI'den geçen figürler (data-URI)
Yöntem notları + R²methodKapalıHayırÇıkarım yöntemi, SS uyum R², Y-fonksiyonu R²
Ham veri eki (CSV/JSON)rawKapalıHayırİlişkili ham CSV dosyalarının yol notu
ℹ️
Not Künye bölümü daima zorunludur ve ilk olarak işenir — onay-kutusu işaretli ve devre dışıdır, kapatılamaz. Çünkü izlenebilirlik bilgisi olmayan bir rapor metrolojik olarak geçersizdir.

5.4 Lab Defteri köprüsü (şema değişikliği olmadan bağlama)

Rapor Oluşturucu, ölçümleri Lab Defteri numuneleriyle yeni bir tablo eklemeden bağlar. Bağlantı alanları: samples.sample_id == measurements.tft_id ve sample_steps.linked_measurement_id. Üç-sıçramalı köprü:

  1. get_sample(sample_db_id)sample_id.
  2. Geniş havuz: measurement_db.query(tft_id=sample_id).
  3. "Çağrılan" küme: adımların linked_measurement_id değerleri (birleşim, id'ye göre tekil).
ℹ️
Not (nazik atlama): Numunesi olmayan (yetim) ölçümler ve soft-delete edilmiş kayıtlar nazikçe atlanır — rapor üretimi asla çökmez.

5.5 Çıktı dosyaları ve kanonik JSON

"Oluştur" → report_compose.write(...) seçili biçimlerde yazar. Dosya kök adı: <numune_id veya şablon>_rapor (yasak karakterler temizli).

BiçimDosyaYazıcı
HTML<ad>_rapor.htmlBirleştirici (composer)
JSON<ad>_rapor.jsonreport_model.write_json (künye + sha256 mühürlü, sıralanmış anahtar)
CSV<ad>_rapor.csvMetrik tablosu (UTF-8 BOM, nokta-ondalık; künye yoldaş-JSON'da)
PDF<ad>_rapor.pdfexporters.write_report_pdf (Qt; tembel import)

Kanonik JSON ek olarak şu izlenebilirlik alanlarını taşır: report_type="composed", source (type, sample_id, measurement_ids, step_ids), source_sha256 ve measurements_sha256 (bayatlık alt-özeti), sections[], özetlenmiş sample ve measurements. Belirlenimci: sabit created_at + report_id → bayt-aynı çıktı.

5.6 Raporlar kitaplığı ve "bayatlık" (stale)

🎓 Ne işe yarar? — Raporlar kitaplığı ve "bayatlık" rozeti

Üretilmiş bir rapor, o andaki verinin mühürlü bir anlık görüntüsüdür ve kendiliğinden güncellenmez. Eğer raporu ürettikten sonra kaynak ölçümler değişir veya silinirse, yazılım o satıra "bayat" rozeti koyarak sizi uyarır. Buzdolabındaki bir yiyeceğin son kullanma tarihi gibi — hâlâ orada, ama tazeliğini kontrol etmelisiniz.

  • Neden yapılır: eski bir rapordaki sayıların artık güncel veriyle uyuşmayabileceğini fark edebilmeniz için.
  • Ne öğretir / ne ölçer: bir raporun kaynak verisiyle hâlâ tutarlı mı, yoksa "bayat" mı olduğunu (sha256 karşılaştırması).
  • Nerede kullanılır: rapor arşivini gözden geçirirken; bayat görürseniz güncel sayılar için raporu yeniden üretmede.

"Raporlar" sekmesi, çıktı klasörünü veritabanısız tarar: report_index.list_reports(...) her *_rapor.json'i (yalnız report_type=="composed") okuyup künye + üretilmiş kardeş biçimleri (pdf/html/csv) listeler. Bir satıra çift-tıklamak veya "Aç", raporu varsayılan uygulamada açar (öncelik sırası: PDF > HTML > JSON).

⚠️
Uyarı (bayatlık rozeti): Bir rapor üretildikten sonra kaynak ölçümler değişir/silinirse, _is_stale(...) depolanan measurements_sha256'yı mevcut DB durumundan yeniden hesaplananla karşılaştırır ve uyuşmazsa satıra "bayat" rozeti koyar. Raporlar mühürlü anlık görüntülerdir — asla sessizce otomatik güncellenmez. Bayat bir rapor görüyorsanız, güncel sayılar için raporu yeniden üretmelisiniz.
Üretilmiş raporların kitaplığı
Şekil. Raporlar kitaplığı: üretilmiş raporlar künye, bayatlık rozeti ve "Aç" eylemiyle listelenir.

5.7 İstatistik sekmesi (topluluştırma)

🎓 Ne işe yarar? — İstatistik sekmesi (toplulaştırma)

Tek bir ölçüm yerine, aynı numunenin tüm ölçümlerini bir araya getirip ortalama, standart sapma, en küçük/en büyük ve sayı (n) gibi özetleri hesaplar. Bir sınıfın tek tek notları yerine sınıf ortalamasına ve dağılımına bakmak gibi — tekrarlanabilirliği ve saçılımı görürsünüz.

  • Neden yapılır: ölçümün ne kadar tekrarlanabilir/tutarlı olduğunu ve tipik değer aralığını anlamak için.
  • Ne öğretir / ne ölçer: Ort ± σ, min, max ve geçerli örnek sayısı n (eksik/NaN değerler hariç tutulur).
  • Nerede kullanılır: üretim/kalite kontrolünde süreç kararlılığı (SPC) ve numuneler-arası karşılaştırmada.

"Veritabanı / İstatistik" sekmesi, seçili bir numunenin (tft_id) tüm ölçümlerinde çıkarılan parametreleri topluluştırır (benchtop SPC/dağılım karşılığı):

Ort (mean) = Σxᵢ / n
σ (örnek std, n-1) = sqrt( Σ(xᵢ − Ort)² / (n − 1) )   // n>1; n=1 ise σ=0
min, max, n

None/NaN değerler hariç tutulur; n=0 ise tüm istatistikler (eksik != 0). "Seçimden rapor" düğmesi, o numuneyle Rapor Oluşturucu'yu açar.

Tanımlayıcı istatistik analizi ekranı
Şekil. İstatistik sekmesi: bir numunenin ölçümlerinde Ort±σ, min, max ve n değerleri.

6. Dışa Aktarım Biçimleri (Referans)

🎓 Ne işe yarar? — Dışa aktarım biçimleri — hangisini ne zaman?

Aynı veri birçok biçimde dışarı verilebilir; doğru biçim, dosyayla ne yapacağınıza bağlıdır. Kabaca: makineyle işleyecekseniz kanonik CSV/JSON, Türkçe Excel'de çift tıkla açacaksanız Excel-uyumlu CSV veya XLSX, paylaşacak/yazdıracaksanız PDF/HTML, grafiği bir yere koyacaksanız PNG. Aynı belgeyi e-posta, faks ya da kâğıt olarak göndermek gibi — içerik aynı, taşıyıcı farklı.

  • Neden yapılır: her kullanım (arşiv, analiz, paylaşım, sunum) için en uygun ve en az hata yapan biçimi seçebilmek için.
  • Ne öğretir / ne ölçer: hangi biçimin makine-okunur "kanonik" kayıt, hangisinin yalnızca "kolaylık kopyası" olduğunu.
  • Nerede kullanılır: veriyi başka bir araca aktarırken, arşivlerken veya bir meslektaşa gönderirken.

Bu bölüm, tüm biçimleri tek yerde toplar.

6.1 Kanonik CSV (makine biçimi)

Yerelden bağımsız, tek ve belgeli biçim (report_model.write_csv / exporters.write_dataset_csv):

  • Kodlama UTF-8 + BOM (utf-8-sig — Excel'in doğru açması için), nokta ondalık, virgül ayraç, satır sonu \n.
  • Başlıklar kararlı key + birim (ör. ids_A, vds_set_V), asla yerelleştirilmez.
  • Eksik nokta → boş hücre (""); 0 asla yazılmaz. na/fail/ok ayrımı status sütununda durur.
  • CSV yalnız tabloyu taşır; künye + checksum yoldaş JSON dosyasında durur.
point,step_index,sweep_direction,vds_set_V,vgs_set_V,vds_measured_V,vgs_measured_V,ids_A,igs_A,elapsed_s_s,status
1,0,Forward,0.0,0.0,0.0,0.0,1.2e-6,1e-09,0.01,ok
2,0,Forward,0.1,0.0,,,,,0.02,na

6.2 Excel-uyumlu CSV (kolaylık kopyası)

write_dataset_csv_excel — Türkçe/Avrupa yerelli Excel için:

ParametreBirimAçıklamaVarsayılan
decimalOndalık işareti, (virgül)
delimiterSütun ayracı; (noktalı virgül)
kodlamaBOM ile UTF-8utf-8-sig
⚠️
Uyarı Bu bir KOLAYLIK kopyasıdır, makine-okunur kanonik dosya değildir. Türkçe Excel, kanonik nokta-ondalıklı CSV'yi çift-tıkla açınca 1.5'i tarih/binlik sanıp bozar; bu varyant o yerelde doğru açılır. Ayraç ;'dir çünkü ondalık , ile çarışmaması gerekir. Arşivlenecek/işlenecek dosya için daima kanonik CSV'yi (Bölüm 6.1) kullanın.

6.3 TXT (sekme ayraçlı)

<base>.txt — ham ölçüm tablosunun sekme (tab) ayraçlı sürümü; aynı 13 sütun, UTF-8. Gnuplot/Origin gibi araçlara hızlı yapıştırma için pratiktir.

6.4 XLSX (Excel çalışma kitabı)

İki yol vardır:

  • Ham ölçüm (DataWriter._write_xlsx): "measurement" sayfası (13 sütun) + mod-bilen "Özet" sayfası (etiket/değer). openpyxl yoksa, bağımlılıksız minimal bir XLSX (doğrudan zip + XML) yazılır (_write_minimal_xlsx) — yani Excel çıktısı her ortamda üretilir.
  • Analiz metriği (write_metrics_xlsx): "Metrics" + "Provenance" sayfaları (Bölüm 4.4).

6.5 JSON metadata vs kanonik JSON

İki farklı JSON karıştırılmamalıdır:

DosyaÜreticiAmaçMühür
<base>_metadata.jsonDataWriter.saveSerbest, insan-okunur metadata (cihaz, parametre, özet, sayım)Hayır
<base>_report.jsonreport_model.write_jsonKanonik rapor (künye + kolon + satır)Evet (sha256)
<ad>_rapor.jsonreport_compose.writeKanonik birleştirme raporuEvet (sha256)

metadata.json şu alanları içerir: device_identity (IDN/VISA/switch_port), relay_enabled, selected_tft, sweep_parameters, date_time, started_at, user_comment, software_version, smu_mapping (drain/gate), point_count, planned_point_count, stopped_early, compliance_hit ve (varsa) <mod>_summary.

6.6 PNG (grafik görüntüsü)

Grafikler PNG olarak dışarı verilir:

  • Ölçüm raporu: Grafik 150 DPI'de PNG'ye render edilir ve HTML'e base64, PDF'e plot.png kaynağı olarak gömülür.
  • Analiz: "Dışa Aktar → PNG" ile aktif grafik doğrudan PNG dosyasına yazılır (plot_canvas.export_png).

Üretilen rapor dosyaları, kaynağı belli olacak biçimde adlandırılır: ölçüm raporları <TFT>_<MOD>_<tarih>_<saat>_report.json / _report.csv, birleştirme raporları ise *_rapor.json kalıbını izler. Böylece her çıktı, hangi ölçüm veya oturumdan türediğini adından okutur.

6.7 Dosya adlandırma sözleşmesi — özet

ÇıktıŞablon
Koşu klasörüYYYY-MM-DD-<Gün>-<Tür>-<HHMMSS>/
Ham + rapor dosyaları<önek>_<TFT>_<MOD>_<YYYYMMDD_HHMMSS>_<sonek>.<uzantı>
Kanonik rapor<base>_report.json / <base>_report.csv
Ölçüm HTML/PDF raporu<TFT>_<MOD>_<YYYYMMDD_HHMMSS>_report.{html,pdf}
Birleştirme raporu<numune veya şablon>_rapor.{html,json,csv,pdf}
Crash-safe ara dosya<base>_partial.csv

7. Belirlenimcilik, Yerel Tuzağı ve Seviyeler

7.1 Belirlenimcilik (her yazıcının uyduğu kural)

  • Aynı girdi → bayt-aynı çıktı. _canonical_json, sort_keys=True, ensure_ascii=False ve kompakt ayraçlar kullanır; payload'da gizli duvar-saati yoktur — created_at çağırandan gelir. Bit-aynı çıktı isteyen bir çağıran sabit created_at + sabit report_id geçirir.
  • Yerelden bağımsız veri. JSON/CSV sayıları sayı tipindedir, nokta-ondalık kullanır. Yalnız HTML/PDF insan gösterimi yerelleştirilir.
  • Kaçışlı HTML. build_report_html her dinamik değeri html.escape'ten geçirir.
⚠️
Uyarı (yerel tuzağı): Bu, sık görülen ve maliyetli bir hatadır. Veri dosyaları (JSON/CSV) asla UI biçimine (virgül ondalık, yerel tarih) sızdırılmamalıdır. _csv_value, repr/{:.0f} ile nokta-ondalığı zorlar; _utc_iso_ms ISO-8601 UTC yazar. Yerel görünüm yalnız uygulama arayüzü içindir.

7.2 Seviye → zorunlu alan eşlemesi

Alanbasecustomeraccredited
Künye (id, app/recipe sürümü, station, sample, created_at, status, simulated)EvetEvetEvet
columns.unit + typeEvetEvetEvet
integrity (sha256 checksum)EvetEvet
report_revision + kararlı arşiv diliEvetEvet
columns.spec {min,max}PLANLANAN
columns.uncertainty {..., k}PLANLANAN
calibration.cert_no / valid_untilPLANLANAN
signoff (hazırlayan/onaylayan/imza)Alan var, boş; doldurma PLANLANAN
Yerli PDF/A + gömülü font / write_xlsxPLANLANAN; PDF bugün Qt ile

7.3 Şu an PLANLANAN olanlar

Aşağıdakiler sözleşmede tanımlı ancak henüz uygulanmamıştır; rapor bunları iddia etmez:

  • Yerli .xlsx rapor yazıcısı ve arşivlik PDF/A profili (şu an PDF, HTML'den Qt yoluyla üretilir).
  • Ölçüm metrikleri için GUM Tip-B belirsizlik kolonu (ölçüm DB'si çıplak skaler taşır; belirsizlik analiz-kit Quantity yolunda yaşar).
  • Seviye-2 belirsizlik bütçesi, kalibrasyon sertifikası ve imza zinciri (ör. PDF için PAdES); calibration ve signoff şu an stub.
  • Büyük/toplu raporlar için arka-plan iş parçacığı üretimi.

8. Standart Atıfları

Bu bölümdeki davranışlar repo-içi sözleşme ve standartlara dayanır:

  • docs/standards/06-reporting.md — Raporlama standardı (belirlenimcilik, checksum, üç-seviyeli künye, yerel tuzağı, "eksik != sıfır", otomatik-iletim yasağı).
  • docs/guides/reporting-guide.md — Somut sözleşme: kanonik JSON iskeleti, kolon tanımları, CSV konvansiyonu, yazıcı sözleşmesi, birleştirme raporu (report_compose).
  • docs/standards/03-measurement-and-analysis.md — Sonuç + R² + belirsizlik.
  • docs/standards/05-data-and-database.md — Saklanan veri / NULL disiplini.
  • docs/standards/12-i18n-l10n.md — Yerel/dil ayrımı.
  • Analiz standartları (atıf): Analiz raporları, modül tanımlayıcısındaki standards[] üzerinden ilgili ölçüm standardını (designation/title/edition/scope) taşır.
ℹ️
Not (otomatik iletim yasağı): Raporlar ham veri içerebilir ancak hiçbir yere otomatik gönderilmez. Raporlama, telemetriden tamamen ayrıdır; tüm yazıcılar kullanıcının seçtiği yerel bir yola yazar. Telemetri yalnızca biçim + nokta-kovası gibi anonim metrikleri (rıza kapısına bağlı) gönderir; dosya adı/yolu asla.

9. Hızlı Başvuru ve Sık Sorulanlar

Bir ölçümün resmî kaydı hangi dosyadır?

<base>_report.json (kanonik, sha256 mühürlü). İnsana yönelik sunum bundan türetilir.

Excel dosyam virgüllü sayıları bozuk gösteriyor, ne yapmalıyım?

"CSV (Excel uyumlu)" varyantını kullanın (Bölüm 6.2) veya XLSX'i tercih edin. Arşiv için daima kanonik CSV (nokta-ondalık) saklayın.

Raporda bir değer neden boş/ görünüyor?

O nokta ölçülemedi (status="na") veya metrik hesaplanamadı. Yazılım asla eksik değeri 0 ile doldurmaz (eksik != sıfır).

"bayat" rozeti ne anlama gelir?

Rapor üretildikten sonra kaynak ölçümler değişmiş/silinmiştir. Güncel sayılar için raporu yeniden üretin; mevcut rapor mühürlü bir anlık görüntü olarak kalır.

İki dosyanın aynı ölçümden geldiğini nasıl doğrularım?

integrity.value (sha256) ile. Aynı rapor sözlüğü daima aynı özeti verir; dosya değiştiyse özet tutmaz.

PDF neden bazen üretilmiyor?

PDF, Qt (QTextDocumentQPrinter) ile üretilir; Qt yoksa veya yazma hatası olursa yazıcı sessizce atlar ve en azından HTML/JSON korunur (sağlam üretim ilkesi).