e-Arşiv Fatura uygulamasını neden ve nasıl geliştirdik
Serbest çalışan biri için fatura kesmek çoğu zaman işin en sıkıcı kısmıdır: bilgisayarı açmak, GİB’in e-Arşiv portalına girmek, aynı müşteri bilgilerini yeniden yazmak, KDV’yi elle kontrol etmek. e-Arşiv Fatura uygulamasını bu adımları telefona, birkaç ekrana indirmek için geliştirdik. Bu yazıda neden yola çıktığımızı, hangi kararları neden verdiğimizi ve yolda nelerle uğraştığımızı anlatıyoruz.
- Kimin için
- Serbest çalışanlar, küçük işletmeler ve mali müşavirler
- Ne yapar
- GİB e-Arşiv portalı üzerinden telefondan e-arşiv faturası düzenler
- Teknoloji
- React Native ve Expo (iOS ve Android için tek kod tabanı)
- Durum
- Yayına hazırlanıyor
Gördüğümüz sorun
e-Arşiv faturası, Gelir İdaresi Başkanlığı’nın (GİB) sisteminde kayıtlı, elektronik ortamda düzenlenen faturadır. Küçük işletmelerin ve serbest çalışanların önemli bir kısmı bu faturaları GİB’in ücretsiz e-Arşiv portalından keser. Portal işini yapar, ama masaüstü için tasarlanmıştır: telefondan kullanmak zordur, her faturada alıcı bilgisi yeniden girilir, son adımda gelen SMS doğrulaması da akışı bölebilir.
Bizim hedefimiz yeni bir fatura sistemi icat etmek değildi. Uygulama, faturayı yine GİB’in e-Arşiv portalı üzerinden düzenler; yani fatura GİB’in kendi sistemine kaydolur. Biz yalnızca bu portalın önüne, telefonda rahat kullanılan bir arayüz ve günlük işleri kolaylaştıran araçlar koyduk. Bu ayrım önemli: uygulama GİB tarafından verilmiş bir onay ya da sertifika iddiasında bulunmaz; kullanıcının kendi portal hesabıyla, kendi adına işlem yapar.
Neden tek kod tabanı seçtik
Küçük bir ekip olarak iOS ve Android için iki ayrı uygulama yazıp bakımını yapmak bize uygun değildi. React Native ve Expo ile tek kod tabanından iki platforma da uygulama çıkarabiliyoruz. Ekranlar arası geçiş için dosya tabanlı yönlendirme (her ekranın bir dosya olduğu düzen) kullandık; uygulamanın verisini ise cihazda tutan küçük, bağımsız “depolar” hâlinde düzenledik: müşteriler, ürünler, faturalar, ayarlar ayrı ayrı.
Fatura akışı: üç adım
Fatura kesmeyi bilerek üç ekranla sınırladık:
- Alıcıyı seç. Müşteri bir kez kaydedilir, sonraki faturalarda listeden seçilir.
- Kalemleri ekle. Ürün ya da hizmet, miktar, birim fiyat, KDV oranı, iskonto; gerekiyorsa döviz ve tevkifat.
- Önizle ve gönder. Toplamlar son kez gösterilir, fatura GİB’e iletilir ve SMS ile onaylanır.
Onaylanan fatura cihazdaki arşive düşer, istenirse PDF olarak paylaşılır. Aynı ekranlardan GİB’deki gelen faturalar da görüntülenebilir ve gönderilmiş bir fatura için iptal süreci takip edilebilir.
En çok uğraştığımız yerler
SMS doğrulama akışı
Portalda faturayı kesinleştirmek için telefona gelen SMS koduyla onay vermek gerekir. Bunu uygulamaya taşırken, adımların sırasının önemli olduğunu gördük: önce hesaba kayıtlı telefon numarası sorgulanmalı, ardından kod bu numaraya gönderilmeli. Bu sırayı atladığımızda bazı hesaplarda kod hiç gelmiyordu. Ayrıca GİB, faturanın benzersiz kimliğini (ETTN) artık kendisi üretiyor; bu yüzden gönderim öncesi ve sonrası taslak listesini karşılaştırarak yeni oluşan faturayı doğru şekilde buluyor, SMS onayını o faturaya bağlıyoruz.
Geçici sunucu hataları ve oturum süresi
Portal zaman zaman geçici hata dönebiliyor. Uygulama bu durumda birkaç saniye arayla sınırlı sayıda yeniden dener; olmazsa kullanıcıya “biraz sonra tekrar deneyin” der. Portal oturumları da belli bir süre sonra düşüyor. Oturumu, bu süre dolmadan önce yenilenecek şekilde, güvenli bir payla yönetiyoruz. Böylece kullanıcı fatura ortasında beklenmedik bir “oturum kapandı” hatasıyla karşılaşmıyor.
Satır bazlı KDV yuvarlaması
Kuruş farkları faturada en can sıkıcı hatalardandır. Toplam tutar üzerinden tek seferde KDV hesaplamak ile her satırın KDV’sini ayrı hesaplayıp yuvarlamak farklı sonuçlar verebilir. Uygulamada KDV’yi her satır için, iskonto düşüldükten sonra hesaplayıp iki haneye yuvarlıyor, toplamı bu satırlardan oluşturuyoruz. Böylece ekranda gördüğünüz toplam ile GİB’e giden tutar aynı kalıyor. Fiyatın KDV dahil girildiği durumlar da ayrıca ele alınıyor.
Tevkifat
Tevkifat, KDV’nin bir kısmının faturayı kesen yerine alıcı tarafından beyan edildiği durumdur. Oran “onda” şeklinde ifade edilir; örneğin 9/10 tevkifatta KDV’nin yüzde 90’ı alıcıya kalır. Uygulamada tevkifat oranı ve kodu satır bazında girilebiliyor; hesaplanan KDV, tevkif edilen KDV ve ödenecek KDV ayrı ayrı gösteriliyor. Hangi işte hangi oranın uygulanacağı ise kullanıcının ya da müşavirinin kararı; uygulama bu konuda yorum yapmıyor, yalnızca hesabı doğru kuruyor.
Günlük işi kolaylaştıran özellikler
- Pazaryeri siparişlerinden fatura. Trendyol, Hepsiburada, n11, Amazon Türkiye, Pazarama, Çiçeksepeti, MediaMarkt, Teknosa ve PttAVM hesapları bağlanarak siparişler uygulamaya çekilebiliyor. Siparişler tek tek ya da toplu faturalanabiliyor; faturalanmış siparişler işaretleniyor, bağlantı sorunu yüzünden gönderilemeyenler bir kuyrukta bekletiliyor.
- Tekrarlayan faturalar. Her ay aynı müşteriye aynı hizmeti faturalayanlar için düzenli fatura tanımı yapılabiliyor.
- Hazır notlar ve varsayılanlar. Sık kullanılan fatura notları ve varsayılan fatura ayarları bir kez kaydediliyor.
- Vergi takvimi ve bildirimler. Önemli tarihler için hatırlatmalar alınabiliyor.
Müşavir modu
Görüşmelerde sık duyduğumuz bir ihtiyaç, mali müşavirlerin birden fazla mükellefi tek yerden izlemek istemesiydi. Bunun için uygulamaya bir müşavir modu ekledik. Müşavir, mükelleflerini profil olarak ekliyor ve aralarında geçiş yapıyor; her mükellefin verisi cihazda ayrı bir alanda, diğerlerinden yalıtılmış olarak tutuluyor. Mükelleflere not eklenebiliyor, durumları (aktif, pasif, gecikmiş, beyanname gönderildi gibi) işaretlenebiliyor, KDV beyanı için bir özet ekranı ve toplu içe aktarma bulunuyor.
Bilerek ertelediğimiz bir şey de var: tüm mükelleflerin istatistiklerini tek ekranda birleştirmek. Veriler mükellef başına ayrı tutulduğu için bunu doğru yapmak, ayrı bir birleştirme katmanı gerektiriyor. Yalıtımı bozacak bir kestirme yerine bu işi ilerideki bir sürüme bıraktık.
Güvenlik ve yedekleme
Fatura uygulaması, kullanıcının vergi bilgilerine ve portal şifresine dokunur. Bu yüzden baştan birkaç kural koyduk:
- Uygulamanın cihazda tuttuğu veriler şifrelenerek saklanıyor.
- GİB şifresi cihazın güvenli deposunda duruyor ve yedek dosyalarına hiçbir zaman yazılmıyor; yedekte şifrenin yerinde yalnızca bir maske bulunuyor.
- İsteğe bağlı olarak uygulama Face ID, Touch ID ya da parmak iziyle kilitlenebiliyor.
- Her kullanıcı profili ayrı bir depolama alanında tutuluyor.
Telefon kaybolursa veriler de kaybolmasın diye otomatik yedekleme ekledik: iOS’ta iCloud, Android’de Google Drive kullanılıyor; yedekleme sıklığı günlük, haftalık ya da aylık seçilebiliyor. Yedekten geri dönüldüğünde şifre yedekte olmadığı için, cihazda kayıtlı şifre korunuyor; cihazda yoksa şifrenin yeniden girilmesi gerekiyor.
Ücretsiz ve premium kullanım
Uygulamanın temel fatura kesme özelliğini ücretsiz sunmayı, belli bir aylık sınırın üzerindeki kullanımı ve bazı gelişmiş özellikleri (ör. otomatik bulut yedekleme) premium abonelikle açmayı planlıyoruz. Ücretsiz kullanıcılar reklam izleyerek ya da bir arkadaşını davet ederek ek fatura hakkı da kazanabilecek. Kesin sınırları yayınla birlikte uygulama sayfasında paylaşacağız.
Şu an neredeyiz
Uygulama yayına hazırlanıyor. iOS ve Android dağıtımı için son adımlar üzerinde çalışıyoruz; mağazalarda yer aldığında uygulama sayfasından duyuracağız. Bu süreçte GİB’in e-Arşiv portalı her zamanki gibi kullanılabilir; uygulama da zaten bu portalın üzerinde çalışıyor.
Uygulamanın özelliklerine e-Arşiv Fatura sayfasından bakabilirsiniz. Kendi işiniz için benzer bir mobil uygulama ya da GİB entegrasyonu düşünüyorsanız bize yazın; neyin mümkün olduğunu birlikte konuşalım.