İçeriğe geç

Düzenleyici Raporlama — Aynı Raporu İki Kez Bastık, Neden Farklı Çıktı?

İleri 9 dk Sık karşılaşılır

Önce şunu oku: Mutabakat — Toplamlar Tuttu, Hesap Neden Yine de Yanlış?

30 saniyede özet

Geçmiş tarihli rapor bugünkü tablodan basılırsa gönderilenle tutmaz. Yeniden üretilebilir rapor iki tarihi sabitler: verinin geçerli olduğu ve bilindiği tarih. Sonradan bulunan hata raporu değiştirmez; düzeltme olarak bildirilir.

Eylül’de sınıfın fotoğrafını çektin. Ekimde biri “eylül fotoğrafını” istedi. Bugünkü sınıfın yeni bir fotoğrafını çekip vermek, istenen fotoğraf değildir.

  1. Bayt: Düzenleyici 30 Eylül raporunu yeniden istedi. Kolay: rapor şablonunu çalıştırırız, PDF çıkar.

  2. Sen: Bastım. 1 Ekim'de gönderdiğimiz raporda 1.000 hisse vardı; bu çıktıda başka bir sayı var.

  3. Bayt: Aynı şablon, aynı tarih! Rapor nasıl değişebilir?

  4. Bayt: Şablon aynı. Peki okuduğu veri, 1 Ekim'deki veriyle aynı mı?

Rapor bir fotoğraftır

Düzenleyici raporlar belli bir tarihin durumunu anlatır: “30 Eylül itibarıyla müşteri pozisyonları”. Rapor gönderildikten sonra o tarihe ait bir kayıt olur ve aylar sonra yeniden istenebilir.

Rapor şablonu, örneğin bir JasperReports şablonu, aynı kalabilir. Ama şablon bugünkü tabloyu okuyorsa, 30 Eylül’den sonraki her işlem de rapora girer.

Kafam karıştı, daha basit anlat

Geçmiş tarihli rapor, o tarihin verisini okumalı; bugünkü tabloyu değil.

Hızlı kontrolBaşlangıç

Düzenleyici bir rapor neyi anlatır?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

30 Eylül raporu 6 Ekim'de bugünkü tablodan basılırsa ne olur?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

İki tarih: geçerli olduğu ve bilindiği

Bir kaydın iki tarihi vardır. Biri, bilginin geçerli olduğu tarihtir: “30 Eylül’deki pozisyon”. Öteki, bu bilginin sisteme kaydedildiği tarihtir: “1 Ekim’de böyle biliyorduk”.

Her iki tarihi de tutan veriye çift zamanlı veriHer kaydın iki tarihini tutan veri: bilginin geçerli olduğu tarih ve sisteme kaydedildiği tarih. Geçmişin hem doğrusunu hem o an bilineni gösterebilir.Sözlükte gör → veri denir.

1 Ekim'de 30 Eylül pozisyonu 1.000 olarak raporlandı. 3 Ekim'de kaçırılmış bir işlem bulundu: 30 Eylül pozisyonu aslında 1.200'dü. Rapor '30 Eylül, 1 Ekim'de bilindiği hâliyle' okunursa ne gösterir? Cevabı göster

1.000 gösterir: gönderilenle birebir aynı. 3 Ekim’deki düzeltme, 1 Ekim’de henüz bilinmiyordu. Rapor, gönderildiği andaki bilgiyi yeniden üretir.

Eylül fotoğrafını bas, düzeltmeyi not et.
Adım adım oku
  1. Eylül'de sınıf fotoğrafı çekildi.
  2. Ekimde eylül fotoğrafı istendi.
  3. Bugünkü sınıfın fotoğrafını çektin.
  4. Eylül fotoğrafını bas, düzeltmeyi not et.

İki tarihi de sabitleyen rapor yeniden üretilebilir raporKaç kez üretilirse üretilsin aynı çıkan rapor. Verinin geçerli olduğu ve bilindiği tarihi, şablon sürümünü sabitler.Sözlükte gör →: kaç kez basılırsa basılsın aynı çıkar. Bugün bilinen doğruyu görmek istersen, geçerli tarihi sabit tutup bilinme tarihini bugüne çekersin.

Kafam karıştı, daha basit anlat

Rapor iki tarihi sabitler: verinin geçerli olduğu ve bilindiği tarih.

Hızlı kontrolOrta

Çift zamanlı veride hangi iki tarih tutulur?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Gönderilen raporu birebir yeniden üretmek için sorgu neyi sabitlemeli?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Düzeltme bir ektir

Gönderilmiş bir raporda hata bulunursa, eski kayıt silinmez ve üzerine yazılmaz. Düzeltme kendi tarihiyle yeni bir kayıt olarak eklenir; eski ve yeni değer yan yana durur.

Düzenleyiciye de düzeltilmiş rapor ayrıca bildirilir. Böylece “ne gönderdik, ne zaman neyi öğrendik, ne düzelttik” sorularının her birinin bir cevabı olur.

Kafam karıştı, daha basit anlat

Hata bulununca eski kayıt kalır; düzeltme ayrı bir kayıt olarak eklenir ve bildirilir.

Hızlı kontrolOrta

Gönderilmiş raporda hata bulundu. Doğru yol?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Kendin gör

30 Eylül raporu yeniden isteniyor

Tohum 482572
  1. · 1 Ekim: rapor gönderildi
  2. · 3 Ekim: düzeltme
  3. · 5 Ekim: yeni alım
  4. · 6 Ekim: yeniden istendi

Gönderilen rapor: 1.000 hisse

· Yeniden basılan: —

Hız
Adım 0

Şu an ne oldu?

Olay: filed

Gönderilen rapor ile veritabanı zamanla ayrışıyor.

Görevler0/3

  • Geçmiş tarihli rapor bugünkü sayıyı göstersinaçık

    İpucu

    Bugünkü tabloyu oku.

  • Rapor gönderilenle birebir aynı çıksınaçık

    İpucu

    30 Eylül, 1 Ekim'de bilindiği hâliyle.

  • Düzeltilmiş doğruyu gösteraçık

    İpucu

    30 Eylül, bugün bilindiği hâliyle.

Olay günlüğü (0)

Henüz olay yok. Oynat veya adımla.

  1. Varsayılanla oynat. Yeniden basım bugünkü tabloyu okudu: 1.500 hisse, 5 Ekim’deki alım da içinde.
  2. “1 Ekim’de bilindiği hâliyle”yi seç. 1.000 hisse: gönderilenle birebir aynı.
  3. “Bugün bilindiği hâliyle”yi seç. 1.200 hisse: fark, 3 Ekim’deki düzeltmeyle açıklanıyor.
Hızlı kontrolOrta

Simülatörde "bugün bilindiği hâliyle" neden 1.200 gösterdi?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Tuzaklar

Yalnızca PDF saklamak. Gönderilen PDF’yi saklamak iyidir, ama yetmez. Sorulduğunda o sayıların hangi kayıtlardan geldiğini gösterebilmek için verinin o anki hâli de saklanmalıdır.

Üzerine yazan güncelleme. Pozisyon tablosu UPDATE ile güncelleniyorsa, eski değer kaybolur ve geçmiş yeniden üretilemez. Değişiklikleri yeni satırlar olarak ekle.

Şablon sürümü. Rapor şablonu da zamanla değişir. Hangi raporun hangi şablon sürümüyle üretildiği de kaydedilmeli.

Kafam karıştı, daha basit anlat

PDF’nin yanında veriyi de sakla, üzerine yazma, şablon sürümünü kaydet.

Hızlı kontrolOrta

Pozisyon tablosu her gün UPDATE ile güncelleniyor. Raporlama için sorun ne?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aşağıda çift zamanlı bir pozisyon tablosu ve onu belli bir tarihte, belli bir bilgiyle okuyan rapor sorgusu var.

Derinleş · Düzenleyici rapor: iki tarihle okunan pozisyonlar 3 dosya · ~33 satır · ilk okumada atlayabilirsin
Proje dosyaları

db/reporting/ position-history.sql Tablo: her satırın geçerli olduğu tarih ve kaydedildiği an var; değişiklik yeni satırdır, güncelleme değildir.

db/reporting/position-history.sql
-- One row per change. A correction adds a row; nothing is updated in place.
CREATE TABLE position_history (
account_id VARCHAR(20) NOT NULL,
isin CHAR(12) NOT NULL,
valid_date DATE NOT NULL, -- the day this quantity was true
recorded_at DATETIME2 NOT NULL, -- when we learned it
quantity BIGINT NOT NULL,
reason VARCHAR(200) NULL, -- e.g. 'missed trade found'
CONSTRAINT pk_position_history PRIMARY KEY (account_id, isin, valid_date, recorded_at)
);

db/reporting/ positions-as-of.sql Sorgu: verilen geçerli tarih ve bilinme anına göre her hesap için tek satır seçer.

db/reporting/positions-as-of.sql
-- Positions valid on :validDate, as they were known at :knownAt.
SELECT account_id, isin, quantity
FROM (
SELECT h.*,
ROW_NUMBER() OVER (PARTITION BY account_id, isin
ORDER BY recorded_at DESC) AS rn
FROM position_history h
WHERE h.valid_date = :validDate
AND h.recorded_at <= :knownAt
) latest
WHERE rn = 1;

reporting/src/main/java/com/bank/reporting/ ReportRun.java ReportRun: hangi tarihlerle ve hangi şablon sürümüyle üretildiğini raporun yanında saklar.

reporting/src/main/java/com/bank/reporting/ReportRun.java
package com.bank.reporting;
import java.time.Instant;
import java.time.LocalDate;
/** Stored with every generated report, so it can be produced again exactly. */
public record ReportRun(
String reportCode,
LocalDate validDate,
Instant knownAt,
String templateVersion,
String fileSha256) {}

Kendini sına

Şimşek turu1/4

Geçmiş tarihli bir raporu bugünkü tablodan basmak gönderilenle aynı sonucu verir.

Soru 1/3İleri

Yalnızca gönderilen PDF'yi saklamak neden yetmez?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aklında kalacak üç şey

  1. 1 Geçmiş tarihli bir rapor bugünkü tablodan basılırsa, o tarihten sonraki işlemleri de içerir ve gönderilenle tutmaz.
  2. 2 Yeniden üretilebilir rapor iki tarihi sabitler: verinin geçerli olduğu tarih ve verinin sisteme kaydedildiği, yani bilindiği tarih.
  3. 3 Gönderildikten sonra bulunan bir hata eski kaydı silmez; düzeltme kendi tarihiyle eklenir ve düzenleyiciye ayrıca bildirilir.
0/4 kart bu dersten toplandı