Otomasi untuk wiraswasta: cara mengintegrasikan pajak dengan proyek TI

Pada 1 Januari 2019, sebuah undang-undang disahkan untuk empat entitas konstituen Federasi Rusia (Moskow, Moskow dan wilayah Kaluga, serta Republik Tatarstan), yang memperkenalkan Pajak Profesional (NAP) baru sebagai proyek percontohan. Singkatnya, tugas utamanya adalah menyelamatkan angka-angka profesional dari semua kesulitan bisnis kecil: pajak 6% (dalam kasus pengusaha swasta), kontribusi pensiun wajib, yang jumlahnya setiap tahun hanya untuk satu orang yang mendekati tanda 50 ribu rubel, pengembalian pajak. Dengan demikian, negara mendukung usaha kecil dengan memberikan pajak rendah kepada pengusaha baru (4% untuk pendapatan dari individu dan 6% untuk badan hukum). Jika Anda ingin lebih detail, Anda dapat melihat informasi terperinci di Internet.

Bahkan individu yang bekerja di bidang IT berhak menggunakan NAP. Bagaimana ini bisa membantu? Misalnya, Anda telah mengembangkan layanan yang berfungsi di Internet, Anda ingin menerima pembayaran. Anda tidak harus mendaftarkan badan hukum demi kegiatan kewirausahaan tersebut dan menyelesaikan banyak masalah sejak awal. Cukup untuk mendaftar sebagai wiraswasta dan, secara bersyarat, palu secara manual di setiap layanan atau produk. Pada saat itu, pengembang layanan berpikir: "Bisakah proses ini otomatis?" Dan jawabannya di sini adalah "Tentu saja kamu bisa!" Sebenarnya, artikel ini memberi tahu Anda cara melakukannya.
Catatan penting: penulis artikel menggunakan pengetahuan yang didapat sebagai hasil mempelajari aplikasi hanya untuk otomatisasi rutin yang baik. Ia menginginkan motif yang sama untuk Anda.

Langkah 1. Identifikasi lalu lintas HTTP


Di sini Anda akan memerlukan aplikasi wajib pajak resmi "Pajak saya". Anda dapat mengunduhnya melalui Google Play.

Untuk artikel ini, cukup untuk menentukan sourceDeviceId (saya menduga ini sama dengan android id) dan refreshToken, akan tetapi, Anda dapat menjelajahi sepenuhnya semua metode API yang diusulkan oleh aplikasi untuk studi. Untuk menentukannya, Anda harus menerima permintaan HTTPS dari smartphone. Untuk perangkat stok tanpa hak root, Anda dapat menggunakan komputer, Fiddler program gratis. Untuk memahami pekerjaan program, saya menggunakan panduan yang tidak cukup mutakhir, namun cukup untuk mencegat lalu lintas https ponsel cerdas dan menampilkan aplikasi di layar komputer.

Setelah menginstal semua yang Anda butuhkan untuk mendaftar sebagai wajib pajak dan menutup aplikasi. Kemudian aktifkan program Fiddler, buat koneksi proxy di ponsel cerdas Anda dan mulai aplikasi lagi. Aplikasi akan membuat permintaan otorisasi dengan token penyegaran, yang pada saat artikel ini dibuat dengan durasi yang tidak terbatas:

gambar

Seperti yang dapat Anda lihat di tangkapan layar, aplikasi memiliki domain dasar lknpd.nalog.ru (subdomain situs web layanan pajak Rusia) dan API versi 1. Otorisasi untuk metode ini digunakan oleh Bearer, token untuk itu dihasilkan melalui metode / auth / token. Data dari field permintaan sourceDeviceId dan refreshToken sangat diperlukan untuk Anda. Saya memeriksa pekerjaan refreshToken 3 hari setelah percobaan - itu berhasil, oleh karena itu, Anda dapat dengan aman mengambil token selama 1 jam, jelas memiliki satu refreshToken yang sebenarnya.

Metode pengiriman paket itu sendiri terlihat seperti ini dan memiliki semua bidang yang diperlukan:

gambar

Harap dicatat bahwa semua bidang wajib diisi. Bidang layanan dapat membuat Anda ingin mengirim beberapa layanan dalam array, namun, hanya layanan pertama yang akan ditampilkan pada cek, meskipun biaya akhir akan penuh. Namun, layanan ini agak lembab, dan baru saja diluncurkan, kami tidak akan memikirkan hal ini (meskipun memalukan, pada kenyataannya, beberapa posisi terkadang diperlukan).

Anda juga harus memperhatikan jawabannya: disetujuiReceiptUuid: bidang berisi kode cek unik, yang tanpa kesulitan dapat diperoleh dengan TIN dan UUID dari cek tersebut.

Langkah 2. Pengembangan Skrip


Untuk mendemonstrasikan konsep otomatisasi dengan cepat, Python 3.7.2 digunakan dengan pustaka permintaan:

import requests import datetime import shutil TIME_OFFSET = '+03:00' DEVICE_ID = '' REFRESH_TOKEN = '' API_PROVIDER = 'https://lknpd.nalog.ru/api/v1/' TOKEN = '' INN = '' def DO(method, params): headers = {"Authorization":"Bearer "+TOKEN} if TOKEN != '' else {} r = requests.post(API_PROVIDER+method, json=params, headers=headers) print(r.text) return r.json() def get_token(): reqparam = { "deviceInfo": { "appVersion": "1.0.0", "metaDetails": { "browser": "", "browserVersion": "", "os": "android" }, "sourceDeviceId": DEVICE_ID, "sourceType": "android" }, "refreshToken": REFRESH_TOKEN } res = DO('auth/token', reqparam) # TODO:  tokenExpireIn       return res['token'] # TODO:    TOKEN = get_token() def new_transaction(service, amount): trans_time = datetime.datetime.now().isoformat()[:-3]+TIME_OFFSET reqparam = { "ignoreMaxTotalIncomeRestriction": False, "operationTime": trans_time, "paymentType": "CASH", "requestTime": trans_time, "services": [ { "amount": amount, "name": service, "quantity": 1 } ], "totalAmount": amount } res = DO('income', reqparam) return res['approvedReceiptUuid'] def get_receipt(receipt_uuid): headers = {"Authorization":"Bearer "+TOKEN} r = requests.get( 'https://lknpd.nalog.ru/api/v1/receipt/'+INN+"/"+receipt_uuid+"/print", stream=True, headers=headers ) with open('receipt.png', 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) if __name__ == '__main__': rec = new_transaction(' ', '1.00') get_receipt(rec) 

Ganti nilai yang diperlukan - skrip akan berfungsi sebagaimana mestinya. Anda dapat menambahkan penangan kesalahan dan meningkatkan pengiriman - skrip di atas hanya menunjukkan prinsip kerja dengan NAP API pajak.
Catatan Mungkin di masa depan pajak akan menerbitkan API, tetapi sekarang tidak melakukannya hanya karena sedikit orang yang membutuhkannya. Karena itu, bisnis ini ditunda hingga nanti. Namun, saya segera mencatat bahwa jika panduan resmi diterbitkan, itu akan memiliki informasi yang sama atau sedikit membaik, dalam hal otorisasi, pasti.

UPD: Saya menemukan dokumentasi tentang otomatisasi, yang ditulis ... rasanya seperti seorang deputi dengan tangan: sangat canggih dan tidak terstruktur. Akan ada waktu - Saya akan menulis artikel yang layak tentang otomatisasi melalui API resmi. Spoiler: semuanya hampir sama di sana yang kami pelajari melalui lalu lintas, hanya metode resmi dengan permintaan email dan kesulitan lainnya yang dijelaskan.


Kesimpulan


Sebagai kesimpulan, saya ingin mencatat: jangan ulangi ini di rumah tidak ada yang mustahil. Bahkan hal rutin seperti itu dapat dengan mudah diotomatisasi. Salin kode, modifikasi dengan cara Anda sendiri. Mungkin kemudian saya akan mengimplementasikan perpustakaan sehingga otomasi jauh lebih mudah diakses oleh semua orang. Saya menantikan kritik objektif Anda dan terus menggali ke arah API. Tujuan saya berikutnya adalah mengidealkan prinsip otorisasi dan membuat perpustakaan untuk Python.

Source: https://habr.com/ru/post/id436656/


All Articles