docs: function f_kalem_guncelle(_tahta_id, _ihale_id, _es_kalem, _db_kalem, _kul_id) {
  
          // region NOTLAR
          /*
           HASH LOGLAR
           * ID
           * LOG:SATIR:1 x
           * SATIR:1 xx
           * SATIR:1 xxx
           *
           *
           *
           * HASH kalem
           * -- Ekleniyor --
           * incr idx:kalem                                                        -> id olarak 1 versin
           * hset kalem | 1 | {.....}                                              -> hset ile HASH içine ekle
           * zadd ihale:1:satirlari:eklenen | 143123123 | 1                        -> eklendiği tarihle EKLENENLERE yaz ki aktif SATIRLAR bulunabilsin
           * sadd LOG:kalem:1 | {kullanici:132, tarih:143123123, nesne:{.....} }   -> log oluştur
           * -- Güncelleme geldi --
           * hset kalem | 1 | {.....}
           * sadd LOG:kalem:1 | {.....}
           * -- Silinecek --
           * zadd ihale:1:satirlari:silinen | 143126663 | 1
           * sadd LOG:kalem:1 | {.....}
           *
           * SET LOG:SATIR:1
           * {kullanici:12, tarih:23423423, metin:'ihale eklendi' nesne:obje}
           * obje2
           * obje3
           *
           * ZSET LOG:SATIR:1
           * tarih   obje
           * tarih1  obje2
           * tarih2  obje3
           *
           *
           * kullanici:1:haberleri:eklenen
           * {tarih:23423423, metin:'Yeni ihale eklendi' nesne:null, referans_id:'ihale:19'} > <a href="#ihale/19">Yeni ihale eklendi</a>
           * {tarih:23423423, metin:'{this.nesne.konusu} başlıklı ihale eklendi' nesne:{id:19, konusu:....}, referans_id:'ihale:19'} > <a href="#ihale/19">Yeni ihale eklendi</a>
           * **/
          // endregion
  
          var onay_durumu = _es_kalem.OnayDurumu,
              orjinal_kalem_id = _db_kalem.Id;
  
          /**
           * Genel kalem ise yeni kalem eklenir
           * @returns {*}
           */
          function f_genel_kalem_guncelle() {
              return result.dbQ.incr(result.kp.kalem.idx)
                  .then(function (_id) {
                      _es_kalem.Id = _db_kalem.Id = _id;
                      _db_kalem.Orjinal_Id = _es_kalem.Orjinal_Id = orjinal_kalem_id;
  
                      emitter.emit(schema.SABIT.OLAY.KALEM_GUNCELLENDI,
                          {
                              tahta_id: _tahta_id,
                              yeni_kalem: _es_kalem,
                              orjinal_kalem_id: orjinal_kalem_id,
                              ihale_id: _ihale_id,
                              kul_id: _kul_id
                          });
  
                      return result.dbQ.hset(result.kp.kalem.tablo, _db_kalem.Id, JSON.stringify(_db_kalem))
                          .then(function () {
  
                              //onay durumları ile ilgili işlemleri tamamlayacağız
                              //satırın onay durumunu eski listeden kaldırıp yenisine ekliyoruz
                              //örneğin katılıyoruz (2) demişti sadd tahta:401:durum:2 201 setine eklemiştik
                              //sonra gitti itiraz edilecek (3) dedi bu durumda önce gidip katılıyoruz listesinden kaldırıyoruz
                              //srem tahta:401:durum:2 201
                              return f_kalem_onay_durumu(orjinal_kalem_id, _tahta_id)
                                  .then(function (_dbDurum) {
                                      if (_dbDurum != null) {
                                          //eski satıra ait onay durum bilgileri vars siliyoruz
                                          return result.dbQ.Q.all([
                                              result.dbQ.srem(result.kp.kalem.ssetOnayDurumlari(_tahta_id, _dbDurum.Id), orjinal_kalem_id),
                                              result.dbQ.hdel(result.kp.tahta.hsetKalemOnayDurumlari(_tahta_id), orjinal_kalem_id)
                                          ]);
                                      }
                                      else {
                                          return _db_kalem;
                                      }
                                  });
                          })
                          .then(function () {
                              //genel kalemi tahtanın ezilen kalemlerine ekliyoruz
                              //tahtanın özel kalemlerine ekliyoruz
                              //kalem onay durumları setine ekliyoruz
                              return result.dbQ.Q.all([
                                  result.dbQ.sadd(result.kp.tahta.ssetEzilenKalemleri(_tahta_id), orjinal_kalem_id),
                                  result.dbQ.sadd(result.kp.tahta.ssetOzelKalemleri(_tahta_id, _ihale_id, true), _id)
                              ]);
                          })
                          .then(function () {
                              //satırın onay durumlarını düzenle
                              return f_kalem_onay_durumu_guncelle(_tahta_id, _ihale_id, _db_kalem.Id, onay_durumu);
                          })
                          .then(function () {
                              //satıra verilen teklifler ile tahtada verilen tekliflerin kesişimini bulup
                              //gelen kayıtları yeni satır id ile ilişkilendiriyoruz
                              return result.dbQ.sinter(result.kp.kalem.ssetTeklifleri(orjinal_kalem_id), result.kp.tahta.ssetTeklifleri(_tahta_id, true))
                                  .then(function (_iTeklif_idler) {
                                      if (_iTeklif_idler && _iTeklif_idler.length > 0) {
  
                                          var arrPromises = _.map(_iTeklif_idler, function (_teklif_id) {
                                              return result.dbQ.Q.all([
                                                  result.dbQ.sadd(result.kp.kalem.ssetTeklifleri(_db_kalem.Id), _teklif_id),
                                                  result.dbQ.srem(result.kp.kalem.ssetTeklifleri(orjinal_kalem_id), _teklif_id),
                                                  result.dbQ.hset(result.kp.teklif.hsetKalemleri, _teklif_id, _db_kalem.Id)
                                              ]);
                                          });
  
                                          return result.dbQ.Q.all(arrPromises);
                                      }
                                      return _db_kalem.Id;
                                  });
                          })
                          .then(function () {
                              return f_kalem_id(_db_kalem.Id, _tahta_id);
                          });
                  });
          }
  
          /**
           * Tahtaya ait özel kalem güncellenir.
           * @returns {*}
           */
          function f_ozel_kalem_guncelle() {
              emitter.emit(schema.SABIT.OLAY.KALEM_GUNCELLENDI,
                  {
                      tahta_id: _tahta_id,
                      yeni_kalem: _es_kalem,
                      orjinal_kalem_id: orjinal_kalem_id,
                      ihale_id: _ihale_id,
                      kul_id: _kul_id
                  });
  
              //özel kalem bilgisinde hash sadece güncellenir
              return result.dbQ.hset(result.kp.kalem.tablo, _db_kalem.Id, JSON.stringify(_db_kalem))
                  .then(function () {
                      //onay durumları ile ilgili işlemleri tamamlayacağız
                      //satırın onay durumunu eski listeden kaldırıp yenisine ekliyoruz
                      //örneğin katılıyoruz (2) demişti sadd tahta:401:durum:2 201 setine eklemiştik
                      //sonra gitti itiraz edilecek (3) dedi bu durumda önce gidip katılıyoruz listesinden kaldırıyoruz
                      //srem tahta:401:durum:2 201
                      //onay durumu varsa güncelle yoksa satırı döner
                      return f_kalem_onay_durumu_guncelle(_tahta_id, _ihale_id, _db_kalem.Id, onay_durumu)
                          .then(function () {
                              return f_kalem_id(_db_kalem.Id, _tahta_id);
                          });
                  });
          }
  
          return f_kalem_genel_kontrol(orjinal_kalem_id)
              .then(function (_iGenel) {
                  if (_iGenel == 1) {
                      //genel kalem ezilir
                      return f_genel_kalem_guncelle();
  
                  } else {
                      return f_ozel_kalem_guncelle()
                  }
              });
      }