{"id":16409709,"url":"https://github.com/mlevent/fatura","last_synced_at":"2025-04-04T07:05:53.983Z","repository":{"id":63652252,"uuid":"569554969","full_name":"mlevent/fatura","owner":"mlevent","description":"GİB e-Arşiv Portal e-Fatura, e-SMM, e-Müstahsil Oluşturucu","archived":false,"fork":false,"pushed_at":"2024-10-01T08:10:10.000Z","size":310,"stargazers_count":92,"open_issues_count":2,"forks_count":21,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-10-12T06:21:18.725Z","etag":null,"topics":["e-arsiv","e-fatura","earsiv","efatura","fatura","laravel","php"],"latest_commit_sha":null,"homepage":"https://mlevent.github.io/fatura","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mlevent.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-23T04:54:01.000Z","updated_at":"2024-10-11T16:51:41.000Z","dependencies_parsed_at":"2024-10-25T23:52:52.603Z","dependency_job_id":null,"html_url":"https://github.com/mlevent/fatura","commit_stats":{"total_commits":55,"total_committers":3,"mean_commits":"18.333333333333332","dds":"0.18181818181818177","last_synced_commit":"1000e9f768460c8d3f15c7c44387bb4258abf4a3"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlevent%2Ffatura","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlevent%2Ffatura/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlevent%2Ffatura/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlevent%2Ffatura/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mlevent","download_url":"https://codeload.github.com/mlevent/fatura/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247135143,"owners_count":20889420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["e-arsiv","e-fatura","earsiv","efatura","fatura","laravel","php"],"created_at":"2024-10-11T06:21:13.948Z","updated_at":"2025-04-04T07:05:53.959Z","avatar_url":"https://github.com/mlevent.png","language":"PHP","readme":"\u003ch1 align=\"center\"\u003e🧾 Fatura\u003c/h1\u003e\n\u003cp align=\"center\"\u003eGİB e-Arşiv portal üzerinde; e-Fatura, e-SMM, e-Müstahsil oluşturma, düzenleme, imzalama vb. işlemlere olanak tanır.\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://img.shields.io/packagist/dependency-v/mlevent/fatura/php?style=plastic\"/\u003e\n\u003cimg src=\"https://img.shields.io/packagist/v/mlevent/fatura?style=plastic\"/\u003e\n\u003cimg src=\"https://img.shields.io/github/last-commit/mlevent/fatura?style=plastic\"/\u003e\n\u003cimg src=\"https://img.shields.io/github/issues/mlevent/fatura?style=plastic\"/\u003e\n\u003cimg src=\"https://img.shields.io/packagist/dt/mlevent/fatura?style=plastic\"/\u003e\n\u003cimg src=\"https://img.shields.io/github/stars/mlevent/fatura?style=plastic\"/\u003e\n\u003cimg src=\"https://img.shields.io/github/forks/mlevent/fatura?style=plastic\"/\u003e\n\u003c/p\u003e\n\n![Fatura](https://i.imgur.com/RzZTuev.png)\n\n## Başlarken\n\nBu paket GİB'e tabi şahıs şirketi ya da şirket hesapları ile çalışır ve bu kişiler adına resmi fatura/makbuz oluşturur. GİB e-Arşiv portala tarayıcınızdan giriş yapmak için aşağıdaki linkleri kullanabilirsiniz;\n\n- https://earsivportaltest.efatura.gov.tr/login.jsp\n- https://earsivportal.efatura.gov.tr/intragiris.html\n\n\u003e Kullanıcı kodu ve parola bilgilerini muhasebecinizden ya da GİB - İnteraktif Vergi Dairesi'nden edinebilirsiniz.\n\nFatih Kadir Akın'ın [fatura.js](https://github.com/f/fatura/) paketinden faydalanılmıştır.\n\n## Kurulum\n\n🛠️ Paketi composer ile projenize dahil edin;\n\n```bash\ncomposer require mlevent/fatura\n```\n\n## 🎉 Özellikler\n\n- [Api Bağlantısı](#api-bağlantısı)\n- [Belge Oluşturma](#belge-oluşturma)\n  - [e-Fatura](#e-fatura)\n    - [Satış](#satış)\n    - [İade](#i̇ade)\n    - [Tevkifat](#tevkifat)\n    - [İstisna](#i̇stisna)\n    - [Özel Matrah](#özel-matrah)\n  - [e-Müstahsil](#e-müstahsil)\n  - [e-SMM](#e-smm)\n- [Belge Güncelleme](#belge-günceleme)\n- [Belge Silme](#belge-silme)\n- [Belge İmzalama](#belge-i̇mzalama)\n  - [Sms ile İmzalama](#sms-ile-i̇mzalama)\n- [Belge Listeleme](#belge-listeleme)\n  - [Düzenlenen Belgeler](#düzenlenen-belgeler)\n  - [Adıma Düzenlenen Belgeler](#adıma-düzenlenen-belgeler)\n  - [Belge Detayları](#belge-detayları)\n  - [HTML Çıktı Alma](#html-çıktı-alma)\n  - [Belge İndirme Adresi](#belge-i̇ndirme-adresi)\n  - [Belgeyi Sunucuya Kaydetme](#belgeyi-sunucuya-kaydetme)\n- [Vergiler](#vergi-ekleme)\n  - [Vergi Ekleme](#vergi-ekleme)\n  - [Vergi Listesi](#vergi-listesi)\n  - [Vergiler ve Toplamlar](#vergiler-ve-toplamlar)\n- [İptal/İtiraz Talepleri](#i̇ptali̇tiraz-talepleri)\n- [GİB Profil Bilgileri](#gi̇b-profil-bilgileri)\n- [Mükellef Sorgulama](#mükellef-bilgileri)\n- [Birimler](#birimler)\n\n## 🔗Api Bağlantısı\n\n### Test Kullanıcısı\n\ne-Arşiv portal üzerinden yeni bir test kullanıcısı oluşturmak ve token almak için;\n\n```php\nuse Mlevent\\Fatura\\Gib;\n\n$gib = (new Gib)-\u003esetTestCredentials()\n                -\u003elogin();\n\necho $gib-\u003egetToken();\n```\n\nToken ve kullanıcı bilgilerine ulaşmak için;\n\n```php\nprint_r($gib-\u003egetToken());\nprint_r($gib-\u003egetCredentials());\n```\n\n### Gerçek Kullanıcı\n\ne-Arşiv portal kullanıcı bilgilerinizi `setCredentials` metodunu kullanarak tanımlayabilirsiniz.\n\n```php\nuse Mlevent\\Fatura\\Gib;\n\n$gib = (new Gib)-\u003esetCredentials('Kullanıcı Kodu', 'Parola')\n                -\u003elogin();\n\necho $gib-\u003egetToken();\n```\n\nBilgilerinizi doğrudan `login` metoduyla da tanımlayabilirsiniz.\n\n```php\n$gib-\u003elogin('Kullanıcı Kodu', 'Parola')\n```\n\n\u003e Not: Token değerini herhangi bir yerde kullanmanız gerekmeyecek.\n\n### Oturum Sonlandırma\n\nHerhangi bir kısıtlama veya oturum sorunu yaşamamak adına, işlemlerden sonra oturumu sonlandırabilir ya da `setToken` yöntemini kullanabilirsiniz.\n\n```php\n$gib-\u003elogout();\n```\n\nBir kez token aldıktan sonra token süresi sonlanana kadar login/logout olmadan da işlem yapılabilir.\n\n```php\n$gib-\u003esetToken('f72b59eac1366d3115d80fa9dc971fc05daa7aaeea2c4715efce537c6d052e0cf0cdcd28db2f5928bf35d9590f6143f8e58bda5a5fb15ab67964905a4363daf0');\n```\n\n\u003e Token süresi sonlandığında yeni token alınmalıdır.\n\n## 📃Belge Oluşturma\n\nModel kullanırken named arguments (adlandırılmış değişkenler) veya dizilerle çalışabilirsiniz. Oluşturulan belgeler, daha sonra imzalanmak üzere e-Arşiv portalda taslaklara kaydedilir.\n\n\u003e `faturaUuid` ve `belgeNumarasi` belirtildiyse; portalda bu bilgilerle eşleşen belge güncellenir, diğer durumda portal üzerinde yeni bir belge oluşturulur. [Belge Güncelleme](#belge-günceleme) sayfasını kontrol edin.\n\n## e-Fatura\n\nKütüphaneyi kullanarak aşağıdaki fatura türleri ile çalışabilirsiniz;\n\n- Satış\n- İade\n- Tevkifat\n- İstisna\n- Özel Matrah\n\n\u003e Döviz cinsinden fatura düzenlemek için modelde `paraBirimi` ve `dovizKuru` parametreleri kullanılmalıdır.\n\nBelge oluştururken model kullanmak istemiyorsanız `/examples` klasörü altındaki [createInvoiceWithoutModel.php](https://github.com/mlevent/fatura/blob/master/examples/createInvoiceWithoutModel.php) dosyasındaki örneği inceleyebilirsiniz.\n\n### Satış\n\nSatış faturası oluşturabilmek için, **faturaTipi** `InvoiceType::Satis` gönderilmelidir.\n\n```php\nuse Mlevent\\Fatura\\Enums\\Currency;\nuse Mlevent\\Fatura\\Enums\\InvoiceType;\nuse Mlevent\\Fatura\\Enums\\Unit;\nuse Mlevent\\Fatura\\Gib;\nuse Mlevent\\Fatura\\Models\\InvoiceModel;\nuse Mlevent\\Fatura\\Models\\InvoiceItemModel;\n\n// Fatura detayları\n$invoice = new InvoiceModel(\n    tarih            : '20/10/2022',       // ☑️ Opsiyonel @string      @default=(dd/mm/yyyy)\n    saat             : '23:50:48',         // ☑️ Opsiyonel @string      @default=(hh/mm/ss)\n    paraBirimi       : Currency::USD,      // ☑️ Opsiyonel @Currency    @default=Currency::TRY\n    dovizKuru        : 18.56,              // ☑️ Opsiyonel @float       @default=0\n    faturaTipi       : InvoiceType::Satis, // ☑️ Opsiyonel @InvoiceType @default=InvoiceType::Satis\n    vknTckn          : '11111111111',      // ✴️ Zorunlu   @string\n    vergiDairesi     : '',                 // ✅ Opsiyonel @string\n    aliciUnvan       : '',                 // ✅ Opsiyonel @string\n    aliciAdi         : 'Mert',             // ✴️ Zorunlu   @string\n    aliciSoyadi      : 'Levent',           // ✴️ Zorunlu   @string\n    mahalleSemtIlce  : 'Nilüfer',          // ✴️ Zorunlu   @string\n    sehir            : 'Bursa',            // ✴️ Zorunlu   @string\n    ulke             : 'Türkiye',          // ✴️ Zorunlu   @string\n    adres            : '',                 // ✅ Opsiyonel @string\n    siparisNumarasi  : '',                 // ✅ Opsiyonel @string\n    siparisTarihi    : '',                 // ✅ Opsiyonel @string\n    irsaliyeNumarasi : '',                 // ✅ Opsiyonel @string\n    irsaliyeTarihi   : '',                 // ✅ Opsiyonel @string\n    fisNo            : '',                 // ✅ Opsiyonel @string\n    fisTarihi        : '',                 // ✅ Opsiyonel @string\n    fisSaati         : '',                 // ✅ Opsiyonel @string\n    fisTipi          : '',                 // ✅ Opsiyonel @string\n    zRaporNo         : '',                 // ✅ Opsiyonel @string\n    okcSeriNo        : '',                 // ✅ Opsiyonel @string\n    binaAdi          : '',                 // ✅ Opsiyonel @string\n    binaNo           : '',                 // ✅ Opsiyonel @string\n    kapiNo           : '',                 // ✅ Opsiyonel @string\n    kasabaKoy        : '',                 // ✅ Opsiyonel @string\n    postaKodu        : '',                 // ✅ Opsiyonel @string\n    tel              : '',                 // ✅ Opsiyonel @string\n    fax              : '',                 // ✅ Opsiyonel @string\n    eposta           : '',                 // ✅ Opsiyonel @string\n    not              : '',                 // ✅ Opsiyonel @string\n);\n\n// Ürün/Hizmetler\n$invoice-\u003eaddItem(\n    new InvoiceItemModel(\n        malHizmet     : 'Çimento',  // ✴️ Zorunlu   @string\n        miktar        : 3,          // ✴️ Zorunlu   @float\n        birim         : Unit::M3,   // ☑️ Opsiyonel @Unit @default=Unit::Adet\n        birimFiyat    : 1259,       // ✴️ Zorunlu   @float\n        kdvOrani      : 18,         // ✴️ Zorunlu   @float\n        iskontoOrani  : 25,         // ✅ Opsiyonel @float\n        iskontoTipi   : 'Arttırım', // ☑️ Opsiyonel @string @default=İskonto\n        iskontoNedeni : '',         // ✅ Opsiyonel @string\n    )\n);\n\n$gib = (new Gib)-\u003elogin('333333054', '******');\n\nif ($gib-\u003ecreateDraft($invoice)) {\n    echo $invoice-\u003egetUuid(); // 04e17398-468d-11ed-b3cb-4ccc6ae28384\n}\n\n$gib-\u003elogout();\n```\n\n### İade\n\nİade faturası oluşturabilmek için, **faturaTipi** `InvoiceType::Iade` gönderilmeli; iadeye konu faturalar **addReturnItem** metoduyla faturaya eklenmelidir.\n\n```php\n// Fatura detayları\n$invoice = new InvoiceModel(\n    faturaTipi: InvoiceType::Iade,\n    ...\n);\n\n// İade faturası için iadeye konu faturalar\n$invoice-\u003eaddReturnItem(\n    new InvoiceReturnItemModel(\n        faturaNo        : 'GIB2022000001416',\n        duzenlenmeTarihi: '31/12/2022'\n    )\n);\n```\n\n### Tevkifat\n\nTevkifatlı fatura oluşturabilmek için, **faturaTipi** `InvoiceType::Tevkifat` gönderilmelidir.\n\n```php\n// Fatura detayları\n$invoice = new InvoiceModel(\n    faturaTipi: InvoiceType::Tevkifat,\n    ...\n);\n\n// Ürün/Hizmetler\n$invoice-\u003eaddItem(\n    new InvoiceItemModel(\n        tevkifatKodu: 613, // 613 - Çevre, Bahçe ve Bakım Hizmetleri [KDVGUT-(I/C-2.1.3.2.11)]\n        ...\n    )\n);\n```\n\nTevkifat kodlarına ait liste çıktısını almak için;\n\n```php\nprint_r(Tax::KDVTevkifat-\u003ecodes());\n\nArray\n(\n    [601] =\u003e Array\n        (\n            [rate] =\u003e 40\n            [name] =\u003e Yapım İşleri ile Bu İşlerle Birlikte İfa Edilen Mühendislik-Mimarlık ve Etüt-Proje Hizmetleri [KDVGUT-(I/C-2.1.3.2.1)]\n        )\n    ...\n```\n\n### İstisna\n\nİstisna fatura oluşturabilmek için, **faturaTipi** `InvoiceType::Istisna` gönderilmeli; 12 haneli **gtip** kodu faturaya ait ürün/hizmet eklenirken belirtilebilir.\n\n```php\n// Fatura detayları\n$invoice = new InvoiceModel(\n    faturaTipi: InvoiceType::Istisna,\n    ...\n);\n\n// Ürün/Hizmetler\n$invoice-\u003eaddItem(\n    new InvoiceItemModel(\n        gtip: '080810100000',\n        ...\n    )\n);\n```\n\n### Özel Matrah\n\nÖzel matrah fatura oluşturabilmek için, **faturaTipi** `InvoiceType::OzelMatrah` gönderilmeli; faturaya ait ürün/hizmet eklenirken **ozelMatrahNedeni** ve **ozelMatrahTutari** belirtilmelidir.\n\n```php\n// Fatura detayları\n$invoice = new InvoiceModel(\n    faturaTipi: InvoiceType::OzelMatrah,\n    ...\n);\n\n// Ürün/Hizmetler\n$invoice-\u003eaddItem(\n    new InvoiceItemModel(\n        ...\n        ozelMatrahNedeni: 805, // 805 - Altından Mamül veya Altın İçeren Ziynet Eşyaları İle Sikke Altınların Teslimi\n        ozelMatrahTutari: 1250,\n    )\n);\n```\n\nÖzel matrah nedenlerine ait liste çıktısını almak için;\n\n```php\nprint_r(InvoiceType::OzelMatrah-\u003ereasons());\n\nArray\n(\n    [801] =\u003e Milli Piyango, Spor Toto vb. Oyunlar\n    [802] =\u003e At yarışları ve diğer müşterek bahis ve talih oyunları\n    [803] =\u003e Profesyonel Sanatçıların Yer Aldığı Gösteriler, Konserler, Profesyonel Sporcuların Katıldığı Sportif Faaliyetler, Maçlar, Yarışlar ve Yarışmalar\n    ...\n)\n```\n\n## e-Müstahsil\n\nMüstahsil makbuzu ile çalışılacaksa, Gib sınıfı başlatılırken `DocumentType::ProducerReceipt` başlangıç parametresi olarak gönderilmelidir.\n\n```php\nuse Mlevent\\Fatura\\Enums\\Unit;\nuse Mlevent\\Fatura\\Gib;\nuse Mlevent\\Fatura\\Models\\ProducerReceiptModel;\nuse Mlevent\\Fatura\\Models\\ProducerReceiptItemModel;\n\n// Müstahsil Makbuzu Detayları\n$producerReceipt = new ProducerReceiptModel(\n    tarih       : '20/10/2022',  // ☑️ Opsiyonel @string @default=(dd/mm/yyyy)\n    saat        : '23:50:48',    // ☑️ Opsiyonel @string @default=(hh/mm/ss)\n    vknTckn     : '11111111111', // ✴️ Zorunlu   @string\n    aliciAdi    : 'Walter',      // ✴️ Zorunlu   @string\n    aliciSoyadi : 'Bishop',      // ✴️ Zorunlu   @string\n    sehir       : '',            // ✅ Opsiyonel @string\n    websitesi   : '',            // ✅ Opsiyonel @string\n    not         : '',            // ✅ Opsiyonel @string\n    teslimTarihi: '',            // ✅ Opsiyonel @string\n);\n\n// Ürün/Hizmetler\n$producerReceipt-\u003eaddItem(\n    new ProducerReceiptItemModel(\n        malHizmet    : 'Yazılım Hizmeti', // ✴️ Zorunlu @string\n        miktar       : 3,                 // ✴️ Zorunlu @float\n        birim        : Unit::Saat,        // ✴️ Zorunlu @Unit\n        birimFiyat   : 100,               // ✴️ Zorunlu @float\n        gvStopajOrani: 20                 // ✴️ Zorunlu @int\n    )\n);\n\n$service = (new Gib(DocumentType::ProducerReceipt))-\u003elogin('333333054', '******');\n\nif ($service-\u003ecreateDraft($producerReceipt)) {\n    echo $producerReceipt-\u003egetUuid(); // 04e17398-468d-11ed-b3cb-4ccc6ae28384\n}\n\n$service-\u003elogout();\n```\n\n## e-SMM\n\nSerbest meslek makbuzu ile çalışılacaksa, Gib sınıfı başlatılırken `DocumentType::SelfEmployedReceipt` başlangıç parametresi olarak gönderilmelidir.\n\n```php\nuse Mlevent\\Fatura\\Enums\\Unit;\nuse Mlevent\\Fatura\\Gib;\nuse Mlevent\\Fatura\\Models\\SelfEmployedReceiptModel;\nuse Mlevent\\Fatura\\Models\\SelfEmployedReceiptItemModel;\n\n// Serbest Meslek Makbuzu\n$selfEmployedReceipt = new SelfEmployedReceiptModel(\n    tarih          : '20/10/2022',  // ☑️ Opsiyonel @string   @default=(dd/mm/yyyy)\n    saat           : '14:25:34',    // ☑️ Opsiyonel @string   @default=(hh/mm/ss)\n    paraBirimi     : Currency::USD, // ☑️ Opsiyonel @Currency @default=Currency::TRY\n    dovizKuru      : 18.56,         // ☑️ Opsiyonel @float    @default=0\n    vknTckn        : '11111111111', // ✴️ Zorunlu   @string\n    aliciAdi       : 'Walter',      // ✴️ Zorunlu   @string\n    aliciSoyadi    : 'Bishop',      // ✴️ Zorunlu   @string\n    aliciUnvan     : '',            // ✅ Opsiyonel @string\n    adres          : '',            // ✅ Opsiyonel @string\n    binaAdi        : '',            // ✅ Opsiyonel @string\n    binaNo         : '',            // ✅ Opsiyonel @string\n    kapiNo         : '',            // ✅ Opsiyonel @string\n    kasabaKoy      : '',            // ✅ Opsiyonel @string\n    mahalleSemtIlce: '',            // ✅ Opsiyonel @string\n    sehir          : '',            // ✅ Opsiyonel @string\n    postaKodu      : '',            // ✅ Opsiyonel @string\n    ulke           : 'Türkiye',     // ✴️ Zorunlu   @string\n    vergiDairesi   : '',            // ✅ Opsiyonel @string\n    aciklama       : '',            // ✅ Opsiyonel @string\n    kdvTahakkukIcin: false,         // ☑️ Opsiyonel @boolean  @default=false\n);\n\n$selfEmployedReceipt-\u003eaddItem(\n    new SelfEmployedReceiptItemModel(\n        neIcinAlindigi  : 'Dava Vekilliği', // ✴️ Zorunlu   @string\n        brutUcret       : 100,              // ✴️ Zorunlu   @float\n        kdvOrani        : 18,               // ✴️ Zorunlu   @float\n        gvStopajOrani   : 0,                // ✅ Opsiyonel @int\n        kdvTevkifatOrani: 0,                // ✅ Opsiyonel @int\n    )\n);\n\n$service = (new Gib(DocumentType::SelfEmployedReceipt))-\u003elogin('333333054', '******');\n\nif ($service-\u003ecreateDraft($producerReceipt)) {\n    echo $producerReceipt-\u003egetUuid(); // 04e17398-468d-11ed-b3cb-4ccc6ae28384\n}\n\n$service-\u003elogout();\n```\n\n## Not Ekleme\n\nBelgelere not eklemek için, `setNote` metodunu kullanabilirsiniz. Not eklenmemiş belgelere otomatik olarak, \"yazı ile toplam ödenecek tutar\" not olarak eklenir.\n\n```php\nuse Mlevent\\Fatura\\Models\\InvoiceModel;\nuse Mlevent\\Fatura\\Models\\InvoiceItemModel;\n\n$invoice = new InvoiceModel(...);\n\n$invoice-\u003eaddItem(\n    new InvoiceItemModel(...),\n    new InvoiceItemModel(...),\n);\n\n$invoice-\u003esetNote(number_to_words($invoice-\u003egetPaymentTotal())); // ALTI YÜZ OTUZ DÖRT TÜRK LİRASI ALTMIŞ BİR KURUŞ\n```\n\n## 💸Vergi Ekleme\n\nBelgedeki hizmetlere `addTax` metodunu kullanarak vergi ekleyebilirsiniz. Vergiler doğrudan belgeye eklenemez, yalnızca öğe modeli üzerinden her bir öğeye ayrı ayrı eklenebilir.\n\n```php\nuse Mlevent\\Fatura\\Enums\\Tax;\nuse Mlevent\\Fatura\\Models\\InvoiceItemModel;\n\n$invoiceItem = new InvoiceItemModel(\n    malHizmet  : 'Çimento',\n    birim      : Unit::Ton,\n    miktar     : 3,\n    birimFiyat : 1259,\n    kdvOrani   : 18,\n);\n\n// Hizmete vergi ekleme\n$invoiceItem-\u003eaddTax(Tax::Damga,    15)  // %15 damga vergisi\n            -\u003eaddTax(Tax::GVStopaj, 25); // %25 gelir vergisi\n\n// Vergi kodu kullanarak vergi ekleme\n$invoiceItem-\u003eaddTax(Tax::from(1047), 15); // %15 damga vergisi\n```\n\n### Vergi Listesi\n\nVergi listesine ulaşmak için `cases` statik metodunu kullanabilirsiniz;\n\n```php\nuse Mlevent\\Fatura\\Enums\\Tax;\n\n// Vergiler\nforeach (Tax::cases() as $tax) {\n    echo $tax-\u003evalue;   // 4071\n    echo $tax-\u003ename;    // ElkHavagazTuketim\n    echo $tax-\u003ealias(); // Elektrik Havagaz Tüketim Vergisi\n}\n```\n\n### Vergiler ve Toplamlar\n\nBelgeye eklenen öğelere ulaşmak için `getItems` metodunu kullanabilirsiniz;\n\n```php\nuse Mlevent\\Fatura\\Models\\InvoiceModel;\nuse Mlevent\\Fatura\\Models\\InvoiceItemModel;\n\n$invoice = new InvoiceModel(...);\n\n$invoice-\u003eaddItem(\n    new InvoiceItemModel(...),\n    new InvoiceItemModel(...),\n);\n\n// Her bir öğeye ait vergiler\nforeach ($invoice-\u003egetItems() as $item) {\n\n    // Öğeye eklenen vergiler toplamı\n    print_r($item-\u003etotalTaxAmount());\n\n    // Öğeye eklenen vergilere ait kdv toplamı\n    print_r($item-\u003etotalTaxVat());\n\n    // Öğeye eklenen vergiler\n    print_r($item-\u003egetTaxes());\n\n    // Öğeye ait toplamlar\n    print_r($item-\u003egetTotals());\n}\n\n// Belgeye ait vergiler\nprint_r($invoice-\u003egetTaxes());\n\n// Belgeye ait toplamlar\nprint_r($invoice-\u003egetTotals());\n```\n\n## Belge Günceleme\n\nFatura oluşturulurken `faturaUuid` ve `belgeNumarasi` belirtildiyse; portalda bu bilgilerle eşleşen belge güncellenir, diğer durumda portal üzerinde yeni bir belge oluşturulur.\n\n```php\n// Fatura detayları\n$invoice = new InvoiceModel(\n    uuid          : '04e17398-468d-11ed-b3cb-4ccc6ae28384',\n    belgeNumarasi : 'GIB2022000000003',\n    ...\n);\n```\n\nBelgeleri güncellemek için bir diğer yöntem; önce düzenlenecek belgeyi getirmek ve daha sonra düzenlenecek alanlarla birlikte güncelleme isteği göndermektir. Örneğin oluşturulan faturada yalnızca alıcı bilgilerini güncellemek isteyebilirsiniz;\n\n```php\nuse Mlevent\\Fatura\\Gib;\nuse Mlevent\\Fatura\\Models\\InvoiceModel;\n\n$gib = (new Gib)-\u003elogin('333333054', '******');\n\n$invoice = InvoiceModel::importFromApi(\n    $gib-\u003egetDocument('c4e9e0a2-4788-11ed-bbd4-4ccc6ae28384')\n);\n\n$invoice-\u003ealiciAdi    = 'Nureddin';\n$invoice-\u003ealiciSoyadi = 'Nebati';\n$invoice-\u003eadres       = 'Bankalar Cd. Faiz Sk. No:128/A';\n\n// Faturayı güncelle\nif ($gib-\u003ecreateDraft($invoice)) {\n    echo $invoice-\u003egetUuid(); // c4e9e0a2-4788-11ed-bbd4-4ccc6ae28384\n}\n```\n\n\u003e `addItem` metodunun kullanılması durumunda içe aktarılmış öğeler silinecektir.\n\n## Belge Silme\n\nTaslak belgeleri silmek için `deleteDraft` metodu kullanılmalıdır. Metod bir dizi kabul eder. Gönderilecek dizi içerisinde silinecek belge veya belgelere ait `uuid` bilgisi bulunması gerekir.\n\nAşağıdaki örnek, bilinen bir tarih aralığındaki tüm taslak belgeleri siler.\n\n```php\n$fetchToDelete = $gib-\u003eselectColumn('ettn')\n                     -\u003eonlyUnsigned()\n                     -\u003egetAll('10/10/2022', '10/15/2022');\n\nif ($gib-\u003edeleteDraft($fetchToDelete)) {\n    echo \"{$gib-\u003erowCount()} adet belge silindi!\"; // x adet belge silindi\n}\n```\n\nBelirsiz bir tarih aralığındaki taslak belgeler silinmek isteniyorsa;\n\n```php\n$setToDelete = [\n    '90559052-8bd0-4f68-a733-12157cf53cfb',\n    '521ce2b1-290c-45fa-8312-d455672289ef',\n];\n\nif ($gib-\u003edeleteDraft($setToDelete)) {\n    echo \"{$gib-\u003erowCount()} adet belge silindi!\"; // 2 adet belge silindi\n}\n```\n\n## Belge İmzalama\n\n☢️ Belge imzalama, faturanın/makbuzun kesilmesi işlemidir ve vergi sisteminde mali veri oluşturur. Belge imzalandıktan sonra üzerinde değişiklik yapılamaz ve silinemez. Bu nedenle dikkatli kullanınız.\n\n### 📲SMS ile İmzalama\n\n\u003e SMS doğrulama işlemleri test hesaplarıyla gerçekleştirilemez.\n\nSMS doğrulamasına başlamak için `startSmsVerification` yöntemi kullanılmalıdır. Yöntem portalda kayıtlı gsm numarasına bir doğrulama kodu gönderecek ve imzalama işlemi için daha sonra kullanacağınız bir ID döndürecektir.\n\n```php\n$operationId = $gib-\u003estartSmsVerification();\n```\n\nDoğrulama işlemini tamamlamak için kullanılacak `completeSmsVerification` yöntemine; SMS ile gelen doğrulama kodu, SMS doğrulaması başlatılırken alınan Operasyon ID'si ve onaylanacak belgelere ait UUID değerlerinin bulunduğu bir dizi olmak üzere 3 farklı parametre gönderilmelidir.\n\n```php\n// Portaldan belirli bir tarih aralığındaki tüm onaysız belgeleri getir\n$setToSign = $gib-\u003eselectColumn('ettn')\n                 -\u003eonlyUnsigned()\n                 -\u003egetAll('01/10/2022', '15/10/2022');\n\n// Onaylanacak belgelere ait UUID'leri kendiniz de belirtebilirsiniz\n$setToSign = [\n    '2e989428-63ca-11ed-b617-4ccc6ae28384',\n    '54c5df01-038b-4e01-973d-cd31e4a547f3',\n];\n\n// Belgeleri onayla\nif ($gib-\u003ecompleteSmsVerification($smsCode, $operationId, $setToSign)) {\n    echo \"{$gib-\u003erowCount()} adet belge onaylandı!\"; // x adet belge onaylandı\n}\n```\n\n## Belge Listeleme\n\nOluşturulan taslak belgeleri, tarih aralığı belirtmek koşuluyla farklı şekillerde listeleyebilirsiniz.\n\n### Düzenlenen Belgeler\n\n```php\n$documents = $gib-\u003egetAll('01/09/2022', '15/09/2022');\n```\n\nBu örnek, aşağıdaki şu diziyi döndürecektir;\n\n```php\nArray\n(\n    [0] =\u003e Array\n        (\n            [belgeNumarasi] =\u003e GIB2022000000356\n            [aliciVknTckn] =\u003e 11111111111\n            [aliciUnvanAdSoyad] =\u003e Mert Levent\n            [belgeTarihi] =\u003e 09-10-2022\n            [belgeTuru] =\u003e FATURA\n            [onayDurumu] =\u003e Onaylanmadı\n            [ettn] =\u003e c4e9e0a2-4788-11ed-bbd4-4ccc6ae28384\n        )\n    ...\n)\n```\n\n### Adıma Düzenlenen Belgeler\n\n\u003e Bu metod artık stabil çalışmıyor gibi görünüyor. Belli bir tarihten sonra adınıza düzenlenmiş belgeler bir süredir GİB Portal'dan alınamıyor.\n\nİki tarih arasındaki gelen faturaları (GİB portaldaki adıyla Adıma Düzenlenen Belgeler) listeler.\n\n```php\n$documents = $gib-\u003egetAllIssuedToMe('01/09/2022', '15/09/2022');\n```\n\n### Belge Detayları\n\nPortal üzerinde kayıtlı belge detaylarına ulaşmak için;\n\n```php\n$gib-\u003egetDocument('6115993e-3e77-473c-8ea5-c24036b4106c');\n```\n\n### Oluşturulan Son Belge\n\nPortal üzerinde en son oluşturulan belgeye ait detaylara ulaşmak için;\n\n```php\n$gib-\u003egetLastDocument();\n```\n\n### HTML Çıktı Alma\n\nPortal üzerinde kayıtlı belgeye ait HTML çıktıya ulaşmak için;\n\n```php\n$gib-\u003egetHtml('1d78ef40-6491-11ed-a280-4ccc6ae28384');\n```\n\n### Belge İndirme Adresi\n\n\u003e Belge indirme adresine yalnızca token oluşturduğunuz IP adresi erişebilir. Token sunucuda oluşturulduysa, belgeyi indirmeye yarayan bu link yalnızca sunucuda çalışacaktır. Farklı bir IP adresinden erişilmesi durumunda `Oturum geçersiz, token yok` hatası dönecektir. Belgeyi sunucunuza indirmek için [saveToDisk](#belgeyi-sunucuya-kaydetme) metodonu kullanabilirsiniz. \n\nPortal üzerinde kayıtlı belgeye ait indirme adresine ulaşmak için;\n\n```php\n$gib-\u003egetDownloadURL('44ba5b87-81a3-4474-bd0f-27d771fb4064');\n```\n### Belgeyi Sunucuya Kaydetme\n\nPortal üzerinde kayıtlı belgeyi sunucuya kaydetmek için;\n\n```php\n$gib-\u003esaveToDisk('44ba5b87-81a3-4474-bd0f-27d771fb4064');\n```\n\n## Belge Filtreleme\n\n🔍 Kayıtları zincirleme metodlar kullanarak kolayca filtreleyebilirsiniz.\n\n```php\n$documents = $gib-\u003eonlyUnsigned()\n                 -\u003efindRecipientName('mehmet')\n                 -\u003egetAll('01/09/2022', '15/09/2022');\n```\n\n\u003e Alıcı adında `mehmet` ifadesi geçen imzalanmamış kayıtlar döner.\n\n---\n\n### Kullanılabilir Filtreleme Yöntemleri\n\n| Metod                       | Açıklama                                |\n| :-------------------------- | :-------------------------------------- |\n| `onlyInvoice()`             | Faturalar.                              |\n| `onlyProducerReceipt()`     | Müstahsil makbuzları.                   |\n| `onlySelfEmployedReceipt()` | Serbest meslek makbuzları.              |\n| `onlySigned()`              | İmzalanmış belgeler.                    |\n| `onlyUnSigned()`            | İmzalanmamış belgeler.                  |\n| `onlyDeleted()`             | Silinmiş belgeler.                      |\n| `findRecipientName($value)` | Alıcı adına göre filtreleme.            |\n| `findRecipientId($value)`   | Alıcı vergi numarasına göre filtreleme. |\n| `findDocumentId($value)`    | Belge numarasına göre filtreleme.       |\n| `findEttn($value)`          | Uuid numarasına göre filtreleme.        |\n| `setLimit($limit, $offset)` | Sonuçlar için limit belirleme.          |\n| `sortAsc()`                 | Önce ilk kayıtlar.                      |\n| `sortDesc()`                | (Varsayılan) Önce son kayıtlar.         |\n\n## İptal/İtiraz Talepleri\n\nGİB Portalda kayıtlı İptal/İtiraz taleplerine ulaşmak için `getRequests` metodunu kullanabilirsiniz. Sonuç bir dizi şeklinde döner.\n\n```php\n$requests = $gib-\u003egetRequests('07/12/2020', '07/11/2022');\n```\n\nYeni iptal/itiraz talebi oluşturmak için `objectionRequest` ve `cancellationRequest` metodlarını kullanabilirsiniz.\n\n```php\nuse Mlevent\\Fatura\\Enums\\ObjectionMethod;\nuse Mlevent\\Fatura\\Gib;\n\n// Portal Bağlantısı\n$gib = (new Gib)-\u003esetTestCredentials()\n                -\u003elogin();\n\n// İtiraz Talebi\n$gib-\u003eobjectionRequest(\n    objectionMethod : ObjectionMethod::Kep,\n    uuid            : '94d0d436-d91d-40c0-a238-e335f29b8275',\n    documentId      : 'GIB2020000000218',\n    documentDate    : '23/11/2020',\n    explanation     : 'Hatalı İşlem'\n);\n\n// İptal Talebi\n$gib-\u003ecancellationRequest(\n    uuid        : '94d0d436-d91d-40c0-a238-e335f29b8275',\n    explanation : 'Hatalı İşlem'\n);\n```\n\n## GİB Profil Bilgileri\n\nKayıtlı kullanıcı bilgilerine ulaşmak için `getUserData` metodunu kullanabilirsiniz. Sonuç bir dizi şeklinde döner.\n\n```php\n$userData = $gib-\u003egetUserData();\n```\n\nÖnce portaldan profil bilgilerini okuyup daha sonra modele import ederek yalnızca belirli alanları güncelleyebilirsiniz.\n\n```php\nuse Mlevent\\Fatura\\Gib;\nuse Mlevent\\Fatura\\Models\\UserDataModel;\n\n$gib = (new Gib)-\u003esetTestCredentials()\n                -\u003elogin();\n\n$userData = UserDataModel::import($gib-\u003egetUserData());\n\n$userData-\u003eapartmanAdi = 'Lale Apartmanı';\n$userData-\u003ekapiNo      = '12';\n\nif ($gib-\u003eupdateUserData($userData)) {\n    // Bilgileriniz başarıyla güncellendi.\n}\n```\n\n## Mükellef Sorgulama\n\nTC Kimlik Numarası ya da Vergi Numarası ile mükellef sorgulamaya yarar. Fatura oluşturma aşamasında vergi numarasının doğruluğunu sorgulamak için kullanılabilir. **Test ortamında sonuç boş döner.**\n\n```php\n$recipientData = $gib-\u003egetRecipientData('2920084496');\n```\n\nBu örnek, aşağıdaki şu diziyi döndürecektir;\n\n```php\nArray\n(\n    [unvan] =\u003e DENİZBANK ANONİM ŞİRKETİ\n    [adi] =\u003e\n    [soyadi] =\u003e\n    [vergiDairesi] =\u003e Büyük Mükellefler VD. BAŞKANLIĞI\n)\n```\n\n## Birimler\n\n[https://www.php.net/manual/en/language.types.enumerations.php](https://www.php.net/manual/en/language.types.enumerations.php) sayfasını kontrol edin.\n\n### Ürün/Hizmet Birimleri\n\n```php\nuse Mlevent\\Fatura\\Enums\\Unit;\n\nforeach (Unit::cases() as $unit) {\n    echo $unit-\u003ename;    // Dk\n    echo $unit-\u003evalue;   // D61\n    echo $unit-\u003ealias(); // Dakika\n}\n```\n\n### Vergi Birimleri\n\n```php\nuse Mlevent\\Fatura\\Enums\\Tax;\n\nforeach (Tax::cases() as $tax) {\n    echo $tax-\u003ename;    // BankaMuameleleri\n    echo $tax-\u003evalue;   // 0021\n    echo $tax-\u003ealias(); // Banka Muameleleri Vergisi\n}\n```\n\n### Para Birimleri\n\n```php\nuse Mlevent\\Fatura\\Enums\\Currency;\n\nforeach (Currency::cases() as $currency) {\n    echo $currency-\u003ename;    // TRY\n    echo $currency-\u003evalue;   // TRY\n    echo $currency-\u003ealias(); // Türk Lirası\n}\n```\n\n## 📧İletişim\n\nİletişim için ghergedan@gmail.com adresine e-posta gönderin.\n\n\u003ca href=\"https://www.buymeacoffee.com/mlevent\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" \u003e\u003c/a\u003e\n\n---\n\n☢️ Bu paket vergiye tabi olan mali veri oluşturur. Bu paket nedeniyle oluşabilecek sorunlardan bu paket sorumlu tutulamaz, risk kullanana aittir. Riskli görüyorsanız kullanmayınız.\n","funding_links":["https://www.buymeacoffee.com/mlevent"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlevent%2Ffatura","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmlevent%2Ffatura","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlevent%2Ffatura/lists"}