58 salt-okunur veritabanı sağlık kuralı, 11 başlık: işlem/bakiye/stok/history bütünlüğü, duplicate, kur=0, orphan, broken dependency, disabled trigger, missing object/column.
Künye (front-matter) · EKB-HEALTH-CHECK · reality [SUPPORT_OBSERVED, SOURCE_IMPLEMENTED, GENERATED_PROPOSAL]
| id | EKB-HEALTH-CHECK |
| title | Health Check |
| entity_type | ERROR_KB |
| module | MOD-KALITE |
| audience | [SUPPORT, DEVELOPER, QA] |
| confidentiality | AIFASOFT_INTERNAL |
| product_scope | ERPGOLD_CORE |
| customer_scope | ALL |
| reality | [SUPPORT_OBSERVED, SOURCE_IMPLEMENTED, GENERATED_PROPOSAL] |
| lifecycle | ACTIVE |
| confidence | MEDIUM |
| version_from | VERSION_UNKNOWN |
| version_to | - |
| created_at | 2026-09-13 |
| last_verified | 2026-09-13 |
| source_hashes | [] |
| sources | [DOCUMENT:ERPGOLD_ERROR_MASTER.xlsx, DOCUMENT:ERPGOLD_HATA_KOK_NEDEN_BILGI_BANKASI.md, SRC-TKT-ERP, SOURCE_CODE:ERPPRO, DB_CATALOG:INST-ERPGOLDV2] |
| aliases | [Health Check] |
| tags | [error-kb] |
| wiki_version | v1.5 |
| source_package | ERPGOLD_HATA_BILGI_BANKASI_v1 / Wiki_23_Hata_Bilgi_Bankasi |
| sql_objects | 160 nesne |
| runtime_status | RULES_ONLY — hiçbir kurulumda otomatik PASS yazılmadı; Runtime Certification: PENDING |
VERİTABANI SAĞLIK KONTROLLERİ — 58 salt-okunur kural. Her kural yalnızca SELECT içerir; hiçbir kural veri değiştirmez. Sonuçlar PASS / WARN / FAIL olarak yorumlanır. Kaynak: ERPGOLD_HEALTH_CHECK.sql (Hata Bilgi Bankası paketi) + BASE Runtime Certification kontrol seti. Bu kurallar bir kurulumun BASE'e uygunluğunu ölçer; BASE'in kendisi henüz CANDIDATE_CANONICAL statüsündedir.
Başlıklar
- Cari İşlem Bütünlüğü (14)
- Bakiye Tutarlılığı (5)
- Stok Hareket Tutarlılığı (6)
- History / İz Tutarlılığı (2)
- Duplicate İşlemler (6)
- Kur = 0 / Kur Tutarsızlığı (5)
- Orphan Kayıtlar (2)
- Broken Dependency (2)
- Disabled Trigger (4)
- Missing Object (3)
- Missing Column (1)
- Diğer: tohum veri, performans, veri tipi (8)
Özet
| Kural | 58 |
| Severity | S1 13 · S2 31 · S3 13 · S4 1 |
| FAIL kuralı / WARN kuralı | 35 / 23 |
| Çalıştırma | SSMS'de salt-okunur oturum; her sorgu tek başına çalıştırılabilir. Sonuç 0 → PASS. |
1. Cari İşlem Bütünlüğü
HC INV-01 — Aktif işlemin bakiye hareketi eksik S1 · 0 → PASS, aksi FAIL
| CheckId | INV-01 |
| Description | Aktif işlemin bakiye hareketi eksik |
| Risk | S1 · Cari.AcceptTransaction satır 263-558; BR-DEFTER-URETIMI; BR-BAKIYE-001/003/004 |
| RelatedObjects | Cari.Islemler, Cari.BakiyeIslem, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-OBS-034 · ERR-OBS-037 · ERR-OBS-040 · ERR-OBS-043 · ERR-OBS-048 · ERR-OBS-057 · ERR-OBS-058 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT I.Id, I.IslemKodu, I.IslemTuru, I.IslemTipi, I.HesapId, I.Tarih
FROM Cari.Islemler I
WHERE I.IsDeleted = 0
AND I.IslemTipi NOT IN (1, 11, 12)
AND (
(I.IslemKodu IN (1,2,9,4,5,6) AND ((I.BakiyeId > 0 AND I.Miktar <> 0) OR ISNULL(I.Tutar,0) <> 0))
OR (I.IslemKodu IN (0,14))
OR (I.IslemKodu NOT IN (0,1,2,4,5,6,9,14) AND ISNULL(I.Tutar,0) <> 0)
)
AND NOT EXISTS (SELECT 1 FROM Cari.BakiyeIslem B WHERE B.IslemId = I.Id)) x |
HC INV-02 — Silinmiş / belge tipli (11,12) işlemin kalan türetilmiş kaydı S1 · 0 → PASS, aksi FAIL
| CheckId | INV-02 |
| Description | Silinmiş / belge tipli (11,12) işlemin kalan türetilmiş kaydı |
| Risk | S1 · Cari.AcceptTransaction satır 256-263; BR-TIP-004 |
| RelatedObjects | Cari.BakiyeIslem, Cari.Islemler, Stok.StokHaraketleri, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-OBS-001 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT 'BakiyeIslem' AS Kaynak, B.IslemId FROM Cari.BakiyeIslem B JOIN Cari.Islemler I ON I.Id = B.IslemId WHERE I.IsDeleted = 1 OR I.IslemTipi IN (11,12) UNION ALL SELECT 'StokHaraketleri', H.IslemId FROM Stok.StokHaraketleri H JOIN Cari.Islemler I ON I.Id = H.IslemId AND H.Bolum = 0 WHERE I.IsDeleted = 1 OR I.IslemTipi IN (11,12)) x |
HC INV-03 — PEŞİN işlemin bakiye satırı S2 · 0 → PASS, aksi FAIL
| CheckId | INV-03 |
| Description | PEŞİN işlemin bakiye satırı |
| Risk | S2 · Cari.AcceptTransaction satır 346, 352, 389, 419; BR-TIP-002 |
| RelatedObjects | Cari.BakiyeIslem, Cari.Islemler, Cari.AcceptTransaction |
| RelatedErrors | ERR-SIL-075 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT B.IslemId, I.IslemKodu, B.BirimId, B.Bakiye FROM Cari.BakiyeIslem B JOIN Cari.Islemler I ON I.Id = B.IslemId WHERE I.IslemTipi = 1 AND I.IslemKodu NOT IN (0,14)) x |
HC INV-11 — İşlemde sahipsiz hesap / şube / kasa S2 · 0 → PASS, aksi FAIL
| CheckId | INV-11 |
| Description | İşlemde sahipsiz hesap / şube / kasa |
| Risk | S2 · Cari.AcceptTransaction satır 180-185; Cari.Islem.vb:508 |
| RelatedObjects | Cari.Islemler, Cari.Hesaplar, Sistem.Subeler, Sistem.Kasalar, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 · ERR-OBS-043 · ERR-OBS-048 · ERR-OBS-018 · ERR-OBS-041 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT I.Id, I.HesapId, I.SubeId, I.KasaId
FROM Cari.Islemler I
WHERE I.IsDeleted = 0 AND (
I.HesapId = 0 OR NOT EXISTS (SELECT 1 FROM Cari.Hesaplar H WHERE H.Id = I.HesapId)
OR I.SubeId = 0 OR NOT EXISTS (SELECT 1 FROM Sistem.Subeler S WHERE S.Id = I.SubeId)
OR I.KasaId = 0 OR NOT EXISTS (SELECT 1 FROM Sistem.Kasalar K WHERE K.Id = I.KasaId))) x |
HC INV-14 — Negatif miktar / adet / tutar S2 · 0 → PASS, aksi FAIL
| CheckId | INV-14 |
| Description | Negatif miktar / adet / tutar |
| Risk | S2 · Cari.AcceptTransaction satır 274, 336; Cari.Islem.vb:513 |
| RelatedObjects | Cari.Islemler, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 · ERR-OBS-005 · ERR-OBS-006 · ERR-OBS-009 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT Id, IslemKodu, IslemTuru, Miktar, Adet, Tutar FROM Cari.Islemler WHERE IsDeleted = 0 AND (Miktar < 0 OR Adet < 0 OR Tutar < 0)) x |
HC INV-17 — İptal edilmiş işlemin belge detayı S3 · 0 → PASS, aksi WARN
| CheckId | INV-17 |
| Description | İptal edilmiş işlemin belge detayı |
| Risk | S3 · Cari.UpdateTransaction (tek satır değişkeni); BR-BELGE-HAVUZU |
| RelatedObjects | Cari.IslemDetaylari, Cari.Islemler, Cari.UpdateTransaction |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-009 · ERR-OBS-018 · ERR-OBS-012 · ERR-OBS-014 · ERR-SIL-030 · ERR-SIL-059 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT D.IslemId, D.ETTN, D.Durum FROM Cari.IslemDetaylari D JOIN Cari.Islemler I ON I.Id = D.IslemId WHERE I.IsDeleted = 1 AND (ISNULL(D.ETTN,'') = '' OR ISNULL(D.Durum,'') <> 'EIPTAL')) x |
HC INV-24 — Tarihsiz türetilmiş kayıt (devir öncesi kontrol) S2 · 0 → PASS, aksi FAIL
| CheckId | INV-24 |
| Description | Tarihsiz türetilmiş kayıt (devir öncesi kontrol) |
| Risk | S2 · Sistem.Devir (Tarih<@Tarih / Tarih>=@Tarih); H-108 |
| RelatedObjects | Cari.BakiyeIslem, Stok.StokHaraketleri, Cari.Islemler, Sistem.Devir |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-OBS-001 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT 'BakiyeIslem' AS Tablo, COUNT(*) FROM Cari.BakiyeIslem WHERE Tarih IS NULL UNION ALL SELECT 'StokHaraketleri', COUNT(*) FROM Stok.StokHaraketleri WHERE Tarih IS NULL UNION ALL SELECT 'Islemler', COUNT(*) FROM Cari.Islemler WHERE Tarih IS NULL AND IsDeleted = 0) x |
HC INV-26 — Fiş numarası tekil gün/hesap S3 · 0 → PASS, aksi WARN
| CheckId | INV-26 |
| Description | Fiş numarası tekil gün/hesap |
| Risk | S3 · Cari.IslemEx.vb:256 (GetNewFisNo); iScreen.vb:723; H-102; CTR-016 |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT FisNo, KasaId, COUNT(DISTINCT Tarih) AS GunSayisi, COUNT(DISTINCT HesapId) AS HesapSayisi FROM Cari.Islemler WHERE IsDeleted = 0 GROUP BY FisNo, KasaId HAVING COUNT(DISTINCT Tarih) > 1 OR COUNT(DISTINCT HesapId) > 1) x |
HC INV-27 — Çift bacaklı işlemlerin eşi mevcut S2 · 0 → PASS, aksi FAIL
| CheckId | INV-27 |
| Description | Çift bacaklı işlemlerin eşi mevcut |
| Risk | S2 · iFormBase.SendTo; iFNakit.SaveCashTransaction; BR-VIRMAN-002; BR-TIP-011; H-106 |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT 'VIRMAN' AS Tip, RefNo, COUNT(*) AS Adet FROM Cari.Islemler WHERE IsDeleted = 0 AND IslemKodu = 11 GROUP BY RefNo HAVING COUNT(*) <> 2 UNION ALL SELECT 'PARITE', CONVERT(nvarchar(72), a.Id), 1 FROM Cari.Islemler a WHERE a.IsDeleted = 0 AND a.IslemKodu = 3 AND a.VaryantId = -1 AND NOT EXISTS (SELECT 1 FROM Cari.Islemler b WHERE b.VaryantId = a.Id AND b.IsDeleted = 0)) x |
HC INV-21 — Son 30 günde pasif şubeye yazılmış işlem S3 · 0 → PASS, aksi WARN
| CheckId | INV-21 |
| Description | Son 30 günde pasif şubeye yazılmış işlem |
| Risk | S3 · |
| RelatedObjects | Cari.Islemler, Sistem.Subeler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 · ERR-OBS-018 · ERR-OBS-041 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler I JOIN Sistem.Subeler S ON S.Id = I.SubeId WHERE I.IsDeleted = 0 AND S.IsActive = 0 AND I.InsertDate > DATEADD(day,-30,GETDATE()) |
HC SQLR-054 — Cari.Islemler.Tag sayısal olmayan değer (Conversion failed riski) S3 · 0 → PASS, aksi WARN
| CheckId | SQLR-054 |
| Description | Cari.Islemler.Tag sayısal olmayan değer (Conversion failed riski) |
| Risk | S3 · |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | SQLR-054 · ERR-POT-121 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE Tag IS NOT NULL AND TRY_CONVERT(int, Tag) IS NULL |
HC SQLR-061 — Cari.Islemler.HesapType NULL S2 · 0 → PASS, aksi WARN
| CheckId | SQLR-061 |
| Description | Cari.Islemler.HesapType NULL |
| Risk | S2 · |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | SQLR-061 · ERR-POT-126 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE HesapType IS NULL |
HC SQLR-070 — Silinmiş işlemin ETTN'siz belge detayı (kalıntı) S3 · 0 → PASS, aksi WARN
| CheckId | SQLR-070 |
| Description | Silinmiş işlemin ETTN'siz belge detayı (kalıntı) |
| Risk | S3 · |
| RelatedObjects | Cari.IslemDetaylari, Cari.Islemler |
| RelatedErrors | SQLR-070 · ERR-SIL-030 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Cari.IslemDetaylari D JOIN Cari.Islemler I ON I.Id = D.IslemId WHERE I.IsDeleted = 1 AND ISNULL(D.ETTN,'') = '' |
HC IDN-01 — Cari.Islemler identity mevcut değeri ile MAX(Id) uyumu (reseed/çakışma riski) S2 · 0 → PASS, aksi FAIL
| CheckId | IDN-01 |
| Description | Cari.Islemler identity mevcut değeri ile MAX(Id) uyumu (reseed/çakışma riski) |
| Risk | S2 · |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT CASE WHEN IDENT_CURRENT('Cari.Islemler') < (SELECT ISNULL(MAX(Id),0) FROM Cari.Islemler) THEN 1 ELSE 0 END |
2. Bakiye Tutarlılığı
HC INV-08 — Tutar bakiye satırı işlem tutarına eşit S2 · 0 → PASS, aksi FAIL
| CheckId | INV-08 |
| Description | Tutar bakiye satırı işlem tutarına eşit |
| Risk | S2 · Cari.AcceptTransaction satır 352-356, 389-393, 419-431 |
| RelatedObjects | Cari.Islemler, Cari.BakiyeIslem, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 · ERR-OBS-005 · ERR-OBS-027 · ERR-OBS-006 · ERR-OBS-009 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT I.Id, I.Tutar, B.Bakiye FROM Cari.Islemler I JOIN Cari.BakiyeIslem B ON B.IslemId = I.Id AND B.BirimId = I.BirimId WHERE I.IsDeleted = 0 AND I.IslemTipi NOT IN (1,11,12) AND I.IslemKodu NOT IN (0,14) AND ISNULL(I.Tutar,0) <> 0 AND ABS(ABS(B.Bakiye) - ABS(I.Tutar)) > 0.005) x |
HC INV-09 — Bakiye satırı yönü işlem yönü ile uyumlu S2 · 0 → PASS, aksi FAIL
| CheckId | INV-09 |
| Description | Bakiye satırı yönü işlem yönü ile uyumlu |
| Risk | S2 · BR-YON-002/003/004; Cari.AcceptTransaction satır 334-344, 371-381, 409-417 |
| RelatedObjects | Cari.Islemler, Cari.BakiyeIslem, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 · ERR-OBS-005 · ERR-OBS-027 · ERR-OBS-006 · ERR-OBS-009 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT I.Id, I.IslemKodu, I.IslemTuru, B.BirimId, B.Bakiye FROM Cari.Islemler I JOIN Cari.BakiyeIslem B ON B.IslemId = I.Id AND B.BirimId = I.BirimId WHERE I.IsDeleted = 0 AND I.IslemTipi NOT IN (1,10,11,12) AND I.IslemKodu NOT IN (0,14) AND ISNULL(I.Tutar,0) <> 0 AND ((I.IslemTuru % 2 = 0 AND B.Bakiye > 0) OR (I.IslemTuru % 2 = 1 AND B.Bakiye < 0))) x |
HC INV-12 — Bakiye satırı geçerli birim taşımalı S2 · 0 → PASS, aksi FAIL
| CheckId | INV-12 |
| Description | Bakiye satırı geçerli birim taşımalı |
| Risk | S2 · Cari.AcceptTransaction satır 64-67, 318-330; Cari.IslemEx.vb:303 |
| RelatedObjects | Cari.BakiyeIslem, Sistem.Birimler, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-OBS-023 · ERR-OBS-040 · ERR-OBS-212 · ERR-OBS-006 · ERR-OBS-009 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT B.BirimId, COUNT(*) AS Adet, SUM(B.Bakiye) AS Toplam FROM Cari.BakiyeIslem B WHERE B.BirimId IS NULL OR (B.BirimId <> -1 AND NOT EXISTS (SELECT 1 FROM Sistem.Birimler Br WHERE Br.Id = B.BirimId)) GROUP BY B.BirimId) x |
HC INV-15 — Hesap bazında bakiye toplamı = işlemlerden beklenen toplam (has/tutar) S1 · 0 → PASS, aksi FAIL
| CheckId | INV-15 |
| Description | Hesap bazında bakiye toplamı = işlemlerden beklenen toplam (has/tutar) |
| Risk | S1 · Cari.AcceptTransaction; BR-YON-002/004; PB-028 (SYM-BAKIYE) |
| RelatedObjects | Cari.Islemler, Cari.BakiyeIslem, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-184 · ERR-OBS-185 · ERR-OBS-186 · ERR-OBS-187 · ERR-OBS-188 · ERR-OBS-189 · ERR-OBS-190 · ERR-OBS-191 · ERR-OBS-192 · ERR-OBS-193 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | CTE:WITH Beklenen AS (
SELECT I.HesapId, I.BirimId,
SUM(CASE WHEN I.IslemTuru % 2 = 0 THEN -ABS(I.Tutar) ELSE ABS(I.Tutar) END) AS Tutar
FROM Cari.Islemler I
WHERE I.IsDeleted = 0 AND I.IslemTipi NOT IN (1,10,11,12) AND I.IslemKodu NOT IN (0,14) AND ISNULL(I.Tutar,0) <> 0
GROUP BY I.HesapId, I.BirimId),
Gercek AS (
SELECT B.HesapId, B.BirimId, SUM(B.Bakiye) AS Bakiye
FROM Cari.BakiyeIslem B JOIN Cari.Islemler I ON I.Id = B.IslemId AND B.BirimId = I.BirimId
WHERE I.IslemKodu NOT IN (0,14) AND I.IslemTipi <> 10
GROUP BY B.HesapId, B.BirimId)
SELECT @n = COUNT(*)
FROM Beklenen e FULL JOIN Gercek g ON g.HesapId = e.HesapId AND g.BirimId = e.BirimId
WHERE ABS(ISNULL(e.Tutar,0) - ISNULL(g.Bakiye,0)) > 0.01 |
HC INV-23 — Limit kontrolü veri tazeliği (Cari.BakiyeDun) S2 · 0 → PASS, aksi FAIL
| CheckId | INV-23 |
| Description | Limit kontrolü veri tazeliği (Cari.BakiyeDun) |
| Risk | S2 · Cari.ToplamBakiye, Bakiye.DunkiBakiyeler; GAP-DB-03 |
| RelatedObjects | Sistem.Subeler, Cari.BakiyeDun, Cari.ToplamBakiye, Bakiye.DunkiBakiyeler |
| RelatedErrors | ERR-OBS-014 · ERR-OBS-018 · ERR-OBS-041 · ERR-SIL-034 · ERR-SIL-070 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT (SELECT COUNT(*) FROM Sistem.Subeler WHERE IsLimitControl = 1 AND IsDeleted = 0) AS LimitKontrolluSube,
(SELECT COUNT(*) FROM Cari.BakiyeDun) AS BakiyeDunSatir,
(SELECT MAX(Tarih) FROM Cari.BakiyeDun) AS SonTarih,
DATEADD(day,-1,CONVERT(date,GETDATE())) AS Beklenen) x |
3. Stok Hareket Tutarlılığı
HC INV-04 — Aktif işlemin stok hareketi eksik S1 · 0 → PASS, aksi FAIL
| CheckId | INV-04 |
| Description | Aktif işlemin stok hareketi eksik |
| Risk | S1 · Cari.AcceptTransaction satır 271-302; BR-STOK-001/002/003/004, BR-TIP-003/005 |
| RelatedObjects | Cari.Islemler, Stok.StokHaraketleri, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-184 · ERR-OBS-185 · ERR-OBS-186 · ERR-OBS-187 · ERR-OBS-188 · ERR-OBS-189 · ERR-OBS-190 · ERR-OBS-191 · ERR-OBS-192 · ERR-OBS-193 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT I.Id, I.IslemKodu, I.IslemTipi, I.KasaId FROM Cari.Islemler I WHERE I.IsDeleted = 0 AND I.IslemTipi NOT IN (11,12) AND (I.IslemKodu IN (0,1,2,8,9) OR (I.IslemKodu = 3 AND I.IslemTipi <> 4) OR I.IslemTipi = 1) AND NOT EXISTS (SELECT 1 FROM Stok.StokHaraketleri H WHERE H.IslemId = I.Id AND H.Bolum = 0)) x |
HC INV-06 — Stok hareketi işareti işlem yönü ile uyumlu S2 · 0 → PASS, aksi FAIL
| CheckId | INV-06 |
| Description | Stok hareketi işareti işlem yönü ile uyumlu |
| Risk | S2 · Cari.AcceptTransaction satır 274-301; BR-STOK-001 |
| RelatedObjects | Stok.StokHaraketleri, Cari.Islemler, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-OBS-001 · ERR-OBS-014 · ERR-OBS-006 · ERR-OBS-009 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT H.IslemId, H.StokTipi, H.IslemTuru, H.Miktar, H.Adet FROM Stok.StokHaraketleri H JOIN Cari.Islemler I ON I.Id = H.IslemId AND H.Bolum = 0 WHERE NOT (I.IslemTipi = 1 AND H.StokTipi = 2 AND H.StokId = I.BirimId) AND ((H.IslemTuru = 0 AND (H.Miktar < 0 OR H.Adet < 0)) OR (H.IslemTuru = 1 AND (H.Miktar > 0 OR H.Adet > 0)))) x |
HC INV-07 — Has tutarlılığı: işlem × milyem = stok has = bakiye has S2 · 0 → PASS, aksi FAIL
| CheckId | INV-07 |
| Description | Has tutarlılığı: işlem × milyem = stok has = bakiye has |
| Risk | S2 · BR-HESAP-001; Cari.AcceptTransaction satır 73, 274, 349; columns.json (Bakiye 18,2 / Has 18,5) |
| RelatedObjects | Cari.Islemler, Stok.StokHaraketleri, Cari.BakiyeIslem, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-184 · ERR-OBS-185 · ERR-OBS-186 · ERR-OBS-187 · ERR-OBS-188 · ERR-OBS-189 · ERR-OBS-190 · ERR-OBS-191 · ERR-OBS-192 · ERR-OBS-193 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT I.Id, I.Miktar * I.AuMilyem AS HasHesap, H.Has AS StokHas, B.Bakiye AS BakiyeHas
FROM Cari.Islemler I
LEFT JOIN Stok.StokHaraketleri H ON H.IslemId = I.Id AND H.Bolum = 0 AND H.StokTipi = 1
LEFT JOIN Cari.BakiyeIslem B ON B.IslemId = I.Id AND B.BirimId = I.BakiyeId AND I.BakiyeId > 0
WHERE I.IsDeleted = 0 AND I.IslemKodu IN (1,2) AND I.IslemTipi NOT IN (1,11,12)
AND ( (H.IslemId IS NOT NULL AND ABS(ABS(H.Has) - ABS(I.Miktar * I.AuMilyem)) > 0.0001)
OR (B.IslemId IS NOT NULL AND ABS(ABS(B.Bakiye) - ABS(I.Miktar * I.AuMilyem)) > 0.0051) )) x |
HC INV-22 — Transfer stok hareketi sayısı S2 · 0 → PASS, aksi FAIL
| CheckId | INV-22 |
| Description | Transfer stok hareketi sayısı |
| Risk | S2 · Cari.TransferUpdateSTatus (StokTipi=-2 silme); Cari.Transferler.vb:222 |
| RelatedObjects | Cari.Transferler, Stok.StokHaraketleri, Cari.TransferUpdateSTatus |
| RelatedErrors | ERR-OBS-251 · ERR-POT-110 · ERR-POT-136 · ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT T.Id, T.Status, T.IsDeleted, COUNT(H.IslemId) AS HareketSayisi
FROM Cari.Transferler T
LEFT JOIN Stok.StokHaraketleri H ON H.IslemId = T.Id AND H.Bolum = 2
GROUP BY T.Id, T.Status, T.IsDeleted
HAVING (T.Status = 1 AND T.IsDeleted = 0 AND COUNT(H.IslemId) <> 2)
OR ((T.Status <> 1 OR T.IsDeleted = 1) AND COUNT(H.IslemId) > 0)) x |
HC INV-25 — Takoz adet stoğu 0 veya 1 S2 · 0 → PASS, aksi FAIL
| CheckId | INV-25 |
| Description | Takoz adet stoğu 0 veya 1 |
| Risk | S2 · Stok.GetTakozAdet; Cari.AcceptTransaction satır 225-247; BR-STOK-002; H-130 |
| RelatedObjects | Stok.StokHaraketleri, Stok.GetTakozAdet, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-POT-135 · ERR-POT-138 · ERR-SIL-049 · ERR-OBS-006 · ERR-OBS-009 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT StokId, SUM(Adet) AS Adet FROM Stok.StokHaraketleri WHERE StokTipi = 3 GROUP BY StokId HAVING SUM(Adet) NOT IN (0,1)) x |
HC INV-29 — Stok hareketi milyem ve has iç tutarlılığı S2 · 0 → PASS, aksi FAIL
| CheckId | INV-29 |
| Description | Stok hareketi milyem ve has iç tutarlılığı |
| Risk | S2 · Devir.vb:67 (Sum(Milyem)); Sistem.Devir (Has=0); BR-HESAP-001 |
| RelatedObjects | Stok.StokHaraketleri, Sistem.Devir |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-OBS-036 · ERR-OBS-251 · ERR-SIL-065 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT IslemId, Bolum, StokId, Miktar, Milyem, Has FROM Stok.StokHaraketleri WHERE StokTipi = 1 AND (Milyem > 1 OR (Milyem <> 0 AND ABS(Has - Miktar * Milyem) > 0.0001))) x |
4. History / İz Tutarlılığı
HC INV-16 — Cari.History eksik / sahipsiz S3 · 0 → PASS, aksi WARN
| CheckId | INV-16 |
| Description | Cari.History eksik / sahipsiz |
| Risk | S3 · Cari.InsertTransaction, Cari.UpdateTransaction, Cari.DeleteTransaction; Sistem.Devir |
| RelatedObjects | Cari.Islemler, Cari.History, Cari.InsertTransaction, Cari.UpdateTransaction, Cari.DeleteTransaction, Sistem.Devir |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 · ERR-OBS-030 · ERR-OBS-037 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT 'HISTORY_YOK' AS Sorun, I.Id FROM Cari.Islemler I WHERE NOT EXISTS (SELECT 1 FROM Cari.History H WHERE H.TransactionId = I.Id) UNION ALL SELECT 'ORPHAN_HISTORY', H.TransactionId FROM Cari.History H WHERE NOT EXISTS (SELECT 1 FROM Cari.Islemler I WHERE I.Id = H.TransactionId) AND H.LogDate >= (SELECT MIN(InsertDate) FROM Cari.Islemler)) x |
HC SQLR-065 — Sistem.SilAciklama sahipsiz IslemId S3 · 0 → PASS, aksi WARN
| CheckId | SQLR-065 |
| Description | Sistem.SilAciklama sahipsiz IslemId |
| Risk | S3 · |
| RelatedObjects | Sistem.SilAciklama, Cari.Islemler |
| RelatedErrors | SQLR-065 · ERR-OBS-251 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Sistem.SilAciklama S WHERE NOT EXISTS (SELECT 1 FROM Cari.Islemler I WHERE I.Id = S.TransID) |
5. Duplicate İşlemler
HC INV-10 — Çift kayıt (duplicate posting) S2 · 0 → PASS, aksi FAIL
| CheckId | INV-10 |
| Description | Çift kayıt (duplicate posting) |
| Risk | S2 · Cari.Islem.vb:694-709; InternalDb.vb:69-81; TD-01 |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT a.Id AS Id1, b.Id AS Id2, a.HesapId, a.Tarih, a.IslemKodu, a.Kodu, a.Miktar, a.Tutar, a.InsertDate AS InsertDate1, b.InsertDate AS InsertDate2 FROM Cari.Islemler a JOIN Cari.Islemler b ON b.Id > a.Id AND b.HesapId = a.HesapId AND b.Tarih = a.Tarih AND b.IslemKodu = a.IslemKodu AND b.IslemTuru = a.IslemTuru AND ISNULL(b.Kodu,'') = ISNULL(a.Kodu,'') AND b.Miktar = a.Miktar AND ISNULL(b.Tutar,0) = ISNULL(a.Tutar,0) AND ABS(DATEDIFF(second, a.InsertDate AS InsertDate1, b.InsertDate AS InsertDate2)) <= 60 WHERE a.IsDeleted = 0 AND b.IsDeleted = 0 AND a.IslemKodu <> 11) x |
HC SQLR-064 — Sistem.Activity ActivitySubeId mükerrer (MERGE 8672 riski) S1 · 0 → PASS, aksi FAIL
| CheckId | SQLR-064 |
| Description | Sistem.Activity ActivitySubeId mükerrer (MERGE 8672 riski) |
| Risk | S1 · |
| RelatedObjects | Sistem.Activity |
| RelatedErrors | SQLR-064 · ERR-POT-128 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT ActivitySubeId FROM Sistem.Activity GROUP BY ActivitySubeId HAVING COUNT(*) > 1) x |
HC SQLR-068 — Cari.Hesaplar aynı şubede mükerrer VergiNo (skaler alt sorgu 512 riski) S2 · 0 → PASS, aksi WARN
| CheckId | SQLR-068 |
| Description | Cari.Hesaplar aynı şubede mükerrer VergiNo (skaler alt sorgu 512 riski) |
| Risk | S2 · |
| RelatedObjects | Cari.Hesaplar |
| RelatedErrors | SQLR-068 · ERR-POT-130 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT VergiNo, SubeId FROM Cari.Hesaplar WHERE IsDeleted = 0 AND ISNULL(VergiNo,'') <> '' GROUP BY VergiNo, SubeId HAVING COUNT(*) > 1) x |
HC SQLR-069 — Cari.RSReferans SenderID mükerrer S2 · 0 → PASS, aksi WARN
| CheckId | SQLR-069 |
| Description | Cari.RSReferans SenderID mükerrer |
| Risk | S2 · |
| RelatedObjects | Cari.RSReferans |
| RelatedErrors | SQLR-069 · ERR-POT-131 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT SenderID FROM Cari.RSReferans GROUP BY SenderID HAVING COUNT(*) > 1) x |
HC INV-19 — Sistem.Birimler kod benzersizliği S2 · 0 → PASS, aksi FAIL
| CheckId | INV-19 |
| Description | Sistem.Birimler kod benzersizliği |
| Risk | S2 · Cari.ToplamBakiye, Bilanco.OzetBilanco, Pozisyon.Write; H-023/H-131 |
| RelatedObjects | Sistem.Birimler, Cari.ToplamBakiye, Bilanco.OzetBilanco, Pozisyon.Write |
| RelatedErrors | ERR-OBS-023 · ERR-OBS-040 · ERR-OBS-212 · ERR-SIL-034 · ERR-SIL-070 · ERR-SIL-063 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT Kodu, COUNT(*) FROM Sistem.Birimler WHERE IsDeleted = 0 GROUP BY Kodu HAVING COUNT(*) > 1) x |
HC SEED-03 — Sistem.Birimler kod benzersizliği (aktif) S2 · 0 → PASS, aksi FAIL
| CheckId | SEED-03 |
| Description | Sistem.Birimler kod benzersizliği (aktif) |
| Risk | S2 · |
| RelatedObjects | Sistem.Birimler |
| RelatedErrors | ERR-OBS-023 · ERR-OBS-040 · ERR-OBS-212 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT Kodu FROM Sistem.Birimler WHERE IsDeleted = 0 GROUP BY Kodu HAVING COUNT(*) > 1) x |
6. Kur = 0 / Kur Tutarsızlığı
HC INV-13 — Kur sıfır / eksik / mükerrer / ileri tarihli S2 · 0 → PASS, aksi FAIL
| CheckId | INV-13 |
| Description | Kur sıfır / eksik / mükerrer / ileri tarihli |
| Risk | S2 · Sistem.GetKurListesi, Sistem.GetLastKur, FN.GetKur; indexes.json; H-107/H-124 |
| RelatedObjects | Sistem.Kurlar, Sistem.Birimler, Sistem.GetKurListesi, Sistem.GetLastKur, FN.GetKur |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-019 · ERR-OBS-045 · ERR-OBS-023 · ERR-OBS-040 · ERR-OBS-212 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT 'SIFIR' AS Sorun, K.Id, K.BirimId, K.Tarih FROM Sistem.Kurlar K WHERE K.IsDeleted = 0 AND (ISNULL(K.Alis,0) <= 0 OR ISNULL(K.Satis,0) <= 0) UNION ALL SELECT 'MUKERRER', MIN(Id), BirimId, Tarih FROM Sistem.Kurlar WHERE IsDeleted = 0 GROUP BY BirimId, Tarih HAVING COUNT(*) > 1 UNION ALL SELECT 'ILERI_TARIH', Id, BirimId, Tarih FROM Sistem.Kurlar WHERE IsDeleted = 0 AND Tarih > CONVERT(date, GETDATE()) UNION ALL SELECT 'BUGUN_YOK', B.Id, B.Id, CONVERT(date, GETDATE()) FROM Sistem.Birimler B WHERE B.IsDeleted = 0 AND B.IsComputed = 0 AND NOT EXISTS (SELECT 1 FROM Sistem.Kurlar K WHERE K.BirimId = B.Id AND K.Tarih = CONVERT(date, GETDATE()) AND K.IsDeleted = 0)) x |
HC INV-28 — Kur fotoğrafı anlamlı S3 · 0 → PASS, aksi WARN
| CheckId | INV-28 |
| Description | Kur fotoğrafı anlamlı |
| Risk | S3 · Program.vb:260-268; Cari.Islem.vb:607-612; BR-KUR-001 |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT Id, Tarih, HasKur, GumKur, UsdKur, EurKur, BirimKur FROM Cari.Islemler WHERE IsDeleted = 0 AND (ISNULL(HasKur,0) IN (0,1) OR ISNULL(UsdKur,0) IN (0,1) OR ISNULL(BirimKur,0) = 0)) x |
HC SQLR-049 — Takoz işlemlerinde HasKur/IscilikBirimKur = 0 (bölme/yanlış maliyet riski) S2 · 0 → PASS, aksi WARN
| CheckId | SQLR-049 |
| Description | Takoz işlemlerinde HasKur/IscilikBirimKur = 0 (bölme/yanlış maliyet riski) |
| Risk | S2 · |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | SQLR-049 · ERR-SIL-026 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE IsDeleted = 0 AND (ISNULL(HasKur,0) = 0 OR ISNULL(IscilikBirimKur,0) = 0) AND IslemKodu = 0 |
HC SQLR-050 — HAS (BirimId=1) kur satırında Alis=0 S2 · 0 → PASS, aksi WARN
| CheckId | SQLR-050 |
| Description | HAS (BirimId=1) kur satırında Alis=0 |
| Risk | S2 · |
| RelatedObjects | Sistem.Kurlar |
| RelatedErrors | SQLR-050 · ERR-POT-119 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Sistem.Kurlar WHERE BirimId = 1 AND ISNULL(Alis,0) = 0 AND IsDeleted = 0 |
HC SQLR-051 — Son 3 ayda UsdKur/HasKur = 0 olan işlem S2 · 0 → PASS, aksi WARN
| CheckId | SQLR-051 |
| Description | Son 3 ayda UsdKur/HasKur = 0 olan işlem |
| Risk | S2 · |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | SQLR-051 · ERR-POT-120 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE IsDeleted = 0 AND (ISNULL(UsdKur,0) = 0 OR ISNULL(HasKur,0) = 0) AND Tarih >= DATEADD(month,-3,GETDATE()) |
7. Orphan Kayıtlar
HC INV-05 — Türetilmiş kayıtların sahipsiz (orphan) olması S2 · 0 → PASS, aksi FAIL
| CheckId | INV-05 |
| Description | Türetilmiş kayıtların sahipsiz (orphan) olması |
| Risk | S2 · Sistem.Devir (IslemId=-1); Cari.AcceptTransaction; H-108 |
| RelatedObjects | Cari.BakiyeIslem, Cari.Islemler, Stok.StokHaraketleri, Sistem.Devir, Cari.AcceptTransaction |
| RelatedErrors | ERR-OBS-005 · ERR-OBS-012 · ERR-OBS-027 · ERR-OBS-001 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT 'BakiyeIslem' AS Kaynak, COUNT(*) AS Adet FROM Cari.BakiyeIslem B WHERE B.IslemId <> -1 AND NOT EXISTS (SELECT 1 FROM Cari.Islemler I WHERE I.Id = B.IslemId) UNION ALL SELECT 'StokHaraketleri(Bolum=0)', COUNT(*) FROM Stok.StokHaraketleri H WHERE H.Bolum = 0 AND H.IslemId <> -1 AND NOT EXISTS (SELECT 1 FROM Cari.Islemler I WHERE I.Id = H.IslemId)) x |
HC SEED-05 — Sistem.UserDetails sahipsiz kullanıcı/şube/kasa/grup S3 · 0 → PASS, aksi WARN
| CheckId | SEED-05 |
| Description | Sistem.UserDetails sahipsiz kullanıcı/şube/kasa/grup |
| Risk | S3 · |
| RelatedObjects | Sistem.UserDetails, Sistem.Users, Sistem.Subeler, Sistem.Kasalar, Sistem.UserGroup |
| RelatedErrors | ERR-SIL-029 · ERR-OBS-010 · ERR-OBS-013 · ERR-OBS-029 · ERR-OBS-014 · ERR-OBS-018 · ERR-OBS-041 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM Sistem.UserDetails D WHERE D.IsDeleted = 0 AND (NOT EXISTS (SELECT 1 FROM Sistem.Users U WHERE U.Id = D.UserId) OR NOT EXISTS (SELECT 1 FROM Sistem.Subeler S WHERE S.Id = D.SubeId) OR NOT EXISTS (SELECT 1 FROM Sistem.Kasalar K WHERE K.Id = D.KasaId) OR NOT EXISTS (SELECT 1 FROM Sistem.UserGroup G WHERE G.Id = D.GroupId)) |
8. Broken Dependency
HC DEP-01 — Kırık SQL bağımlılığı (sys.sql_expression_dependencies referenced_id IS NULL, aynı DB) S2 · 0 → PASS, aksi WARN
| CheckId | DEP-01 |
| Description | Kırık SQL bağımlılığı (sys.sql_expression_dependencies referenced_id IS NULL, aynı DB) |
| Risk | S2 · Bilinen: LiveUpdate.Version→VersionHistory_, Sistem.FromERP→dbo.firmalar/birimler_ |
| RelatedObjects | LiveUpdate.Version, Sistem.FromERP |
| RelatedErrors | ERR-POT-102 · ERR-POT-103 · ERR-POT-133 · ERR-POT-139 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(DISTINCT CONCAT(d.referencing_id,'|',d.referenced_schema_name,'.',d.referenced_entity_name)) FROM sys.sql_expression_dependencies d WHERE d.referenced_id IS NULL AND d.is_ambiguous = 0 AND d.referenced_class = 1 AND (d.referenced_database_name IS NULL OR d.referenced_database_name = DB_NAME()) AND ISNULL(d.referenced_schema_name,'') NOT IN ('sys','INFORMATION_SCHEMA') |
HC DEP-02 — Cross-database bağımlılık (DOCUMENTS / ERPGLOBAL) — hedef DB sunucuda var mı S1 · 0 → PASS, aksi FAIL
| CheckId | DEP-02 |
| Description | Cross-database bağımlılık (DOCUMENTS / ERPGLOBAL) — hedef DB sunucuda var mı |
| Risk | S1 · Genel.Dosyalar view'ı DOCUMENTS DB'ye bakar; AcceptTransaction → GetGerekliEvraklar → Genel.Dosyalar (SQLR-031) |
| RelatedObjects | Genel.Dosyalar |
| RelatedErrors | ERR-POT-101 · ERR-POT-138 · ERR-POT-139 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT DISTINCT d.referenced_database_name AS db FROM sys.sql_expression_dependencies d WHERE d.referenced_database_name IS NOT NULL AND d.referenced_database_name NOT IN (DB_NAME(),'master','msdb','tempdb')) x WHERE DB_ID(x.db) IS NULL |
9. Disabled Trigger
HC TRG-01 — Devre dışı tetikleyici S1 · 0 → PASS, aksi FAIL
| CheckId | TRG-01 |
| Description | Devre dışı tetikleyici |
| Risk | S1 · |
| RelatedObjects | — |
| RelatedErrors | — |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM sys.triggers WHERE is_disabled = 1 AND parent_class = 1 |
HC TRG-02 — Cari.Islemler üzerinde 4 tetikleyici (AcceptTransaction, InsertTransaction, UpdateTransaction, DeleteTransaction) mevcut S1 · 0 → PASS, aksi FAIL
| CheckId | TRG-02 |
| Description | Cari.Islemler üzerinde 4 tetikleyici (AcceptTransaction, InsertTransaction, UpdateTransaction, DeleteTransaction) mevcut |
| Risk | S1 · |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT 4 - COUNT(*) FROM sys.triggers WHERE parent_id = OBJECT_ID('Cari.Islemler') AND name IN ('AcceptTransaction','InsertTransaction','UpdateTransaction','DeleteTransaction') |
HC TRG-03 — Diğer çekirdek tetikleyiciler (Sistem.CreateKasa, Cari.HesapInsert/HesapUpdate, Cari.TransferUpdateSTatus, Uretim.TrBakiyeHesapla, Siparis.Kontrol, Sistem.SilOnayUpdateTrigger, AifaDev.ExQueryBuilder) S2 · 0 → PASS, aksi FAIL
| CheckId | TRG-03 |
| Description | Diğer çekirdek tetikleyiciler (Sistem.CreateKasa, Cari.HesapInsert/HesapUpdate, Cari.TransferUpdateSTatus, Uretim.TrBakiyeHesapla, Siparis.Kontrol, Sistem.SilOnayUpdateTrigger, AifaDev.ExQueryBuilder) |
| Risk | S2 · |
| RelatedObjects | Sistem.CreateKasa, Cari.HesapInsert, Cari.HesapUpdate, Cari.TransferUpdateSTatus, Uretim.TrBakiyeHesapla, Siparis.Kontrol, Sistem.SilOnayUpdateTrigger, AifaDev.ExQueryBuilder |
| RelatedErrors | ERR-POT-130 · ERR-POT-136 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (VALUES ('Sistem.CreateKasa'),('Cari.HesapInsert'),('Cari.HesapUpdate'),('Cari.TransferUpdateSTatus'),('Uretim.TrBakiyeHesapla'),('Siparis.Kontrol'),('Sistem.SilOnayUpdateTrigger'),('AifaDev.ExQueryBuilder')) v(n) WHERE OBJECT_ID(v.n) IS NULL |
HC SQLR-075 — RECURSIVE_TRIGGERS açık mı (tetikleyici zinciri riski) S3 · 0 → PASS, aksi WARN
| CheckId | SQLR-075 |
| Description | RECURSIVE_TRIGGERS açık mı (tetikleyici zinciri riski) |
| Risk | S3 · |
| RelatedObjects | — |
| RelatedErrors | SQLR-075 · ERR-POT-136 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT CAST(is_recursive_triggers_on AS int) FROM sys.databases WHERE name = DB_NAME() |
10. Missing Object
HC OBJ-01 — Uygulama kodunun doğrudan kullandığı SQL nesneleri (BASE-CORE, 311) mevcut S1 · 0 → PASS, aksi FAIL
| CheckId | OBJ-01 |
| Description | Uygulama kodunun doğrudan kullandığı SQL nesneleri (BASE-CORE, 311) mevcut |
| Risk | S1 · Eksik nesne = Invalid object name / Could not find stored procedure |
| RelatedObjects | Agent.Agent, Agent.Controller, Agent.FeedBack, AifaDev.Dashboard, AifaDev.DosReport, AifaDev.DosReportFields, AifaDev.DynamicForms, AifaDev.FaturaDesign, AifaDev.FormSize, AifaDev.Forms, AifaDev.GridLayouts, AifaDev.Layouts, AifaDev.ReportLayouts, AifaDev.Reports, AifaDev.ReportsFilter, AifaDev.RepositoryData, AifaDev.RepositoryItems, AifaDev.RibbonGroup, AifaDev.RibbonItem, AifaDev.RibbonPage, Bakiye.GetBakiye, Bakiye.GetDateOfBakiye, Bakiye.GetFisBakiyesi, Bakiye.GetVadeliBakiye, Bilanco.BilancoDevirleri, Bilanco.BilancoListesi, Bilanco.Bilancolar, Bilanco.GetKurFarki, Bilanco.OzetBilanco, Bilanco.Patron, Bilanco.SaveAll, Cari.AccountLog, Cari.AnaBakiyeIslem, Cari.BakiyeIslem, Cari.DosyaBilgileri, Cari.ExLimit, Cari.FaturaBilgileri, Cari.FaturaDetay, Cari.FaturaYaz, Cari.Faturalar … (+42) |
| RelatedErrors | ERR-POT-133 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (VALUES (N'Agent.Agent'),(N'Agent.Controller'),(N'Agent.FeedBack'),(N'AifaDev.Dashboard'),(N'AifaDev.DosReport'),(N'AifaDev.DosReportFields'),(N'AifaDev.DynamicForms'),(N'AifaDev.FaturaDesign'),(N'AifaDev.FormSize'),(N'AifaDev.Forms'),(N'AifaDev.GridLayouts'),(N'AifaDev.Layouts'),(N'AifaDev.ReportLayouts'),(N'AifaDev.Reports'),(N'AifaDev.ReportsFilter'),(N'AifaDev.RepositoryData'),(N'AifaDev.RepositoryItems'),(N'AifaDev.RibbonGroup'),(N'AifaDev.RibbonItem'),(N'AifaDev.RibbonPage'),(N'Bakiye.GetBakiye'),(N'Bakiye.GetDateOfBakiye'),(N'Bakiye.GetFisBakiyesi'),(N'Bakiye.GetVadeliBakiye'),(N'Bilanco.BilancoDevirleri'),(N'Bilanco.BilancoListesi'),(N'Bilanco.Bilancolar'),(N'Bilanco.GetKurFarki'),(N'Bilanco.OzetBilanco'),(N'Bilanco.Patron'),(N'Bilanco.SaveAll'),(N'Cari.AccountLog'),(N'Cari.AnaBakiyeIslem'),(N'Cari.BakiyeIslem'),(N'Cari.DosyaBilgileri'),(N'Cari.ExLimit'),(N'Cari.FaturaBilgileri'),(N'Cari.FaturaDetay'),(N'Cari.FaturaYaz'),(N'Cari.Faturalar'),(N'Cari.FindTaxInfo'),(N'Cari.FisIslemDetay'),(N'Cari.Fiyatlar'),(N'Cari.GelenIslemler'),(N'Cari.GetAccountLog'),(N'Cari.GetBakiyeDetay'),(N'Cari.GetEFaturaBilgileri'),(N'Cari.GetEfaturaListesi'),(N'Cari.GetFaturaBilgileri'),(N'Cari.GetFaturaDetay'),(N'Cari.GetFaturaListesi'),(N'Cari.GetFisPesinKontrol'),(N'Cari.GetFiyatListesi'),(N'Cari.GetGunlukNetBakiyeler'),(N'Cari.GetHesapListesi'),(N'Cari.GetHesaplar'),(N'Cari.GetIslemler'),(N'Cari.GetMarginKontrol'),(N'Cari.GetNewSiraNo'),(N'Cari.GetProformaDetay'),(N'Cari.GetProformaListesi'),(N'Cari.GetProvizyon'),(N'Cari.GetTransferler'),(N'Cari.GidenIslemler'),(N'Cari.HesapBilgileri'),(N'Cari.HesapListesi'),(N'Cari.Hesaplar'),(N'Cari.History'),(N'Cari.HistoryDetails'),(N'Cari.HistoryListesi'),(N'Cari.IslemDetaylari'),(N'Cari.IslemListesi'),(N'Cari.Islemler'),(N'Cari.Kartlar'),(N'Cari.Proforma'),(N'Cari.ProformaDetay'),(N'Cari.Provizyon'),(N'Cari.RSAktar'),(N'Cari.Teminatlar'),(N'Cari.Transferler'),(N'Design.FormControls'),(N'Design.Forms'),(N'Design.GetRibb |
HC OBJ-02 — Bağımlılık nesneleri (BASE-DEPENDENCY, 44) mevcut S1 · 0 → PASS, aksi FAIL
| CheckId | OBJ-02 |
| Description | Bağımlılık nesneleri (BASE-DEPENDENCY, 44) mevcut |
| Risk | S1 · |
| RelatedObjects | Bakiye.GetBakiyeFisNo, Cari.BakiyeDun, Cari.BakiyeGun, Cari.BakiyeKodlari, Cari.GetFaturaTutarlari, Cari.GetGerekliEvraklar, Cari.GetProformaTutarlari, Cari.GetTotalBalance, Cari.Istatistik, Cari.RSReferans, Cari.ToplamBakiye, FN.GenerateTakozCode, FN.GetKur, FN.Katsayı, FN.OlcuHesapla, Finans.BankaAltinOperasyonMiktarlari, Genel.DokumanIzinDetay, LiveUpdate.VersionHistory, Muhasebe.EDovizKontrolRaporuBTrans, Muhasebe.Islemler, Muhasebe.IslemlerBTrans, Muhasebe.StokHaraketleri, NET.GetPrice, NET.NetSiparisOzet, Organizasyon.GetOrganizasyonAdi, Pozisyon.Pozisyonlar, Sistem.Activity, Sistem.GetBirimToId, Sistem.GetIdToBirim, Sistem.GetLastKur, Sistem.GetMizanBakiye, Sistem.GetMizanBakiyeIslem, Sistem.GetMizanBakiyeleri, Sistem.MizanCTE, Stok.DevirCesniStoklari, Stok.GetMadenMaliyeti, Stok.GetOrtMilyem, Stok.GetTakozAdet, Stok.GetTakozSirketStoklari, Uretim.BakiyeDetay … (+4) |
| RelatedErrors | ERR-OBS-192 · ERR-SIL-034 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (VALUES (N'Bakiye.GetBakiyeFisNo'),(N'Cari.BakiyeDun'),(N'Cari.BakiyeGun'),(N'Cari.BakiyeKodlari'),(N'Cari.GetFaturaTutarlari'),(N'Cari.GetGerekliEvraklar'),(N'Cari.GetProformaTutarlari'),(N'Cari.GetTotalBalance'),(N'Cari.Istatistik'),(N'Cari.RSReferans'),(N'Cari.ToplamBakiye'),(N'FN.GenerateTakozCode'),(N'FN.GetKur'),(N'FN.Katsayı'),(N'FN.OlcuHesapla'),(N'Finans.BankaAltinOperasyonMiktarlari'),(N'Genel.DokumanIzinDetay'),(N'LiveUpdate.VersionHistory'),(N'Muhasebe.EDovizKontrolRaporuBTrans'),(N'Muhasebe.Islemler'),(N'Muhasebe.IslemlerBTrans'),(N'Muhasebe.StokHaraketleri'),(N'NET.GetPrice'),(N'NET.NetSiparisOzet'),(N'Organizasyon.GetOrganizasyonAdi'),(N'Pozisyon.Pozisyonlar'),(N'Sistem.Activity'),(N'Sistem.GetBirimToId'),(N'Sistem.GetIdToBirim'),(N'Sistem.GetLastKur'),(N'Sistem.GetMizanBakiye'),(N'Sistem.GetMizanBakiyeIslem'),(N'Sistem.GetMizanBakiyeleri'),(N'Sistem.MizanCTE'),(N'Stok.DevirCesniStoklari'),(N'Stok.GetMadenMaliyeti'),(N'Stok.GetOrtMilyem'),(N'Stok.GetTakozAdet'),(N'Stok.GetTakozSirketStoklari'),(N'Uretim.BakiyeDetay'),(N'Uretim.KatkiHesapla'),(N'dbo.BakiyeIslem'),(N'dbo.Pano'),(N'dbo.YaziIle')) v(n) WHERE OBJECT_ID(v.n) IS NULL |
HC OBJ-03 — Kodda SQL üretilen ama referans katalogda olmayan nesneler (30) — bu kurulumda var mı? S2 · 0 → PASS, aksi WARN
| CheckId | OBJ-03 |
| Description | Kodda SQL üretilen ama referans katalogda olmayan nesneler (30) — bu kurulumda var mı? |
| Risk | S2 · GAP-BASE-CODE-ONLY-OBJECTS; eksikse ilgili ekranlar Invalid object name verir |
| RelatedObjects | — |
| RelatedErrors | — |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (VALUES (N'Cari.GETOdemeKasaOzeti'),(N'Cari.GETOdemeListesi'),(N'Cari.GetRiskRaporu'),(N'Cari.Odemeler'),(N'Genel.IptalOnay'),(N'Organizasyon.GelenGorevler'),(N'Organizasyon.GidenGorevler'),(N'Organizasyon.GorevDagitim'),(N'Organizasyon.Gorevler'),(N'Siparis.FiyatListesi'),(N'Siparis.GetFiyatListesi'),(N'Siparis.GetLastPrice'),(N'Siparis.GetPaketHesapListesi'),(N'Siparis.GetUyumluPaketler'),(N'Siparis.ModelAyarBlackList'),(N'Siparis.PaketHesaplari'),(N'Siparis.modelayarBlacklist'),(N'Sistem.iException'),(N'Stok.GetTakozIsciligi'),(N'Uretim.Eritme'),(N'Uretim.Formul'),(N'Uretim.FormulDetay'),(N'Uretim.GetEritmeListesi'),(N'Uretim.GetFormulDetay'),(N'Uretim.GetFormuls'),(N'Uretim.GetModelPartiBilgiListesi'),(N'Uretim.GetPartiModelListesi'),(N'Uretim.GetPartiler'),(N'Uretim.ModelPartiBilgileri'),(N'Uretim.Partiler')) v(n) WHERE OBJECT_ID(v.n) IS NULL |
11. Missing Column
HC COL-01 — Kodun kullandığı ama katalogda bulunmayan/kurulum bazlı kolonlar (8) S2 · 0 → PASS, aksi WARN
| CheckId | COL-01 |
| Description | Kodun kullandığı ama katalogda bulunmayan/kurulum bazlı kolonlar (8) |
| Risk | S2 · Invalid column name riski (SQLR-040..046) |
| RelatedObjects | Cari.Transferler, Siparis.Paket, Siparis.TakimKartlari, Sistem.CariIslemTipi, Cari.Provizyon, Sistem.Users, Cari.IslemDetaylari, Cari.Islemler |
| RelatedErrors | ERR-OBS-251 · ERR-POT-110 · ERR-POT-136 · ERR-POT-111 · ERR-POT-125 · ERR-POT-112 · ERR-POT-117 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (VALUES (N'Cari.Transferler',N'Aciklama'),(N'Siparis.Paket',N'IsPublic'),(N'Siparis.TakimKartlari',N'Grup'),(N'Sistem.CariIslemTipi',N'IsDeleted'),(N'Cari.Provizyon',N'IsDeleted'),(N'Sistem.Users',N'SubeId'),(N'Cari.IslemDetaylari',N'ETTN'),(N'Cari.Islemler',N'IsArbitiraj')) v(t,c) WHERE COL_LENGTH(v.t, v.c) IS NULL |
12. Diğer: tohum veri, performans, veri tipi
HC SEED-01 — Sistem.Settings tam olarak 1 satır S1 · 0 → PASS, aksi FAIL
| CheckId | SEED-01 |
| Description | Sistem.Settings tam olarak 1 satır |
| Risk | S1 · Settings.Save TRUNCATE+INSERT yapar; 0 satır → AcceptTransaction sembol bulamaz; >1 satır → 'Subquery returned more than 1 value' (SQLR-067) |
| RelatedObjects | Sistem.Settings |
| RelatedErrors | ERR-OBS-012 · ERR-OBS-031 · ERR-OBS-037 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT ABS(1 - (SELECT COUNT(*) FROM Sistem.Settings)) |
HC SEED-02 — Settings sembolleri (HAS/GUM/USD/EUR/PLT/PLD) Sistem.Birimler'de tam bir eşleşmeyle var S1 · 0 → PASS, aksi FAIL
| CheckId | SEED-02 |
| Description | Settings sembolleri (HAS/GUM/USD/EUR/PLT/PLD) Sistem.Birimler'de tam bir eşleşmeyle var |
| Risk | S1 · 0 eşleşme → bakiye üretilmez; >1 → 512 hatası |
| RelatedObjects | Sistem.Settings, Sistem.Birimler |
| RelatedErrors | ERR-OBS-012 · ERR-OBS-031 · ERR-OBS-037 · ERR-OBS-023 · ERR-OBS-040 · ERR-OBS-212 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT s.HasSymbol AS k UNION ALL SELECT s.GumSymbol UNION ALL SELECT s.UsdSymbol UNION ALL SELECT s.EurSymbol UNION ALL SELECT s.PltSymbol UNION ALL SELECT s.PldSymbol FROM (SELECT TOP 1 * FROM Sistem.Settings) s) x WHERE x.k IS NOT NULL AND (SELECT COUNT(*) FROM Sistem.Birimler b WHERE b.IsDeleted = 0 AND b.Kodu = x.k) <> 1 |
HC SEED-04 — Sistem.Users Id=1 (yönetici; menü izin süzgeci) mevcut S2 · 0 → PASS, aksi FAIL
| CheckId | SEED-04 |
| Description | Sistem.Users Id=1 (yönetici; menü izin süzgeci) mevcut |
| Risk | S2 · |
| RelatedObjects | Sistem.Users |
| RelatedErrors | ERR-OBS-010 · ERR-OBS-013 · ERR-OBS-029 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT 1 - COUNT(*) FROM Sistem.Users WHERE Id = 1 |
HC SEED-06 — İşlem kodu sözlükleri dolu (Sistem.CariIslemKodu / CariIslemTuru / CariIslemTipi) S1 · 0 → PASS, aksi FAIL
| CheckId | SEED-06 |
| Description | İşlem kodu sözlükleri dolu (Sistem.CariIslemKodu / CariIslemTuru / CariIslemTipi) |
| Risk | S1 · |
| RelatedObjects | Sistem.CariIslemKodu, Sistem.CariIslemTuru, Sistem.CariIslemTipi |
| RelatedErrors | ERR-POT-131 · ERR-POT-140 · ERR-POT-113 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). FAIL: en az bir bulgu; kurulum ERPGOLD için güvenli değildir — düzeltilmeden üretime alınmaz. |
| SQL (salt okunur) | SELECT CASE WHEN (SELECT COUNT(*) FROM Sistem.CariIslemKodu) = 0 OR (SELECT COUNT(*) FROM Sistem.CariIslemTuru) = 0 OR (SELECT COUNT(*) FROM Sistem.CariIslemTipi) = 0 THEN 1 ELSE 0 END |
HC SEED-07 — OnsCarpan makul (31.10 – 31.11) ve BSMV 0–10 aralığında S3 · 0 → PASS, aksi WARN
| CheckId | SEED-07 |
| Description | OnsCarpan makul (31.10 – 31.11) ve BSMV 0–10 aralığında |
| Risk | S3 · |
| RelatedObjects | Sistem.Settings |
| RelatedErrors | ERR-OBS-012 · ERR-OBS-031 · ERR-OBS-037 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM (SELECT TOP 1 OnsCarpan, BSMV FROM Sistem.Settings) s WHERE ISNULL(s.OnsCarpan,0) NOT BETWEEN 31.10 AND 31.11 OR ISNULL(s.BSMV,0) NOT BETWEEN 0 AND 10 |
HC PERF-01 — Cari.Islemler üzerinde aynı anahtarlı yinelenen indeks sayısı (deadlock/timeout katkısı) S3 · 0 → PASS, aksi WARN
| CheckId | PERF-01 |
| Description | Cari.Islemler üzerinde aynı anahtarlı yinelenen indeks sayısı (deadlock/timeout katkısı) |
| Risk | S3 · |
| RelatedObjects | Cari.Islemler |
| RelatedErrors | ERR-OBS-001 · ERR-OBS-012 · ERR-OBS-014 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) - COUNT(DISTINCT k.cols) FROM (SELECT i.index_id, STUFF((SELECT ',' + c.name FROM sys.index_columns ic JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.is_included_column = 0 ORDER BY ic.key_ordinal FOR XML PATH('')),1,1,'') AS cols FROM sys.indexes i WHERE i.object_id = OBJECT_ID('Cari.Islemler') AND i.index_id > 0) k |
HC SQLR-055 — AifaDev.RepositoryData sayısal tipte sayısal olmayan değer S3 · 0 → PASS, aksi WARN
| CheckId | SQLR-055 |
| Description | AifaDev.RepositoryData sayısal tipte sayısal olmayan değer |
| Risk | S3 · |
| RelatedObjects | AifaDev.RepositoryData, AifaDev.RepositoryItems |
| RelatedErrors | SQLR-055 · ERR-POT-122 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM AifaDev.RepositoryData D JOIN AifaDev.RepositoryItems I ON I.Id = D.ItemId WHERE I.DataType IN (2,4,5) AND TRY_CONVERT(decimal(18,5), D.Value) IS NULL AND D.Value IS NOT NULL |
HC SQLR-079 — Legacy text/ntext/image kolonlar S4 · 0 → PASS, aksi WARN
| CheckId | SQLR-079 |
| Description | Legacy text/ntext/image kolonlar |
| Risk | S4 · |
| RelatedObjects | — |
| RelatedErrors | SQLR-079 · ERR-POT-140 |
| PASS / WARN / FAIL Meaning | PASS: sorgu 0 satır/değer döner (sorun yok). WARN: en az bir bulgu; inceleme gerekir; ürün çalışır ama veri/performans riski vardır. |
| SQL (salt okunur) | SELECT COUNT(*) FROM sys.columns WHERE system_type_id IN (35,34,99) |
Invariantlar (30) — sessiz hata sınırları
INV-* kuralları ERPGOLD_SESSIZ_HESAPLAMA_RISKLERI.xlsx "Invariantlar" sayfasındaki iş kurallarıdır; kural metni ve kaynak kod satırı:
| Id | Ad | Kural | Tablolar | Sev. | Kaynak |
|---|---|---|---|---|---|
| INV-01 | Aktif işlemin bakiye hareketi eksik | IsDeleted=0 ve IslemTipi ∉ {1,11,12} olan ve tetikleyici kuralına göre bakiye üretmesi gereken her Cari.Islemler satırı için Cari.BakiyeIslem'de en az bir satır bulunmalıdır. (Kodu 1,2,9,4,5,6: (BakiyeId>0 ve Miktar≠0) veya Tutar≠0; Kodu 0 ve 14: her zaman; diğer kodlar: Tutar≠0.) | Cari.Islemler, Cari.BakiyeIslem | S1 | Cari.AcceptTransaction satır 263-558; BR-DEFTER-URETIMI; BR-BAKIYE-001/003/004 |
| INV-02 | Silinmiş / belge tipli (11,12) işlemin kalan türetilmiş kaydı | IsDeleted=1 veya IslemTipi ∈ {11,12} olan işlemlerin Cari.BakiyeIslem ve Stok.StokHaraketleri (Bolum=0) satırı olmamalıdır. | Cari.Islemler, Cari.BakiyeIslem, Stok.StokHaraketleri | S1 | Cari.AcceptTransaction satır 256-263; BR-TIP-004 |
| INV-03 | PEŞİN işlemin bakiye satırı | IslemTipi=1 (PEŞİN) olan işlemlerde tutar bakiye satırı yazılmaz; maden/hurda için has satırı da yazılmaz. PEŞİN işlem için BakiyeIslem satırı bulunmamalıdır (istisna: IslemKodu 0/14 tip 1 ile kaydedilmez). | Cari.Islemler, Cari.BakiyeIslem | S2 | Cari.AcceptTransaction satır 346, 352, 389, 419; BR-TIP-002 |
| INV-04 | Aktif işlemin stok hareketi eksik | IsDeleted=0, IslemTipi ∉ {11,12} ve IslemKodu ∈ {0,1,2,8,9} veya (IslemKodu=3 ve IslemTipi≠4) veya IslemTipi=1 olan işlemler için Stok.StokHaraketleri'nde Bolum=0 satırı bulunmalıdır. | Cari.Islemler, Stok.StokHaraketleri | S1 | Cari.AcceptTransaction satır 271-302; BR-STOK-001/002/003/004, BR-TIP-003/005 |
| INV-05 | Türetilmiş kayıtların sahipsiz (orphan) olması | Cari.BakiyeIslem ve Stok.StokHaraketleri (Bolum=0) satırlarının IslemId'si Cari.Islemler'de bulunmalı veya devir satırı (-1) olmalıdır. | Cari.BakiyeIslem, Stok.StokHaraketleri, Cari.Islemler | S2 | Sistem.Devir (IslemId=-1); Cari.AcceptTransaction; H-108 |
| INV-06 | Stok hareketi işareti işlem yönü ile uyumlu | Bolum=0 stok hareketlerinde IslemTuru=0 (giriş) için Miktar/Adet ≥ 0, IslemTuru=1 (çıkış) için ≤ 0 olmalıdır (PEŞİN nakit karşılık satırı hariç: orada işaret terstir). | Stok.StokHaraketleri, Cari.Islemler | S2 | Cari.AcceptTransaction satır 274-301; BR-STOK-001 |
| INV-07 | Has tutarlılığı: işlem × milyem = stok has = bakiye has | Maden/hurda/model işleminde Stok.StokHaraketleri.Has = ±Miktar×AuMilyem (5 hane) ve BakiyeIslem has satırı |Bakiye| = Round(Miktar×AuMilyem,2) (±0,01) olmalıdır. | Cari.Islemler, Stok.StokHaraketleri, Cari.BakiyeIslem | S2 | BR-HESAP-001; Cari.AcceptTransaction satır 73, 274, 349; columns.json (Bakiye 18,2 / Has 18,5) |
| INV-08 | Tutar bakiye satırı işlem tutarına eşit | Tip ∉ {1,11,12} ve Tutar≠0 olan işlemlerde BirimId=Islemler.BirimId olan BakiyeIslem satırının |Bakiye| değeri |Tutar| olmalıdır (takoz ve çeşni hariç). | Cari.Islemler, Cari.BakiyeIslem | S2 | Cari.AcceptTransaction satır 352-356, 389-393, 419-431 |
| INV-09 | Bakiye satırı yönü işlem yönü ile uyumlu | Maden/hurda/model ve diğer stok işlemlerinde giriş (IslemTuru çift) tutar satırı negatif, çıkış (tek) pozitif olmalı; çevir/vadeli/hizmette has satırı ters işaretli olmalıdır (BR-YON-002/003/004). | Cari.Islemler, Cari.BakiyeIslem | S2 | BR-YON-002/003/004; Cari.AcceptTransaction satır 334-344, 371-381, 409-417 |
| INV-10 | Çift kayıt (duplicate posting) | Aynı hesap, tarih, işlem kodu, yön, stok kodu, miktar ve tutar ile 60 saniye içinde ikinci bir aktif işlem bulunmamalıdır. | Cari.Islemler | S2 | Cari.Islem.vb:694-709; InternalDb.vb:69-81; TD-01 |
| INV-11 | İşlemde sahipsiz hesap / şube / kasa | Her Cari.Islemler satırının HesapId, SubeId ve KasaId değeri ilgili tabloda bulunmalı ve 0 olmamalıdır. | Cari.Islemler, Cari.Hesaplar, Sistem.Subeler, Sistem.Kasalar | S2 | Cari.AcceptTransaction satır 180-185; Cari.Islem.vb:508 |
| INV-12 | Bakiye satırı geçerli birim taşımalı | Cari.BakiyeIslem.BirimId, Sistem.Birimler'de bulunmalı veya -1 (TAKOZ) olmalı; 0/NULL olmamalıdır. | Cari.BakiyeIslem, Sistem.Birimler | S2 | Cari.AcceptTransaction satır 64-67, 318-330; Cari.IslemEx.vb:303 |
| INV-13 | Kur sıfır / eksik / mükerrer / ileri tarihli | Sistem.Kurlar'da silinmemiş satırlarda Alis ve Satis > 0 olmalı; (BirimId,Tarih) benzersiz olmalı; Tarih > bugün olmamalı; her aktif hesaplanmayan birim için bugünün kuru bulunmalıdır. | Sistem.Kurlar, Sistem.Birimler | S2 | Sistem.GetKurListesi, Sistem.GetLastKur, FN.GetKur; indexes.json; H-107/H-124 |
| INV-14 | Negatif miktar / adet / tutar | Aktif işlemlerde Miktar, Adet ve Tutar negatif olmamalıdır (yön IslemTuru ile ifade edilir). | Cari.Islemler | S2 | Cari.AcceptTransaction satır 274, 336; Cari.Islem.vb:513 |
| INV-15 | Hesap bazında bakiye toplamı = işlemlerden beklenen toplam (has/tutar) | Bir hesabın tutar bakiyesi (birim bazında) aktif işlemlerinin işaretli tutar toplamına eşit olmalıdır (devir -1 satırları hariç). Bakiye kartı ile işlem listesi mutabakatı. | Cari.BakiyeIslem, Cari.Islemler | S1 | Cari.AcceptTransaction; BR-YON-002/004; PB-028 (SYM-BAKIYE) |
| INV-16 | Cari.History eksik / sahipsiz | Her Cari.Islemler satırının en az bir History ('Yeni Kayıt') satırı olmalı; History.TransactionId Cari.Islemler'de bulunmalı (devir sonrası arşivlenen dönem hariç). | Cari.Islemler, Cari.History | S3 | Cari.InsertTransaction, Cari.UpdateTransaction, Cari.DeleteTransaction; Sistem.Devir |
| INV-17 | İptal edilmiş işlemin belge detayı | IsDeleted=1 ve e-belge (ETTN) taşımayan işlemin Cari.IslemDetaylari satırı kalmamalı; ETTN'li ise Durum='EIPTAL' olmalıdır. | Cari.Islemler, Cari.IslemDetaylari | S3 | Cari.UpdateTransaction (tek satır değişkeni); BR-BELGE-HAVUZU |
| INV-18 (yalnız invariant; HC kuralı yok) | Sistem.Settings tek satır ve sembol eşleşmesi | Sistem.Settings tam 1 satır içermeli; HasSymbol/GumSymbol/PltSymbol/PldSymbol/UsdSymbol/EurSymbol Sistem.Birimler'de (IsDeleted=0) tam bir satırla eşleşmeli; BSMV, OnsCarpan makul aralıkta olmalıdır. | Sistem.Settings, Sistem.Birimler | S1 | Settings.vb:121-138; Cari.AcceptTransaction satır 64-67; GAP-DB-06; GAP-SEC-ONS-01 |
| INV-19 | Sistem.Birimler kod benzersizliği | Silinmemiş birimlerde Kodu benzersiz olmalıdır (kur listesi ve bakiye toplamları kod ile birleştirilir). | Sistem.Birimler | S2 | Cari.ToplamBakiye, Bilanco.OzetBilanco, Pozisyon.Write; H-023/H-131 |
| INV-20 (yalnız invariant; HC kuralı yok) | Tetikleyiciler etkin | Cari.Islemler üzerindeki 4 tetikleyici (AcceptTransaction, InsertTransaction, UpdateTransaction, DeleteTransaction), Cari.Transferler ve Uretim.UretimIslemleri tetikleyicileri devre dışı olmamalıdır. | Cari.Islemler, Cari.Transferler, Uretim.UretimIslemleri | S1 | dbclean/trg.json; Sistem.Devir (DISABLE/ENABLE TRIGGER ALL); H-006 |
| INV-21 | Sistem kullanıcısı (Id=1) ve pasif şube kontrolü | Sistem.Users tablosunda Id=1 kaydı bulunmalı; işlem yapılan şubeler IsActive=1 olmalıdır. | Sistem.Users, Sistem.Subeler, Cari.Islemler | S3 | Cari.AcceptTransaction satır 92-98; Devir.vb (arşiv şubeleri IsActive=False) |
| INV-22 | Transfer stok hareketi sayısı | Status=1 ve silinmemiş her Cari.Transferler satırı için tam 2 adet Bolum=2 stok hareketi; Status≠1 veya IsDeleted=1 için 0 olmalıdır. | Cari.Transferler, Stok.StokHaraketleri | S2 | Cari.TransferUpdateSTatus (StokTipi=-2 silme); Cari.Transferler.vb:222 |
| INV-23 | Limit kontrolü veri tazeliği (Cari.BakiyeDun) | Limit kontrolü kullanılıyorsa (Sube.IsLimitControl=1) Cari.BakiyeDun dolu ve Tarih = dün olmalıdır. | Cari.BakiyeDun, Sistem.Subeler | S2 | Cari.ToplamBakiye, Bakiye.DunkiBakiyeler; GAP-DB-03 |
| INV-24 | Tarihsiz türetilmiş kayıt (devir öncesi kontrol) | Cari.BakiyeIslem ve Stok.StokHaraketleri'nde Tarih NULL satır olmamalıdır (devir bu satırları kaybeder). | Cari.BakiyeIslem, Stok.StokHaraketleri, Cari.Islemler | S2 | Sistem.Devir (Tarih<@Tarih / Tarih>=@Tarih); H-108 |
| INV-25 | Takoz adet stoğu 0 veya 1 | Her takoz için StokTipi=3 hareketlerinin Adet toplamı 0 veya 1 olmalıdır (negatif = çıkışı girişten fazla, >1 = çift giriş). | Stok.StokHaraketleri, Stok.Takoz | S2 | Stok.GetTakozAdet; Cari.AcceptTransaction satır 225-247; BR-STOK-002; H-130 |
| INV-26 | Fiş numarası tekil gün/hesap | Aynı kasada aynı FisNo yalnız tek bir güne ve tek hesaba ait olmalıdır (fiş ile toplu iptal bu varsayıma dayanır). | Cari.Islemler | S3 | Cari.IslemEx.vb:256 (GetNewFisNo); iScreen.vb:723; H-102; CTR-016 |
| INV-27 | Çift bacaklı işlemlerin eşi mevcut | Virman (IslemKodu=11) RefNo'su tam 2 aktif satır taşımalı; parite birinci bacağının (VaryantId=-1) ikinci bacağı (VaryantId=Id) aktif olmalıdır. | Cari.Islemler | S2 | iFormBase.SendTo; iFNakit.SaveCashTransaction; BR-VIRMAN-002; BR-TIP-011; H-106 |
| INV-28 | Kur fotoğrafı anlamlı | Aktif işlemlerde HasKur, GumKur, UsdKur, EurKur, BirimKur 0 veya 1 (bulunamadı varsayılanı) olmamalıdır. | Cari.Islemler | S3 | Program.vb:260-268; Cari.Islem.vb:607-612; BR-KUR-001 |
| INV-29 | Stok hareketi milyem ve has iç tutarlılığı | Stok.StokHaraketleri'nde Milyem ≤ 1 olmalı; StokTipi=1 satırlarında Has = Miktar×Milyem (±0,0001) olmalıdır (devir açılış satırları dahil). | Stok.StokHaraketleri | S2 | Devir.vb:67 (Sum(Milyem)); Sistem.Devir (Has=0); BR-HESAP-001 |
| INV-30 (yalnız invariant; HC kuralı yok) | Devir öncesi/sonrası bakiye toplamı korunur | Devir sonrası hesap+birim bazında (devir satırı + yeni hareketler) toplamı, arşiv veritabanındaki aynı kesim tarihli toplama eşit olmalıdır. | Cari.BakiyeIslem | S1 | Sistem.Devir; Devir.vb; H-108; BR-DEVIR-001 |
