İnternet Girişimleri için Amortisman ve Demirbaş Olayları

Önceki yazımda girişimler için, işletmeye demirbaş kaydedilerek gelir vergisi üzerinden amortisman düşülebilecek bir kaç ana kalemden bahsetmiştim. Gelir İdaresi Başkanlığının yayınladığı amortisman oranları listesini inceledikten sonra ~30 kalemlik, girişimlerin işine yarayacak bir amortisman listesi özeti çıkardım. Hem ofis ihtiyaçları, hem elektronik ve dijital ihtiyaçları içeren liste şu şekilde,

Açıklama Faydalı Ömür (Yıl) Amortisman (Yıllık Yüzde)
İşyerinde Kullanılan Mobilyalar, Ekipmanlar ve Diğer Demirbaşlar: Bu sınıf, masa,
mobilya, sandalye, banko, kontuar, dolap ve ofiste kullanılan iletişim araçları gibi
kıymetler ile işletmelerde müşteriler için tahsis edilen oturma gruplarını kapsar.
(Başka bir sınıflamada yer alan iletişim araçları hariç)
5 20.00%
Televizyonlar 5 20.00%
Cep telefonu ve cep telefonu araç kiti 3 33.33%
Pencere, duvar ve salon tipi klima cihazları 15 6.67%
Buzdolabı, derin dondurucu ve bunlara benzer soğutma dolapları 10 10.00%
Kesintisiz güç kaynakları (Statik ve dinamik UPS) 10 10.00%
Perde, güneşlik, store ve teferruatı ve benzerleri ile yatakhane ve yemekhane
eşyası
5 20.00%
POS cihazları 5 20.00%
Fotoğraf makineleri ve kamera 5 20.00%
Teleks ve data modem cihazları, data terminal ara birim
cihazları, interaktif telekontrolsistemleri, network yan bileşenleri, veri iletişim
sistemleri, plaka tanıma sistemi v.b.
5 20.00%
Telsiz telefon, telsiz telgraf veya radyo yayını alıcı cihazlar ve bunlara ait sistemler 10 10.00%
Video kayıt ve gösterme cihazları, müzik seti, dijital ve diğer ses kaydediciler, amplifikatör, ekolayzır, ses mikser cihazları, uydu antenleri ve uydu alıcı cihazları, uzaktan kumanda cihazlar v.b. 5 20.00%
Projeksiyon cihazları, slayt makinesi, tepegöz, sinema film makinesi, video konferans cihazı, stüdyo tipi veya mobil olarak kullanılan alıcı cihazları v.b. 5 20.00%
Bilgi işlem makinelerinde kullanılan ses, TV, radyo ve görüntü faks modemleri 5 20.00%
Gaz, yangın, güvenlik ve benzeri amaçlarla kullanılan alarm cihazları 8 12.50%
Süs bitkileri 5 20.00%
Su arıtma cihazları 5 20.00%
İşletmelerde kullanılan el, yüz ve banyo havluları, yatak çarşafları ve yastık kılıfları, masa örtüleri, plato ve her nevi peçeteler ve benzerleri 2 50.00%
Kişisel bilgisayarlar, el bilgisayarları (PDA), sunucu bilgisayarlar (Server) 4 25.00%
Bilgisayar Donanımları: Kart okuyucular, kart deliciler, kart seçiciler, manyetik
teyp üniteleri, yüksek hızlı yazıcılar, optik karakter okuyucular, yüksek saklama
kapasitesine sahip üniteler, kağıt bant donanımı, kağıt ve bantlara bilgi kaydeden
klavyeli makineler, yazıcılar, terminaller, teyp sürücüleri, disk sürücüleri, görsel
imaj koruyucu tüpleri ve benzeri araçlar (Eğlence amaçlı kullanılan ekipmanlar bu
sınıfa girmez)
4 25.00%
Bilgisayar yazılımları 3 33.33%
Router (yönlendirici), swicth (anahtarlama birimi), data kablolaması ve bağlantı
elemanları, UPS kablolama ve bağlantı elamanları
5 20.00%
Elle Veri İşlenen Araçlar: Daktilo, hesap makinesi, para sayma makineleri, fotokopi makineleri, faks cihazları, kopyalayıcı ekipmanlar ve benzerleri 5 20.00%
Otomobiller ve taksiler (Jipler ve arazi taşıtları dahil) 5 20.00%
Motosikletler (Mopedler ve Triportörler dahil) 4 25.00%
Bisikletler ve at arabaları 4 25.00%
Uçak ve helikopterler 10 10.00%
Tanıtım ve Dağıtımla İlgili Ticari Faaliyet ve Hizmetler 10 10.00%
Gayri Maddi İktisadi Kıymetler: İmtiyaz hakları (Franchising), patent, formül,
dizayn, örnek kalıp, teknik bilgi (Know-how), format, telif hakkı ve benzeri
kalemler, lisans, kullanım hakkı ve izni veya devlet kurum ve kuruluşları
tarafından verilen diğer haklar (İşletme hakkı gibi) ve bunların benzerleri
15 6.67%
Reklam panoları ve billboardlar (ışıklı) 5 20.00%
Reklam panoları ve billboardlar (Işıksız) 10 10.00%
Araştırma-Geliştirme harcamaları [** Mükelleflerin 5520 sayılı Kurumlar Vergisi ve 193 sayılı Gelir Vergisi Kanunlarında yer alan, “mükelleflerin işletmeleri bünyesinde gerçekleştirdikleri münhasıran yeni teknoloji ve bilgi arayışına yönelik araştırma ve geliştirme harcamaları” kapsamında işletmeleri bünyesinde
gerçekleştirdikleri araştırma ve geliştirme faaliyetleri neticesinde, gayri maddi hak niteliğinde aktifleştirilmesi gereken bir kıymete ulaşılması halinde, gayrimaddi hakka yönelik olarak yaptıkları araştırma ve geliştirme harcamaları bu sınıf uyarınca itfa edilecektir. Ancak, mezkur
Kanunlar kapsamında ar-ge faaliyeti olarak değerlendirilmeyen, mükelleflerin işletmeleri bünyesinde gerçekleştirmedikleri, dışarıdan hizmet satın alma yoluyla veya benzeri şekilde gerçekleştirdikleri gayri maddi hakka yönelik harcama tutarları, iktisap edilen veya yapılan araştırmalar
sonucu ortaya çıkan kıymetin niteliğine göre (patent, formül, dizayn, örnek kalıp vb.), 339 ve 365 Sıra Numaralı Vergi Usul Kanunu Genel Tebliğleri ile değişik 333 Sıra Numaralı Vergi Usul Kanunu Genel Tebliği ekindeki listenin “55. Gayri Maddi İktisadi Kıymetler” sınıfı uyarınca itfa
edilecektir.]
5 20.00%

İşe helikopterle giden girişimcilerin İstanbul’daki varlığını da hesaba katınca, listede yer vermeden duramadım.

 

Muhasebe ve Finans Bilmeyen Girişimcilere Altın Öğretiler

Muhasebe ve finans cahili bir girişimciyim. Bu yüzden ki, yaklaşık üç yıldır neredeyse hiçbir masrafını vergiden düşmemiş %95+ karlı bir işletme sahibiyim. Ödediğim vergilere bakınca kafamı vuracak duvar arıyorum. Zira, can yakıcı boyutlara ulaşmış vergi tahakkuklarıyla geleneksel olarak, aylık kdv ve üçer aylık geçici vergi dönemlerinde cebelleşip duruyorum. Canıma tak eden bir dizi olay sonucunda, işe el atıp nedir/ne değildirlere giriştim. Altın değerindeki kurallar ve faydalar şu şekilde,

  • Halkbank Kobi, demirbaş/hammadde alımlarında 30.000 TL’ye kadar işletmelere %0 faizli kredi veriyor. Tek yapmanız gereken Esnaf Odası sicil belgeniz ve vergi levhanızla başvurmak.
  • İşinizde kullanacağınız bilgisayarı demirbaş olarak aldığınızda %18 KDV ödemenizden ve %20 gelir verginizden düşülüyor. Buraya kadar bildiğimiz kısmı. Çoğunlukla bilmediğimiz kısmı ise devam eden dört yıl boyunca daha gelir vergisinden %20 amortisman düşerek, 5 sene sonunda bilgisayarınızın tamamını vergilerle ödemiş oluyorsunuz.
  • Cep telefonunu da demirbaş olarak kaydettiğinizde amortisman durumu geçerli oluyor. 3 sene boyunca %33.3 amortisman hakedişi var. Ancak Büyük Mükellefler VD’nin özelgesine göre 4 sene ve %25.
  • Ofis masası, koltuğu aynı şekilde demirbaş olarak kaydedilebiliyor.
  • Yemek kartlarını (ticket, sodexo, multinet, setcard.. vs) bir kişi için dahi alabiliyorsunuz. Bu da, yediğiniz içtiğiniz (tabii ki kartın geçerli olduğu noktalardaki, şanslıysanız geçerli olduğu marketlerdeki) her şeyin verginizden düşmesi anlamına geliyor.
  • Yurtdışı harcamalarını, KDV-2 beyannamesi ile girerek, KDV’sini ödüyorsunuz ve böylece masraf kalemlerinize dahil edebiliyorsunuz. Facebook reklamları, Google İşletme hizmetler, AWS, DigitalOcean.. vs. gibi tüm harcamalarınızı bu kaleme dahil edebiliyorsunuz. Çıkan KDV, ödeyeceğiniz toplam KDV’den ay sonu hesabında aynı yurt içi harcamalarında olduğu gibi düşüyor.
  • Ola ki yaparsanız, Bağkur ödemeleriniz de aynı şekilde gelir verginizden senelik olarak düşüyor.
  • Bireysel emeklilik ödemelerini taze araştırıyorum. Güncelleyeceğim.

Sağlıcakla ve kârlılıkla kalın.

Block Disposable Emails with Symfony, Doctrine and MongoDB

If you want your users to use their real email addresses when registering to your app, there are a few ways to do this. The most effective way to do this is sending a confirmation email and after activating their accounts. And also, if you want to make some validations before sending activation email you can use MX records validation or host validation of domain with using Symfony’s email validator.

But even if the given email is valid and confirmation email reaches the user, you may also want your users to use their real email addresses. One way to increase the possibility of real email addresses is to block disposable email providers. In this post I will try to explain how to block disposable email addresses on your forms with Symfony.

What we need

  • Symfony
  • FoS User Bundle
  • Doctrine ODM
  • DoctrineFixturesBundle

The steps we will follow

  1. Create Doctrine documents
  2. Load disposable domains to MongoDB
  3. Create a custom email validator
  4. Define our custom email validator as service (we need this to connect MongoDB from validator)
  5. Add our validation rule to our form

1. Create Doctrine Documents

We will use MongoDB to check if user’s email domain is in our list. So, we need to create the Document.

And create getters and setters with running this command:

2. Load Disposable Email Domains to MongoDB

We will use DoctrineFixturesBundle to load our domain data. If you don’t have this bundle or don’t know about it, you can read about it here.

We will first get the domain list from this gist and load it to our disposable_email_domains collection in MongoDB.

3. Create Custom Email Validator

You can learn more about custom validators in Symfony here. We will split user’s email address from “@” symbol and check if the domain is in our list. Since we have our list on MongoDB, we need to use Doctrine. So, to provide Doctrine dependency to our custom validator we need to define our validator as service. I will explain this next step.

Let’s create our Custom Email Constraint

And here’s our validator

4. Define our custom email validator as service

As I mentioned before, custom validators don’t support dependencies. To provide our Doctrine dependency we need to define our validator as service.

5. Add disposable email blocker to forms

Finally, add custom email validator to all forms you ask for email address. Here’s how to apply it to my registration form. It only has email and password fields.

The trick is to add our custom validator’s namespace and add the validator to email address field’s annotation

And again, create getters and setters:

Regex Password Strength Chek

We always need our users to create strength passwords. To check their password if it’s strength with regular expressions is very easy.

Here are the explanations,

  • (?=.*[A-Z]) check for uppercase letters
  • (?=.*[!@#$&*]) check for special characters
  • (?=.*[0-9]) check for digits
  • (?=.*[a-z]) check for lowercase letters
  • {8,50} length must be at least 8 characters and max 50 characters long

If you don’t want to check length, change {8,50} to asterisk character. Or if you don’t want some parts of the regex, just remove it. Others will still work.

Inspired from: http://stackoverflow.com/questions/5142103/regex-to-validate-password-strength

Change Symfony Form Theme including FOSUserBundle’s

I’m new to Symfony and I was playing with FOSUserBundle for user management. It makes everything about user management like login, register, profile pages and password reset operations really easy. But the forms are not looking good. I implemented FOSUserBundle’s forms into my project’s theme but it was still looking bad. I even tried to create every input with hand in a static twig layout but it was a total disaster. It’s obviously the worst option. So after digging in documents I got it’s really easy to make Symfony forms have a better look.

Symfony has built-in support for Bootstrap 3 and Foundation Framework. You have other customization options but I prefer to change form theme application-wide. Just add the code below to your app/config/config.yml and your forms will be generated compatible with Bootstrap 3.

Look here for other options and layout-specific customizations: http://symfony.com/doc/current/cookbook/form/form_customization.html#what-are-form-themes

AWS, DigitalOcean User Data for Apache, PHP, MongoDB, Git

User Data

I’m using user data scripts for both my AWS servers and DigitalOceal servers. Even if I only need to install a few thing, I use user data not to lose time for installing process. Here is the user data that I mostly use.

Install PHP – MongoDB Driver Ubuntu 14.04 LTS

Details for AWS

Details for DigitalOcean

Using MongoDB Embedded Documents in Symfony with Doctrine

I’m using embedded documents to handle team accounts. We have a main team account information and also team members’ information in a sub-array of same document. We aim to log users in with using company’s username/password or their own username/password.

You need to be familiar with those to understand the concept

  • MongoDB
  • Embedded Documents
  • Symfony
  • Doctrine ODM

Data

Here is an example user document structure,

 

We will use Doctrine MongoDB Bundle to use MongoDB with Symfony. So if you have not installed it follow steps here: http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html

User Document Class

We need to create a document class which describes our MongoDB document. This will hold our data for our operations. And we also use automatically generated get() and set() methods for the values which we have in our document class. In short, create your MongoDB document as a PHP class with needed defining (annotations) for data types, or other options.

TeamMembers Embedded Document Class

After creating our main document’s class and point the embedded document class, we need to create TeamMembers class as same as our User class.

Getters and Setters

To generate get and set methods for our document classes, run this command in your Symfony directory.

This will update our src/MyProjectBundle/Document/TeamMembers.php and src/MyProjectBundle/Document/User.php classes with generated get and set methods. Annotations will also be generated with methods.

Here is a few examples for getter and setter methods,

Controller

To create a new document with its embedded document, we need to create new object for each one and use set() methods to set their values. After that we need to combine them with add method.

Create new document

Get document

Full controller

 

Example might not work as expected. Use it as draft.

Hello world!

Sorun şu ki,
Teknoloji yazılarının ömrü yeni versiyonu çıktığında doluyor.
Yemek yazılarının ömrü senden sonraki müşterinin yaşadığı deneyimle doluyor.

Bugün hiç kimse MongoDB 2.6’nın kurulum notlarını aramıyor. Yarın hiç kimsenin 3.2’yi aramayacağı gibi.

Haliyle, teknoloji veya deneyim yazarak işe yaramak zor.

Çözüm şu olabilir,
Her şeyi versiyonlayarak mümkün mertebe geriye dönerek güncelleme yaparsak, hem hızlı tükenen ve değişen bilgiyi, hem de deneyimi işe yarar halde tutabiliriz. Bunu yapabildiğimiz hibrit yapılı wiki-blog mantığı, algısı ve mimarisine ihtiyacımız var.

Velhasıl, denemeye değer.