> Menünün altındaki her dal bu dosyada bir bölümdür (`module-doc:section`); dosya ve bölümler ilk deploy'da otomatik açılır. `module-doc:todo` işaretli alt bölümleri modülü üreten kişi ya da AI doldurur (`lowcode.instructions.md` §0.13); MCP ile üretimde talep bu bölümler doldurulmadan Testing'e alınamaz. "Ek — Ekran envanteri" bölümü wizard dosyalarından üretilir, elle düzenlenmez.
Bakım modülünün (KADİFETEKS Odoo Bakım modülünden taşınan) tanım listeleri: ekipman kategorileri, bakım ekipleri, bakım tipleri, hizmet tipleri, arıza tipleri ve red nedenleri. Kullanıcılar bakım ve bilgi işlem yöneticileridir. Bakım/hizmet iş emirleri, bakım talimatları ve hizmet talepleri bu bölümün kapsamında değildir; bu ekranlar onların lookup kaynağıdır.
- Ürün kartına ekipman işareti/kategorisi eklenmesi bu bölümün kapsamında değildir; kategori sonradan Envanter › Ürünler › Ekipman sekmesine bağlandı (`App.Inventory.md` §2).
- Lookup'lar yalnızca silinmemiş kayıtları, ekip lookup'ı ayrıca yalnız aktif ekipleri listeler; kullanılmış tanım silinmez, pasife alınır.
- Bakım Tipleri, Hizmet Tipleri, Arıza Tipleri ve Red Nedenleri SortOrder'a göre artan sıralı açılır.
- Hizmet/Arıza/Red kodu kiracı içinde benzersizdir (soft delete edilmiş kayıt da kodu tutar).
- Hesaplanan alan yoktur.
### 6. Yetki ve görünürlük
Yetki ağacı: `App.Maintenance`›`App.Maintenance.Definitions`› her ekran (+ Create/Update/Delete/Export/Import/Note). Ekipman Kategorileri ve Bakım Ekipleri şube kapsamlıdır (`IsBranch`), diğerleri yalnız kiracı kapsamlıdır. Widget'lar: her ekranda Toplam · Aktif · Pasif.
- Geri alma: ekranlar `delete_wizard` ile silinir (önce Bakım/Hizmet Tipleri, sonra Bakım Ekipleri); tablolar yalnızca açık onayla `dropTables: true` ile düşürülür.
Ekipmanların periyodik bakım planı: hangi ekipmana, hangi ekiple, hangi malzeme, kontrol listesi ve dokümanlarla, ne sıklıkta bakım yapılacağı. Plan departman onayından geçer; sonraki bakım tarihini zamanlanmış iş her gece hesaplar. Kullanıcılar bakım planlamacıları ve ekipmanın departman onaycılarıdır. Bakım iş emri henüz yoktur; iş emri ekranı geldiğinde vadesi gelen onaylı talimattan iş emri açılır.
### 2. Analiz ve kararlar
Onaylanan tarif (2026-10-18, görsellerden: talimat formu, Kontrol Listesi ve Dokümanlar sekmeleri):
- Menü `Bakım › Bakım` (yeni dal `App.Maintenance.Operations`, sıra 2) › Bakım Talimatları.
- Ekipman ayrı bir tablo değildir; Ekipman Kategorisi dolu olan üründür (`Inv_T_Product`, Ürünler › Ekipman sekmesi). Diğer ürünler ekipman listesinde görünmez (kullanıcı kararı). Seçenek "Ad [İç Referans]/Seri No" olarak gösterilir.
- Periyot "Her N Gün / Hafta / Ay / Yıl" (kullanıcı kararı).
- Zamanlanmış iş yalnızca sonraki bakım tarihini hesaplar; iş emri tablosu açılmadı (kullanıcı kararı: "Yalnızca sonraki tarih").
- Onaycı departman onaycısıdır (kullanıcı kararı): Onaycılar ekranında ekipmanın departmanı (`EquipmentDepartmentId`) için yeni **Bakım** onay yeri (`Maintenance`). Red nedeni Bakım › Red Nedenleri'nden seçilir.
- Genel sekmesi yalnız zengin metin bakım talimatıdır (kullanıcı kararı). Onay Bilgileri sekmesi akışın dört alanını ve departman onaycılarını salt okunur gösterir.
- Bakım Kodu otomatik (`Mm.MaintenanceInstruction` numaratörü, `BKM00001`). Talimat işlem kaydıdır: `BranchId` taşır ve şube kapsamlıdır (`IsBranch`). Sekme tabloları şube kolonu taşımaz; şubeyi bağlı oldukları talimattan alırlar (kullanıcı kararı).
- Doküman Tipi sabit liste: Kullanım Kılavuzu, Prosedür, Teknik Çizim, Sertifika, Diğer. Dosya kayıtta base64 saklanır.
Üretimde verilen ek kararlar:
- Kayıt sonrası komutlar yordam çağırmaz, iki sağlayıcıda da çalışan tek bir `UPDATE`'tir; ekran komutu sağlayıcıya göre çevrilmediği için `EXEC` kullanılmadı. Tarih aritmetiği sağlayıcıya göre değiştiğinden periyot hesabı yalnız zamanlanmış işin yordamındadır (`sql/` + `postgres/` eşi).
- Sonraki bakım tarihi onay durumundan bağımsız hesaplanır; onay şartı iş emri açılırken uygulanacaktır.
- Güncelleme varsayılanlarına `Id = @ID` yazılmaz: yazılırsa anahtar tek değer olarak gider ve güncelleme sonrası komuttaki `"Id" IN @Id` geçersiz SQL olur (Onayla düğmesinde "Incorrect syntax near @Id" hatası). Satır yoksa platform anahtarı liste olarak ekler.
- **Sonraki bakım:** `Başlangıç + k × periyot` dizisinde bugüne eşit ya da sonraki ilk tarih. Hafta 7 gün, yıl 12 aydır; ay eklemede ay sonu korunur (31 Ocak › 28 Şubat). Bitiş Tarihi'ni aşan tarih boş kalır. Pasif ya da silinmiş talimatta tarih boştur.
- **Hesaplama zamanı:** Maintenance Instruction Schedule işi (her gece 01:00, `Mm_S_MaintenanceInstructionSchedule`). Kayıtta yalnız Başlangıç Tarihi bugün ya da ileride ise sonraki bakım hemen Başlangıç Tarihi olur; geçmiş başlangıç ve periyot değişikliği gece işlenir.
- **Departman onaycıları:** her kayıtta ve akış adımında yeniden yazılır: ekipmanın departmanı için aktif Bakım onaycılarının aktif kullanıcı adları, `|` ile.
- **Varsayılanlar:** yeni talimat ilk şube, bugün, Her 1 Ay ve Aktif ile; malzeme 1 Adet; doküman tipi Diğer ile açılır.
### 6. Yetki ve görünürlük
`App.Maintenance`›`App.Maintenance.Operations`›`App.Maintenance.MaintenanceInstruction` (+ Create/Update/Delete/Export/Import/Note); beş sekmenin yetkisi talimat yetkisinin altındadır. Yetkiler hiçbir role otomatik verilmez. Akışı başlatmak ve karar vermek talimatın Update yetkisini ister; karar yalnız departman onaycılarındadır. Widget'lar: Toplam · Aktif · Onay Bekleyen · Onaylanan.
### 7. Entegrasyonlar
Ekipman, malzeme ve birim Envanter'den; ekipmanın departmanı İK › Departmanlar'dan; onaycılar Yönetim › Onaycılar'dan (Bakım onay yeri); bakım tipi, ekip ve red nedeni Bakım › Tanımlamalar'dan okunur. Zamanlanmış iş `SqlWorker` türündedir, kapsamı Host ve Kiracılar'dır.
### 8. Akış örneği
1. Ürünler'de "örme motoru"nun Ekipman sekmesinde Ekipman Kategorisi ve Departman seçilir.
2. Onaycılar'da o departman için Onay Yeri = Bakım satırı eklenir.
3. Bakım Talimatları'nda "motor yanmış" talimatı açılır: ekipman örme motoru [MTR-001]/MTR-001, Her 60 Gün, başlangıç 18 Eylül. Malzeme, kontrol maddesi ve doküman sekmelerden eklenir.
4. Başlat düğmesiyle talimat Departman Onayı'na düşer; onaycı onaylar ya da red nedeniyle reddeder.
5. İş her gece sonraki bakımı ilerletir: 18 Eylül › 17 Kasım.
### 9. Sık sorulanlar
- **Ekipman listesinde ürünüm yok?** Ürünün Ekipman sekmesinde Ekipman Kategorisi seçilmeli ve ürün aktif olmalıdır.
- **Onaya gönderdim ama kimse onaylayamıyor?** Ekipmanın departmanı boş ya da o departman için Bakım onay yerinde aktif onaycı yoktur. Onaycıyı ekleyip talimatı kaydedin; liste kayıtta yenilenir.
- **Sonraki Bakım boş?** Başlangıç geçmişteyse tarih ilk gece işinde dolar. Bitişi geçmiş ya da pasif talimatta tarih boştur.
- **İş emri neden açılmıyor?** İş emri ekranı henüz yoktur; geldiğinde zamanlanmış işin yordamına eklenecektir.
### 10. Dosyalar ve geri alma
- **Tablolar:** `sql/object/Mm_T_MaintenanceInstruction{,Material,Check,Document}.sql` ve `postgres/object/` eşleri.
- **Onay yeri:** `wizard/Adm_Approver.json` Onay Yeri listesine `Maintenance` eklendi.
- **Geri alma:** Wizard Manager'da önce `Mm_MaintenanceInstruction`, sonra beş sekme silinir; zamanlanmış iş satırı ve numaratör dosyadan çıkarılır. Tablolar ancak açık onayla düşürülür.
| Açıklama | Bakım Tipleri — bakım işinin türleri (mekanik, elektrik & elektronik, genel temizlik, ölçüm & kalibrasyon, periyodik, bilgi işlem donanım…). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_MaintenanceType` · filtre `"IsDeleted" = 'false'` |
| Açıklama | Hizmet Tipleri — bölümlerin talep edebileceği hizmet türleri (mekanik/elektrik arıza, bilgi işlem destek, yazıcı servisi, sunucu işleri, dokuma özel işlemleri…). |
| Geliştirme talebi | Bakım Modülü |
| Kaynak | `Mm_T_ServiceType` · filtre `"IsDeleted" = 'false'` |