2026-10-04 15:04:16 +00:00
# İK › Intranet (`App.Hr.Intranet`)
Kurum içi iletişim: ana sayfa panosu (bugün doğanlar, dokümanlar, aktif anketler, sosyal duvar,
duyurular, yaklaşan etkinlikler), bunları n yönetim ekranları (duyuru, anket, sosyal paylaşı m,
etkinlik), doküman kütüphanesi ve kullanı cı lar arası mesajlaşma. Bu modül **entity + C# seeder +
özel React sayfaları yla** kuruludur (wizard değil); pano kutuları Developer Kit › Intranet Widgets
kaydı yla yönetilir.
> Bu doküman modülün tek "nası l çalı şı r" kaynağı dı r. Modülde yapı lan her değişiklik aynı commit'te
> buraya yansı r (`lowcode.instructions.md` §0.13).
---
## 1. Amaç ve kapsam
| Persona | Ne yapar | Ekran |
| --- | --- | --- |
| Tüm çalı şanlar | Panoyu görür; duyuru okur/beğenir/yorumlar, anket doldurur, paylaşı m yapar, beğenir, yorumlar, ankete oy verir, etkinliği beğenir/yorumlar, doküman indirir, mesajlaşı r | `/admin/dashboard` · mesajlaşma penceresi |
| İK / iç iletişim | Duyuru, anket (soru/seçenek), etkinlik ve tanı mları nı yönetir; yanı tları ve etkileşimleri izler | İK › Intranet › Duyurular · Anketler · Sosyal Paylaşı mlar · Etkinlik Türleri/Kategorileri · Etkinlikler |
| İK / doküman sorumlusu | Doküman yükler, yayı na alı r/kaldı rı r | İK › Intranet › Dokümanlar (`/admin/intranet-documents`) |
| Sistem yöneticisi | Pano kutuları nı (hazı r ya da custom component) tanı mlar, sı rası nı ve yetkisini belirler | Developer Kit › Intranet Widgets |
Kapsam: kiracı . Bütün tablolar `IMultiTenant` ; satı r süzmesi yoktur.
---
## 2. Analiz ve kararlar
> Modül §0.13 kuralı ndan önce üretildi; keşif turu kaydı yoktur. Kararlar koddan
> (`ListFormSeeder_Hr.cs`, `Entities/Tenant/Hr/Intranet`, `IntranetAppService`, `views/intranet`) okunmuştur.
| Konu | Karar |
| --- | --- |
| Yol | Yönetim ekranları entity + seeder ListForm'u; pano ve etkileşimler özel React + `IntranetAppService` |
| Modül yeri | Intranet İK'dadı r: menü `App.Hr.Intranet` , yetkiler `App.Hr.Intranet.*` , tablolar `Hr_T_*` ; pano kutusu kaydı (`Sas_T_IntranetWidget`) Saas › Developer Kit'te kalı r |
| Pano kutuları | Veritabanı kaydı dı r (kod, kolon, sı ra, yetki, aktiflik). **Builtin** kutu koda kayı tlı React bileşenidir (`id` = kayı t `Code` ); **Custom** kutu Developer Kit custom component'idir (Props JSON ile) |
| Kullanı cı yerleşimi | Pano tasarı m modunda sürükle-bı rak, gizle/göster, kolon oranı hazı r ayarları ; tercih **tarayı cı da (localStorage)** saklanı r, sunucuya yazı lmaz |
| Doğum günleri | Her pano isteğinde kullanı cı ları n `BirthDate` genişletme alanı ndan canlı hesaplanı r (gün + ay) |
| Duyuru panoda | Kutu yalnı z **sabitlenmiş** (`IsPinned`) duyuruları , en fazla 3 tane gösterir |
| Anket | `Status = active` anketler; kullanı cı yanı tı nı sonradan **güncelleyebilir** ; anonim ankette yanı t `UserId` taşı maz |
| Sosyal medya | Bir paylaşı mda tek medya kaydı (resim(ler), video ya da anket); yüklenen dosya **base64 data URL** olarak `SocialMedia.Urls` 'e yazı lı r |
| Doküman yayı nı | Fiziksel CDN klasörleri: `intranet` (yayı nda) ve `intranet/_passive` (yayı nda değil); yayı na alma = klasörler arası taşı ma |
| Mesajlaşma | Yalnı z tablo öneki ile İK'dadı r (`Hr_T_Messenger*`); menüsü/yetkisi yoktur, kabuk düzenine gömülü pencere + SignalR |
| Bildirim / zamanlanmı ş iş | Yok |
---
## 3. Menü ve ekranlar
2026-10-04 21:18:13 +00:00
`İnsan Kaynakları › Intranet` (`App.Hr.Intranet`, sı ra 14)
2026-10-04 15:04:16 +00:00
| Sı ra | Menü | `ListFormCode` / rota | Alt formlar | Widget'lar |
| --- | --- | --- | --- | --- |
2026-10-04 21:18:13 +00:00
| 1 | Etkinlik Türleri | `App.Hr.Intranet.Events.EventType` | — | — |
| 2 | Etkinlik Kategorisi | `App.Hr.Intranet.Events.EventCategory` | — | — |
| 3 | Duyurular | `App.Hr.Intranet.Announcement` | `…Announcement.AnnouncementLike` , `…Announcement.AnnouncementComment` (`Id → AnnouncementId`) | Aktif · Sabitlenmiş · Süresi dolan · Toplam görüntülenme |
| 4 | Anketler | `App.Hr.Intranet.Survey` | `SurveyQuestion` (→ `SurveyQuestionOption` ), `SurveyResponse` (→ `SurveyAnswer` ) — iki seviyeli | Aktif · Pasif · Toplam yanı t |
| 5 | Sosyal Paylaşı mlar | `App.Hr.Intranet.SocialPost` | `SocialComment` , `SocialMedia` (→ `SocialPollOption` ), `SocialLike` (`Id → SocialPostId`) | Toplam · Bugün · Toplam beğeni |
2026-10-04 15:04:16 +00:00
| 6 | Etkinlikler | `App.Hr.Intranet.Events.Event` | `EventLike` , `EventComment` (`Id → EventId`) | Yaklaşan · Yayı nda · Taslak · İptal |
| 7 | Dokümanlar | `/admin/intranet-documents` (özel sayfa) | — | — |
Diğer giriş noktaları :
| Ne | Nerede |
| --- | --- |
| Pano | `/admin/dashboard` (`views/Dashboard.tsx` → `views/intranet/Dashboard.tsx` ); rota yetkisizdir, menüde ayrı kaydı yoktur |
| Pano kutusu tanı mı | Developer Kit › Intranet Widgets (`App.DeveloperKit.IntranetWidgets`, `Sas_T_IntranetWidget` ); veri `data/App.DeveloperKit.IntranetWidgets.json` 'a aynalanı r |
| Mesajlaşma | Uygulama kabuğundaki `MessengerWidget` |
Pano kutuları (seed):
| Kod | Kolon / sı ra | Yetki | Ne gösterir |
| --- | --- | --- | --- |
| `today-birthdays` | Sol / 10 | `AbpIdentity.Users.Widget` | Bugün doğanlar: avatar, ad, yaş, departman |
| `documents` | Sol / 20 | `App.Files.Widget` | Yayı ndaki ilk 3 doküman (tür, boyut, tarih, indir) |
| `active-surveys` | Sol / 30 | `App.Hr.Intranet.Survey.Widget` | Aktif anketler (kalan gün, soru/yanı t sayı sı , doldurdum/doldur) |
2026-10-04 19:17:16 +00:00
| `my-leave` | Sol / 35 | `App.Hr.MyLeaveRequest` | Custom `MyLeaveWidget` : izin bakiyesi, süren talepler → İzin Talebi Oluştur · Taleplerim · Bakiyem |
| `team-leave` | Sol / 36 | `App.Hr.TeamLeaveRequest` | Custom `TeamLeaveWidget` : müdürün onayı nı bekleyen izin talepleri, bugün izinde olanlar → Onay Bekleyenler |
2026-10-04 21:18:13 +00:00
| `my-timesheet` | Sol / 37 | `App.Hr.MyTimesheet` | Custom `MyTimesheetWidget` : seçilen ayı n puantajı (net saat, geç/erken dk, fazla mesai, devamsı z/izinli/raporlu) ve yı l toplamı , 270 saatlik fazla mesai çubuğu → Puantajı m |
2026-10-04 15:04:16 +00:00
| `social-wall` | Orta / 40 | `App.Hr.Intranet.SocialPost.Widget` | Sosyal duvar (Tümü / Paylaşı mları m, sonsuz kaydı rma 10'arlı ) |
| `announcements` | Sağ / 50 | `App.Hr.Intranet.Announcement.Widget` | Sabitlenmiş duyurular (en fazla 3) |
| `upcoming-events` | Sağ / 60 | `App.Hr.Intranet.Events.Event.Widget` | Bugünden sonraki yayı nlanmı ş ilk 3 etkinlik |
| `my-performance` | Sağ / 70 | `App.Hr.MyPerformanceReview` | Custom `MyPerformanceWidget` : aktif performans değerlendirmesi, puanlar, gelişim aksiyonları → Değerlendirmelerim |
| `team-performance` | Sağ / 80 | `App.Hr.TeamPerformanceReview` | Custom `TeamPerformanceWidget` : yöneticinin ekip değerlendirmeleri → Ekibimin Değerlendirmeleri |
| `my-360-feedback` | Sağ / 90 | `App.Hr.My360Feedback` | Custom `My360FeedbackWidget` : kullanı cı ya atanan 360 talepleri → 360 Taleplerim |
2026-10-04 21:18:13 +00:00
İlk altı kutu Builtin'dir (koddaki `Code` ). `my-leave` / `team-leave` İzin Yönetimi'nin (`HrLeave.md` §3.3), `my-timesheet` Puantaj ve Devam Takibi'nin (`HrAttendance.md` §3.3), son üçü Performans Yönetimi'nin çalı şana ait özetleridir:
2026-10-04 15:04:16 +00:00
İK menüsü İK departmanı nı ndı r, çalı şan kendi değerlendirmesini buradan takip eder; listeler menüsüzdür ve
kutudaki bağlantı yla açı lı r. Ayrı ntı : `HrPerformance.md` §3.3.
---
## 4. Veri modeli
Entity'ler `Entities/Tenant/Hr/Intranet` (`FullAuditedEntity< Guid > , IMultiTenant`); tablolar migration'lı dı r.
| Tablo | Önemli kolonlar | Kural |
| --- | --- | --- |
| `Hr_T_Announcement` | `Title` , `Excerpt` , `Content` (HTML), `ImageUrl` , `Category` (general/event/urgent/announcement), `UserId` , `PublishDate` , `ExpiryDate` , `IsPinned` , `ViewCount` , `Likes` , `Attachments` | Başlı k kiracı da tekil |
| `Hr_T_AnnouncementComment` / `Hr_T_AnnouncementLike` | `AnnouncementId` , `UserId` , (`Content`) | Beğeni kullanı cı başı na tekil |
| `Hr_T_Survey` | `Title` , `Description` , `Deadline` , `Responses` , `Status` , `IsAnonymous` | Başlı k kiracı da tekil |
| `Hr_T_SurveyQuestion` | `SurveyId` , `QuestionText` , `Type` (rating/multiple-choice/text/textarea/yes-no), `Order` , `IsRequired` | — |
| `Hr_T_SurveyQuestionOption` | `QuestionId` , `Text` , `Order` | — |
| `Hr_T_SurveyResponse` / `Hr_T_SurveyAnswer` | `SurveyId` , `UserId` , `SubmissionTime` / `ResponseId` , `QuestionId` , `QuestionType` , `Value` | — |
| `Hr_T_SocialPost` | `UserId` , `Content` , `LikeCount` , `IsLiked` , `IsOwnPost` | — |
| `Hr_T_SocialMedia` | `SocialPostId` (1:1), `Type` (image/video/poll), `Urls` , `PollQuestion` , `PollTotalVotes` , `PollEndsAt` , `PollUserVoteId` | — |
| `Hr_T_SocialPollOption` | `SocialMediaId` , `Text` , `Votes` | — |
| `Hr_T_SocialComment` / `Hr_T_SocialLike` | `SocialPostId` , `UserId` , (`Content`) | Beğeni kullanı cı başı na tekil |
| `Hr_T_SocialLocation` | Konum bilgisi | Kullanan ekran/servis yok |
| `Hr_T_EventType` / `Hr_T_EventCategory` | `Name` | Kiracı da tekil |
| `Hr_T_Event` | `CategoryId` , `TypeId` , `Date` , `Name` , `Description` , `Place` , `Status` (published/draft/cancelled), `UserId` , `ParticipantsCount` , `Likes` , `isPublished` , `Photos` | `(CategoryId, TypeId, Name)` tekil |
| `Hr_T_EventComment` / `Hr_T_EventLike` | `EventId` , `UserId` , (`Content`) | Beğeni tekil |
| `Sas_T_IntranetWidget` | `Code` , `Name` , `LabelKey` , `SourceType` (0 Builtin / 1 Custom), `ComponentName` , `PermissionName` , `Column` (0 sol / 1 orta / 2 sağ), `Order` , `Props` , `IsActive` | Kod kiracı da tekil |
| `Hr_T_MessengerConversation` / `Hr_T_MessengerConversationMessage` | Konuşma (katı lı mcı lar, son mesaj) / mesaj (gönderen, alı cı lar, metin, ekler, zaman) | — |
---
## 5. İş kuralları (`IntranetAppService`)
| İşlem | Kural |
| --- | --- |
| Pano verisi | Doğum günleri (bugün), `intranet` klasöründeki dosyalar (`_passive` hariç), son 50 duyuru, `active` anketler + kullanı cı nı n yanı tı , `isPublished` son 50 etkinlik, aktif ve yetkisi verilmiş pano kutuları . Duyuru için tarih/sabitleme süzmesi, anket için son tarih süzmesi **sunucuda yoktur** |
| Duyuru aç | Her açı lı şta `ViewCount + 1` |
| Beğeni (duyuru, paylaşı m, etkinlik) | Aç/kapa: beğeni satı rı eklenir/silinir, sayaç ±1 |
| Yorum | Satı r eklenir; listelenirken yazar bilgisi doldurulur |
| Anket yanı tı | Kullanı cı nı n önceki yanı tı varsa cevaplar güncellenir; yoksa yeni yanı t + `Responses + 1` ; anonimde `UserId` boş |
| Paylaşı m | İsteğe bağlı tek medya ya da 2– 6 seçenekli anket; yalnı z sahibi silebilir |
| Ankete oy | Seçenek ve toplam oy +1, `PollUserVoteId` = seçenek; tekrar oy UI'da engellenir |
| Doküman | Yüklemede görünen ad zorunlu (uzantı korunur); yayı na al/kaldı r = klasör taşı ma; silme toplu |
| Mesaj | Aynı kiracı daki aktif kullanı cı lara (en fazla 100 kişi listelenir); en fazla 10 ek; çevrimiçi durumu SignalR (`/messengerhub`) |
---
## 6. Yetki ve görünürlük
İzin grubu `App.Hr` , modül `Sas|Hr` . Kök `App.Hr.Intranet` ; her yönetim ekranı nı n kökü + standart alt
yetkiler (`.Create/.Update/.Delete/.Export/.Import`, ana ekranlarda `.Note` ). Duyuru, Anket, Sosyal
Paylaşı m ve Etkinlik ayrı ca ** `.Widget` ** taşı r — pano kutusunu görme yetkisidir. Dokümanlar:
`App.Hr.Intranet.Document` + `.Create` (yükle) / `.Update` (yayı na al/kaldı r) / `.Delete` .
Intranet Widgets: `App.DeveloperKit.IntranetWidgets` (+ CRUD). Hiçbir yetki role otomatik atanmaz.
Önerilen dağı tı m:
| Rol | Yetkiler |
| --- | --- |
| Tüm çalı şanlar | `AbpIdentity.Users.Widget` , `App.Files.Widget` , dört `.Widget` yetkisi, `App.Hr.Intranet.Document` (okuma); performans kutuları için `HrPerformance.md` §6 |
| İç iletişim | `App.Hr.Intranet` dalı nı n tamamı |
| Sistem yöneticisi | `App.DeveloperKit.IntranetWidgets` |
**Kontrol edilmeli — güvenlik:** `IntranetAppService` , `MessengerAppService` ve dosya yöneticisi servisi
yalnı z oturum ister (`[Authorize]`); `App.Hr.Intranet.*` yetkilerini sunucuda denetlemez. Pano
kutuları nı n yetkisi (`PermissionName`) sunucuda süzülür, doküman yetkileri ise **yalnı z arayüzde**
uygulanı r.
---
## 7. Entegrasyonlar
| Kaynak | Kullanı m |
| --- | --- |
| `AbpUsers` (+ departman, pozisyon) | Doğum günleri, yazar/kullanı cı kartları , mesajlaşma rehberi |
| Dosya yöneticisi / CDN (`intranet`, `intranet/_passive` ) | Doküman kütüphanesi ve pano doküman kutusu |
| Developer Kit › Custom Components | Custom pano kutuları |
| SignalR (`/messengerhub`) | Mesajlaşma ve çevrimiçi durumu |
| Organizasyon Şeması | Kullanı cı satı rları nda sosyal duvarı n `UserProfileCard` bileşenini kullanı r |
---
## 8. Akı ş örneği
1. İç iletişim **Duyurular** 'a "Yeni ofis açı lı şı "nı görsel ve HTML içerikle ekler, **sabitler** → panonun sağ kolonunda görünür.
2. **Anketler** 'de "Çalı şan Memnuniyet Anketi"ni anonim ve aktif açar; **Sorular** sekmesine puanlama, çoktan seçmeli (seçenekleriyle) ve metin soruları ekler.
3. Çalı şan panoda anketi doldurur, sonradan yanı tı nı günceller; İK **Yanı tlar** sekmesinden sonuçları görür (anonimde kişi boş).
4. **Etkinlikler** 'de "Jazz Akşamı " tarih, yer ve fotoğraflarla yayı nlanı r → "Yaklaşan Etkinlikler" kutusunda çı kar; çalı şanlar beğenir/yorumlar.
5. Çalı şan sosyal duvarda iki seçenekli bir anket paylaşı r; diğerleri oy verir.
6. Doküman sorumlusu "İzin Prosedürü.pdf"i yükler ve yayı na alı r → pano doküman kutusunda indirilebilir olur.
7. Sistem yöneticisi Intranet Widgets'a bir custom component'i (ör. kurum KPI kartı ) orta kolona ekler.
---
## 9. Sı k sorulanlar ve bilinen sı nı rlar
**Duyuru panoda görünmüyor.** Kutu yalnı z sabitlenmiş duyuruları (en fazla 3) gösterir; listelenmek için **Sabitle** işaretli olmalı .
**Süresi dolmuş duyuru/anket hâlâ görünüyor.** Sunucuda son tarih süzmesi yoktur; duyuru sabitlemesi kaldı rı lmalı , anket `passive` yapı lmalı dı r.
**Pano yerleşimim başka bilgisayarda yok.** Yerleşim tarayı cı da saklanı r.
**Pano kutusu görünmüyor.** Kayı t aktif olmalı ve kullanı cı da `PermissionName` yetkisi bulunmalı ; Custom kutuda bileşen aktif olmalı .
**Yanı tları mı değiştirebilir miyim?** Evet; anketi tekrar açı p kaydetmek önceki yanı tı günceller.
Kontrol edilmeli (koddan tespit edilenler):
- Ankete oy sunucuda kullanı cı bazı nda tutulmaz (`PollUserVoteId` tek kolon); aynı kullanı cı API'yi doğrudan çağı rarak tekrar oy verebilir.
- `SocialPost.IsLiked` beğenen son kullanı cı ya göre veritabanı na yazı lı r; listelerken sunucu kullanı cı ya göre yeniden hesaplar.
- Duyuru modalı ndaki ekler bölümü dizi bekler, `Attachments` metindir; ekler görünmeyebilir.
- Anket entity açı klaması `draft|active|closed` der, ekran `active|passive` sunar.
- Sosyal paylaşı mda yüklenen medya base64 olarak veritabanı na yazı lı r; büyük dosyalar tabloyu büyütür.
- `Hr_T_EventPhoto` tablosu ve `sql/object/Hr_T_EventPhoto.sql` yoktur (referans dokümanda geçer); etkinlik fotoğrafları `Hr_T_Event.Photos` kolonundadı r.
---
## 10. Dosyalar
| Dosya | İçerik |
| --- | --- |
| `api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Hr.cs` | Yönetim ekranları |
| `api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Saas.cs` | Intranet Widgets ekranı |
| `api/src/Sozsoft.Platform.Domain/Entities/Tenant/Hr/Intranet/*.cs` , `Entities/Tenant/Administration/IntranetWidget.cs` , `Entities/Tenant/Messenger*.cs` | Entity'ler |
| `api/src/Sozsoft.Platform.Application/Intranet/IntranetAppService.cs` , `Messenger/MessengerAppService.cs` | Servisler |
| `ui/src/views/intranet/Dashboard.tsx` , `widgets/*` , `SocialWall/*` , `documents/IntranetDocuments.tsx` | Pano, kutular, sosyal duvar, doküman sayfası |
| `ui/src/components/template/MessengerWidget.tsx` | Mesajlaşma penceresi |
2026-10-05 12:58:59 +00:00
| `configs/seeds/data/App.Hr.Intranet.*.json` , `App.DeveloperKit.IntranetWidgets.json` | Örnek veri ve pano kutuları |
2026-10-04 15:04:16 +00:00
Örnek veri:
- 5 duyuru (3'ü sabitlenmiş).
- 3 anket, 10 soru ve 13 seçenek.
- 6 paylaşı m: 4 medya (2 resim, 1 video, 1 anket), 8 yorum.
- 50 etkinlik türü, 5 kategori, 3 etkinlik ve 9 yorum.