# 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. ### 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 Yok. 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. ## 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 | | Veri aynası | `data/App.Maintenance.EquipmentCategory.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: kullanıcının şubeleri (Sas_T_Branch ⋈ Sas_T_BranchUsers), varsayılan ilk şube | | `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 | | Veri aynası | `data/App.Maintenance.Team.json` | | Alan | Başlık | Editör | Zorunlu | Formda | Kaynak | | --- | --- | --- | --- | --- | --- | | `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: kullanıcının şubeleri (Sas_T_Branch ⋈ Sas_T_BranchUsers), varsayılan ilk şube | | `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 | ✓ | ✓ | |