# Bakım (`App.Maintenance`) > 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. ## Tanımlamalar (`App.Maintenance.Definitions`) ### 1. Amaç ve kapsam 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. ### 2. Analiz ve kararlar - Modül kodu `Mm`, tablo öneki `Mm_T_`, ekran kökü `App.Maintenance` (kullanıcı onayı). - Sorumlu, Ekip Yöneticisi ve Ekip Üyeleri AbpUsers'tan seçilir (kullanıcı onayı); Ekip Üyeleri çoklu seçimdir (dxTagBox, `|` ile ayrılmış Id'ler). - Şube bilgisi `BranchId`'dir (Ekipman Kategorileri ve Bakım Ekipleri); demo satırlar Branch1'e yazıldı (kullanıcı onayı). - Hizmet Tipleri tablosundaki "Bakım Tipi" başlıklı kolon hizmetin adıdır → `Name` / "Hizmet Tipi"; Bakım Tipleri'ne lookup yoktur (kullanıcı onayı). - Odoo'daki "Satış Ekip Üyeleri" etiketi hatalıdır; alan "Ekip Üyeleri" olarak açıldı. - Red Nedenleri, Satınalma'daki `App.Prc.RejectReason` ile birleştirilmedi; Bakım'a ait kodlu ayrı liste. - Ü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). ### 3. Menü ve ekranlar Bakım (`App.Maintenance`) › Tanımlamalar (`App.Maintenance.Definitions`): | Ekran | Kod | Not | | --- | --- | --- | | Ekipman Kategorileri | `App.Maintenance.EquipmentCategory` | şube kapsamlı, 84 demo satır | | Bakım Ekipleri | `App.Maintenance.Team` | şube kapsamlı, 5 demo satır; Bakım/Hizmet Tipleri'nin lookup kaynağı | | Bakım Tipleri | `App.Maintenance.MaintenanceType` | 11 demo satır | | Hizmet Tipleri | `App.Maintenance.ServiceType` | 79 demo satır (ST01–ST79) | | Arıza Tipleri | `App.Maintenance.FailureType` | 8 demo satır | | Red Nedenleri | `App.Maintenance.RejectReason` | 8 demo satır | ### 4. Veri modeli Tüm tablolar kiracı (`TenantId`) + tam audit + soft delete taşır. - `Mm_T_EquipmentCategory` (BranchId, Name, ResponsibleUserId → AbpUsers, IsActive) - `Mm_T_Team` (BranchId, Name, ManagerUserId → AbpUsers, MemberUserIds nvarchar(MAX) `|` listesi, IsActive) - `Mm_T_MaintenanceType` (Code null olabilir, Name, TeamIds nvarchar(MAX) `|` listesi → Mm_T_Team, Description, SortOrder, IsActive) - `Mm_T_ServiceType` (SortOrder, Code, Name, TeamIds, Description, IsActive) — UQ (TenantId, Code) - `Mm_T_FailureType` (Code, Name, Description, SortOrder, IsActive) — UQ (TenantId, Code) - `Mm_T_RejectReason` (Code, Name, Description, SortOrder, IsActive) — UQ (TenantId, Code) ### 5. İş kuralları ve hesaplar - 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. ### 7. Entegrasyonlar Ekipman Kategorileri, Envanter › Ürünler › Ekipman sekmesinin kategori seçeneğidir (`Inv_T_Product.EquipmentCategoryId`); kullanılmış kategori silinmez, pasife alınır. Kullanıcı lookup'ları AbpUsers'tan, şube lookup'ı kullanıcıya atanmış aktif şubelerdir (`Sas_T_Branch` ⋈ `Sas_T_BranchUsers`, kiracıya süzülü; `LookupQueryValues.UserBranchValues`), yeni kayıt ilk şubeyle açılır (`UserDefaultBranchValue`). ### 8. Akış örneği 1. Bakım › Tanımlamalar › Bakım Ekipleri'nde "elektrik bakım" ekibi açılır; Ekip Yöneticisi ve Ekip Üyeleri kullanıcılardan seçilir. 2. Bakım Tipleri'nde "ELEKTRİK & ELEKTRONİK BAKIMLAR" düzenlenir, Bakım Ekipleri'ne "elektrik bakım" eklenir. 3. Hizmet Tipleri'nde ST07 "Elektrik Arızası ( Tesisat )" satırına aynı ekip eklenir; hizmet talebinde bu tip seçildiğinde ilgili ekip önerilir. ### 9. Sık sorulanlar - **Ekipman kategorisi neden başka şubede görünmüyor?** Liste seçili şubeye süzülür; kategori kaydedildiği şubeye aittir. - **Bakım tiplerinin demo verisinde ekipler neden boş?** Demo ekiplerin Id'si migrate'te üretildiği için bağlantılar ekrandan elle kurulur. - **ST02 ile ST06 aynı ad mı?** Evet, talepteki veri böyle; kodları farklıdır. ### 10. Dosyalar ve geri alma - Tablolar: `sql/object/Mm_T_EquipmentCategory.sql`, `Mm_T_Team.sql`, `Mm_T_MaintenanceType.sql`, `Mm_T_ServiceType.sql`, `Mm_T_FailureType.sql`, `Mm_T_RejectReason.sql`. - Wizard'lar: `Mm_EquipmentCategory.json`, `Mm_Team.json`, `Mm_MaintenanceType.json`, `Mm_ServiceType.json`, `Mm_FailureType.json`, `Mm_RejectReason.json`. - Demo veri: `data/App.Maintenance.{EquipmentCategory,Team,MaintenanceType,ServiceType,FailureType,RejectReason}.json`. - 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. ## Bakım (`App.Maintenance.Operations`) ### 1. Amaç ve kapsam 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. ### 3. Menü ve ekranlar Bakım (`App.Maintenance`) › Bakım (`App.Maintenance.Operations`) › Bakım Talimatları (`App.Maintenance.MaintenanceInstruction`). Sekmeler (menüsüz alt formlar), sırasıyla: Kullanılacak Malzemeler, Kontrol Listesi, Dokümanlar (listeler; ilişki `Id → MaintenanceInstructionId`), Genel, Onay Bilgileri (talimat satırının kendisi, `Id → Id`). ### 4. Veri modeli Tüm tablolar kiracı + tam audit + soft delete + `IsActive` taşır; şube (`BranchId`) yalnız talimat tablosundadır. - `Mm_T_MaintenanceInstruction` (Code, Name, MaintenanceTypeId → `Mm_T_MaintenanceType`, EquipmentId → `Inv_T_Product`, TeamIds `|` listesi → `Mm_T_Team`, PeriodValue int, PeriodUnit `Day`/`Week`/`Month`/`Year`, StartDate, EndDate, NextDueDate, InstructionText, DeptApproverUserNames, iş akışının dört kolonu) - `Mm_T_MaintenanceInstructionMaterial` (MaintenanceInstructionId, ProductId → `Inv_T_Product`, Quantity, UomId → `Adm_T_Uom`, Description) - `Mm_T_MaintenanceInstructionCheck` (MaintenanceInstructionId, Name, Description, IsRequired) - `Mm_T_MaintenanceInstructionDocument` (MaintenanceInstructionId, Name, DocumentType, FileContent, Version) ### 5. İş kuralları ve hesaplar - **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. - **Bakım Ekipleri** seçili şubenin aktif ekiplerini listeler; şube değişince temizlenir. **Malzeme** seçilince birim üründen dolar. - **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. - **Zamanlanmış iş:** `sql/object/Mm_S_MaintenanceInstructionSchedule.sql` (yordam) + `postgres/object/` eşi (void fonksiyon); satır `data/App.BackgroundWorkers.RecurringJobs.json`. - **Wizard'lar:** `Mm_MaintenanceInstruction`, `…Material`, `…Check`, `…Document`, `…General`, `…Approval` (`.json`). - **Numaratör:** `data/App.Definitions.Sequence.json` › `Mm.MaintenanceInstruction`. - **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. ## Ek — Ekran envanteri (otomatik) > Wizard dosyalarından üretilir; deploy, silme, tasarımcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur. ### Tanımlamalar (`App.Maintenance.Definitions`) #### Ekipman Kategorileri — `App.Maintenance.EquipmentCategory` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_EquipmentCategory.json` | | Yol | Liste (Wizard) | | Menü | `App.Maintenance.Definitions` › `App.Maintenance.EquipmentCategory` (sıra 1) | | Yetki | `App.Maintenance.EquipmentCategory` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Ekipman Kategorileri — ekipman olan ürünlerin bağlı olduğu gruplar (dokuma makineleri, kompresörler, bilgisayarlar, taşıtlar…). | | Geliştirme talebi | Bakım Modülü | | Kaynak | `Mm_T_EquipmentCategory` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` | | Form varsayılanları | IsActive=true, BranchId= | | Veri aynası | `data/App.Maintenance.EquipmentCategory.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | | `Name` | Kategori Adı | dxTextBox | ✓ | ✓ | | | `ResponsibleUserId` | Sorumlu | dxSelectBox | | ✓ | sorgu: AbpUsers | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | #### Bakım Ekipleri — `App.Maintenance.Team` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_Team.json` | | Yol | Liste (Wizard) | | Menü | `App.Maintenance.Definitions` › `App.Maintenance.Team` (sıra 2) | | Yetki | `App.Maintenance.Team` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Bakım Ekipleri — bakım yapacak kişilerin grupları (iç bakım, mekanik, elektrik, dış bakım/tedarikçi). | | Geliştirme talebi | Bakım Modülü | | Kaynak | `Mm_T_Team` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` | | Form varsayılanları | IsActive=true, BranchId= | | Veri aynası | `data/App.Maintenance.Team.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | | `Name` | Ekip Adı | dxTextBox | ✓ | ✓ | | | `ManagerUserId` | Ekip Yöneticisi | dxSelectBox | | ✓ | sorgu: AbpUsers | | `MemberUserIds` | Ekip Üyeleri | dxTagBox | | ✓ | sorgu: AbpUsers | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | #### Bakım Tipleri — `App.Maintenance.MaintenanceType` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_MaintenanceType.json` | | Yol | Liste (Wizard) | | Menü | `App.Maintenance.Definitions` › `App.Maintenance.MaintenanceType` (sıra 3) | | Yetki | `App.Maintenance.MaintenanceType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` | | Form varsayılanları | SortOrder=0, IsActive=true | | Veri aynası | `data/App.Maintenance.MaintenanceType.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `Code` | Kod | dxTextBox | | ✓ | | | `Name` | Bakım Tipi | dxTextBox | ✓ | ✓ | | | `TeamIds` | Bakım Ekipleri | dxTagBox | | ✓ | sorgu: Mm_T_Team | | `Description` | Açıklama | dxTextArea | | ✓ | | | `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | #### Hizmet Tipleri — `App.Maintenance.ServiceType` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_ServiceType.json` | | Yol | Liste (Wizard) | | Menü | `App.Maintenance.Definitions` › `App.Maintenance.ServiceType` (sıra 4) | | Yetki | `App.Maintenance.ServiceType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | 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'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` | | Form varsayılanları | SortOrder=0, IsActive=true | | Veri aynası | `data/App.Maintenance.ServiceType.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | | | `Code` | Kod | dxTextBox | ✓ | ✓ | | | `Name` | Hizmet Tipi | dxTextBox | ✓ | ✓ | | | `TeamIds` | Bakım Ekipleri | dxTagBox | | ✓ | sorgu: Mm_T_Team | | `Description` | Açıklama | dxTextArea | | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | #### Arıza Tipleri — `App.Maintenance.FailureType` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_FailureType.json` | | Yol | Liste (Wizard) | | Menü | `App.Maintenance.Definitions` › `App.Maintenance.FailureType` (sıra 5) | | Yetki | `App.Maintenance.FailureType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Arıza Tipleri — hizmet talebinde bildirilen arızanın sınıflandırması (mekanik, elektrik, pnömatik, hidrolik, yazılım/PLC, sensör, aşınma, diğer). | | Geliştirme talebi | Bakım Modülü | | Kaynak | `Mm_T_FailureType` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` | | Form varsayılanları | SortOrder=0, IsActive=true | | Veri aynası | `data/App.Maintenance.FailureType.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `Code` | Kod | dxTextBox | ✓ | ✓ | | | `Name` | Arıza Tipi | dxTextBox | ✓ | ✓ | | | `Description` | Açıklama | dxTextArea | | ✓ | | | `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | #### Red Nedenleri — `App.Maintenance.RejectReason` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_RejectReason.json` | | Yol | Liste (Wizard) | | Menü | `App.Maintenance.Definitions` › `App.Maintenance.RejectReason` (sıra 6) | | Yetki | `App.Maintenance.RejectReason` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Red Nedenleri — bakım ve hizmet iş taleplerinin reddedilme sebepleri (kullanıcı hatası, arıza bulunamadı, garanti, dış firma, hurda, mükerrer, bakım gerekmiyor, diğer). | | Geliştirme talebi | Bakım Modülü | | Kaynak | `Mm_T_RejectReason` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` | | Form varsayılanları | SortOrder=0, IsActive=true | | Veri aynası | `data/App.Maintenance.RejectReason.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `Code` | Kod | dxTextBox | ✓ | ✓ | | | `Name` | Red Nedeni | dxTextBox | ✓ | ✓ | | | `Description` | Açıklama | dxTextArea | | ✓ | | | `SortOrder` | Sıra | dxNumberBox | ✓ | ✓ | | | `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | | ### Bakım (`App.Maintenance.Operations`) #### Bakım Talimatları — `App.Maintenance.MaintenanceInstruction` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_MaintenanceInstruction.json` | | Yol | Liste (Wizard) | | Menü | `App.Maintenance.Operations` › `App.Maintenance.MaintenanceInstruction` (sıra 1) | | Yetki | `App.Maintenance.MaintenanceInstruction` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Bakım Talimatları — ekipmanların periyodik bakım planları. | | Kaynak | `Mm_T_MaintenanceInstruction` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Alt formlar | `App.Maintenance.MaintenanceInstructionMaterial` (Id → MaintenanceInstructionId, BranchId → BranchId), `App.Maintenance.MaintenanceInstructionCheck` (Id → MaintenanceInstructionId, BranchId → BranchId), `App.Maintenance.MaintenanceInstructionDocument` (Id → MaintenanceInstructionId, BranchId → BranchId), `App.Maintenance.MaintenanceInstructionGeneral` (Id → Id), `App.Maintenance.MaintenanceInstructionApproval` (Id → Id) | | Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.AwaitingApproval`, `App.Widget.Approved` | | Komutlar | InsertAfter: SQL · UpdateAfter: SQL | | Form varsayılanları | Code=Mm.MaintenanceInstruction, BranchId=, StartDate=@NOW, PeriodValue=1, PeriodUnit=Month, IsActive=true | | Onay akışı | Start 'Onaya Gönderildi' → Approval 'Departman Onayı' → End 'Onaylandı' → End 'Reddedildi' | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch | | `Code` | Bakım Kodu | dxTextBox | | ✓ | | | `MaintenanceTypeId` | Bakım Tipi | dxSelectBox | | ✓ | sorgu: Mm_T_MaintenanceType | | `Name` | Bakım Adı | dxTextBox | ✓ | ✓ | | | `EquipmentId` | Ekipman | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product | | `TeamIds` | Bakım Ekipleri | dxTagBox | | ✓ | sorgu: Mm_T_Team (← BranchId) | | `PeriodValue` | Periyot | dxNumberBox | ✓ | ✓ | | | `PeriodUnit` | Periyot Birimi | dxSelectBox | ✓ | ✓ | liste: Day, Week, Month, Year | | `StartDate` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | | | `EndDate` | Bitiş Tarihi | dxDateBox | | ✓ | | | `NextDueDate` | Sonraki Bakım | dxDateBox | | | | | `IsActive` | Aktif | dxCheckBox | | ✓ | | | `ApprovalStatus` | Onay Durumu | dxTextBox | | | | | `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | | | | `ApprovalDate` | Onay Tarihi | dxDateBox | | | | | `ApprovalDescription` | Onay Açıklaması | dxTextBox | | | | | `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | | | #### Onay Bilgileri — `App.Maintenance.MaintenanceInstructionApproval` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_MaintenanceInstructionApproval.json` | | Yol | Liste (Wizard) | | Menü | Menüsüz (alt form) | | Yetki | `App.Maintenance.MaintenanceInstructionApproval` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Bakım Talimatı Onay Bilgileri — talimatın onay durumu (salt okunur). | | Kaynak | `Mm_T_MaintenanceInstruction` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup | | Kapsam | Kiracı | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `ApprovalStatus` | Onay Durumu | dxTextBox | | ✓ | | | `ApprovalUserName` | Onaylayan Kullanıcı Adı | dxTextBox | | ✓ | | | `ApprovalDate` | Onay Tarihi | dxDateBox | | ✓ | | | `ApprovalDescription` | Onay Açıklaması | dxTextArea | | ✓ | | | `DeptApproverUserNames` | Departman Onaycıları | dxTextBox | | ✓ | | #### Kontrol Listesi — `App.Maintenance.MaintenanceInstructionCheck` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_MaintenanceInstructionCheck.json` | | Yol | Liste (Wizard) | | Menü | Menüsüz (alt form) | | Yetki | `App.Maintenance.MaintenanceInstructionCheck` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Kontrol Listesi — bakım talimatı uygulanırken teknisyenin kontrol ettiği maddeler. | | Kaynak | `Mm_T_MaintenanceInstructionCheck` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Form varsayılanları | IsActive=true, IsRequired=false | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `MaintenanceInstructionId` | Kimlik | dxTextBox | | | | | `Name` | Kontrol Maddesi | dxTextBox | ✓ | ✓ | | | `Description` | Açıklama | dxTextArea | | ✓ | | | `IsRequired` | Zorunlu | dxCheckBox | | ✓ | | | `IsActive` | Aktif | dxCheckBox | | ✓ | | #### Dokümanlar — `App.Maintenance.MaintenanceInstructionDocument` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_MaintenanceInstructionDocument.json` | | Yol | Liste (Wizard) | | Menü | Menüsüz (alt form) | | Yetki | `App.Maintenance.MaintenanceInstructionDocument` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Dokümanlar — bakım talimatına eklenen kılavuz, prosedür, çizim ve sertifikalar. | | Kaynak | `Mm_T_MaintenanceInstructionDocument` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Form varsayılanları | IsActive=true, DocumentType=Other | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `MaintenanceInstructionId` | Kimlik | dxTextBox | | | | | `BranchId` | BranchId | dxSelectBox | | | sorgu: Sas_T_Branch | | `Name` | Doküman Adı | dxTextBox | ✓ | ✓ | | | `DocumentType` | Belge Tipi | dxSelectBox | ✓ | ✓ | liste: UserManual, Procedure, TechnicalDrawing, Certificate, Other | | `FileContent` | Dosya | dxImageUpload | | ✓ | | | `Version` | Versiyon | dxTextBox | | ✓ | | | `IsActive` | Aktif | dxCheckBox | | ✓ | | #### Genel — `App.Maintenance.MaintenanceInstructionGeneral` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_MaintenanceInstructionGeneral.json` | | Yol | Liste (Wizard) | | Menü | Menüsüz (alt form) | | Yetki | `App.Maintenance.MaintenanceInstructionGeneral` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Bakım Talimatı Genel — bakım talimatının yazılı metni. | | Kaynak | `Mm_T_MaintenanceInstruction` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup | | Kapsam | Kiracı | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `InstructionText` | Bakım Talimatı | dxHtmlEditor | | ✓ | | #### Kullanılacak Malzemeler — `App.Maintenance.MaintenanceInstructionMaterial` | Özellik | Değer | | --- | --- | | Wizard | `wizard/Mm_MaintenanceInstructionMaterial.json` | | Yol | Liste (Wizard) | | Menü | Menüsüz (alt form) | | Yetki | `App.Maintenance.MaintenanceInstructionMaterial` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` | | Açıklama | Kullanılacak Malzemeler — bakım talimatının gerektirdiği yedek parça ve sarf malzemeleri. | | Kaynak | `Mm_T_MaintenanceInstructionMaterial` · filtre `"IsDeleted" = 'false'` | | Görünümler | Grid, Card, Pivot, Chart (açılış grid) | | Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup | | Kapsam | Kiracı | | Form varsayılanları | IsActive=true, Quantity=1, UomId=Adet | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `MaintenanceInstructionId` | Kimlik | dxTextBox | | | | | `ProductId` | Malzeme | dxSelectBox | ✓ | ✓ | sorgu: Inv_T_Product · script | | `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | | | `UomId` | Birim | dxSelectBox | ✓ | ✓ | sorgu: Adm_T_Uom | | `Description` | Açıklama | dxTextBox | | ✓ | | | `IsActive` | Aktif | dxCheckBox | | ✓ | |