Automatización para los autónomos: cómo integrar los impuestos con un proyecto de TI

El 1 de enero de 2019, se aprobó una ley para cuatro entidades constitutivas de la Federación de Rusia (regiones de Moscú, Moscú y Kaluga, así como la República de Tatarstán), introduciendo un nuevo Impuesto Profesional (NAP) como un proyecto piloto. En resumen, su tarea principal es salvar a las figuras profesionales de todas las dificultades de las pequeñas empresas: 6% de impuestos (en el caso de empresarios privados), contribuciones obligatorias de pensión, cuyo monto cada año solo para una persona se acerca a la marca de 50 mil rublos, declaración de impuestos. Por lo tanto, el estado apoya a las pequeñas empresas al proporcionar a los emprendedores de nueva creación un bajo impuesto (4% para los ingresos de las personas y 6% para las entidades legales). Si desea más detalles, puede ver información detallada en Internet.

Incluso las personas que trabajan en el campo de TI tienen derecho a usar NAP. ¿Cómo puede ayudar esto? Por ejemplo, si ha desarrollado un servicio que funciona en Internet, desea aceptar pagos. No tiene que registrar una entidad legal por el bien de dicha actividad empresarial y resolver un montón de problemas desde el principio. Es suficiente registrarse como autónomo y, en libertad condicional, martillar manualmente en cada servicio o producto. En ese mismo momento, el desarrollador del servicio piensa: "¿Se puede automatizar este proceso?" Y la respuesta aquí es "¡Por supuesto que puedes!" El artículo, de hecho, es para decirte cómo hacerlo.
Nota importante: el autor del artículo utiliza los conocimientos adquiridos como resultado del estudio de la aplicación solo para bien: la automatización de la rutina. Él quiere los mismos motivos para ti.

Paso 1. Identificar el tráfico HTTP


Aquí necesitará la aplicación oficial del contribuyente "Mi impuesto". Puedes descargarlo a través de Google Play.

Para este artículo, será suficiente determinar sourceDeviceId (sospecho que esto es lo mismo que el ID de Android) y refreshToken, sin embargo, puede explorar absolutamente todos los métodos API propuestos por la aplicación para su estudio. Para determinarlo, debe recibir solicitudes HTTPS desde el teléfono inteligente. Para un dispositivo estándar sin derechos de root, puede usar una computadora, el programa gratuito Fiddler. Para comprender el trabajo del programa, utilicé una guía no muy actualizada, sin embargo, fue suficiente para interceptar el tráfico https del teléfono inteligente y mostrar la aplicación en la pantalla de la computadora.

Después de instalar todo lo que necesita para registrarse como contribuyente y cerrar la aplicación. Luego active el programa Fiddler, establezca una conexión proxy en su teléfono inteligente y vuelva a iniciar la aplicación. La aplicación realizará una solicitud de autorización con un token de actualización, que en el momento de este artículo se crea con una duración ilimitada:

imagen

Como puede ver en la captura de pantalla, la aplicación tiene el dominio base lknpd.nalog.ru (subdominio del sitio web del servicio de impuestos ruso) y la versión de API 1. La autorización para los métodos es utilizada por Bearer, el token se genera a través del método / auth / token. Los datos de los campos de solicitud sourceDeviceId y refreshToken son extremadamente necesarios para usted. Verifiqué el trabajo de refreshToken 3 días después del experimento; funciona, por lo tanto, puede tomar el token de forma segura durante 1 hora, obviamente teniendo un refresco real.

El método de envío de paquetes en sí tiene este aspecto y tiene todos los campos necesarios:

imagen

Tenga en cuenta que todos los campos son obligatorios. El campo de servicios puede hacer que desee enviar varios servicios en la matriz, sin embargo, solo se mostrará el primer servicio en el cheque, aunque el costo final estará completo. Aún así, el servicio es bastante húmedo, y se lanzó recientemente, no nos detendremos en esto (aunque es una pena, de hecho, a veces son necesarias varias posiciones).

También debe prestar atención a la respuesta: certifiedReceiptUuid: el campo contiene un código de verificación único, que sin ningún problema puede obtenerlo con su TIN y UUID de la verificación.

Paso 2. Desarrollo de guiones


Para demostrar rápidamente el concepto de automatización, Python 3.7.2 se usa con la biblioteca de solicitudes:

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) 

Sustituya los valores requeridos: el script funcionará como debería. Puede agregar controladores de errores y mejorar la entrega: la secuencia de comandos anterior solo muestra el principio de trabajo con el NAP de API de impuestos.
Nota Quizás en el futuro el impuesto publique la API, pero ahora no lo hace solo porque pocas personas lo necesitan. Por lo tanto, este negocio se pospone hasta más tarde. Sin embargo, me apresuro a señalar que si se publica la guía oficial, tendrá información similar o mejorará ligeramente, en términos de autorización, seguro.

UPD: Encontré documentación sobre automatización, que está escrita ... se siente como un diputado a mano: muy sofisticado y no estructurado. Ya habrá tiempo: escribiré un artículo decente sobre automatización a través de la API oficial. Spoiler: allí todo es casi lo mismo que aprendimos a través del tráfico, solo se describen los métodos oficiales con solicitudes de correo electrónico y otras dificultades.


Conclusión


En conclusión, quiero señalar: no repitas esto en casa, no hay nada imposible. Incluso una cosa tan rutinaria puede automatizarse fácilmente. Copie el código, modifíquelo a su manera. Quizás entonces implemente la biblioteca para que la automatización sea mucho más accesible para todos. Espero su crítica objetiva y continúo investigando la API. Mi próximo objetivo es idealizar el principio de autorización y crear una biblioteca para Python.

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


All Articles