Código fuente para apigatewaycl.api_client.sii.vehiculos

#
# API Gateway: Cliente de API en Python.
# Copyright (C) API Gateway <https://www.apigateway.cl>
#
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la GNU Lesser General Public License (LGPL) publicada
# por la Fundación para el Software Libre, ya sea la versión 3 de la Licencia,
# o (a su elección) cualquier versión posterior de la misma.
#
# Este programa se distribuye con la esperanza de que sea útil, pero SIN
# GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
# PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la GNU Lesser General
# Public License (LGPL) para obtener una información más detallada.
#
# Debería haber recibido una copia de la GNU Lesser General Public License
# (LGPL) junto a este programa. En caso contrario, consulte
# <http://www.gnu.org/licenses/lgpl.html>.
#

"""
Módulo para tasación fiscal de vehículos del SII.

Para más información sobre la API, consulte la `documentación completa
de Vehículos <https://www.apigateway.cl/docs>`_.
"""

from __future__ import annotations

from typing import Any

from .. import ApiBase, ApiResponse


[documentos] class Vehiculos(ApiBase): """ Cliente para tasación fiscal de vehículos de la API. Recurso público — solo requiere el token de la plataforma, no credenciales de un contribuyente (`identificador`/`clave`). """
[documentos] def buscar( self, anio: int | None = None, anio_tasa: int | None = None, categoria: int | None = None, marca: int | None = None, modelo: str | None = None, tipo: int | None = None, version: str | None = None, ) -> ApiResponse[list[dict[str, Any]]]: """ Busca la tasación fiscal de un vehículo y su permiso de circulación. `categoria` y `tipo` son obligatorios: sin ellos la API responde `Debe especificar la categoría del vehículo.` o `Debe especificar el tipo de vehículo.`. Los IDs válidos se obtienen con `categorias_tipos()` y `categorias_marcas()`. Agregar `marca` y `anio` acota bastante el resultado. Respuesta (ejemplo):: { "data": [ { "anio": "2017", "anioTasa": "2020", "cara": 5, "cateId": "6", "cateName": "Liviano", "code": "SU2290241", "equi": 0, "haveFeatures": false, "...": "..." } ], "metadata": {"timestamp": "..."} } :param int anio: Año del vehículo. :param int anio_tasa: Año fiscal de la búsqueda (por defecto el año actual). :param int categoria: ID de categoría, obligatorio (1 = liviano). :param int marca: ID de la marca (ej. 229 = SUZUKI). :param str modelo: Modelo del vehículo. :param int tipo: ID del tipo de vehículo, obligatorio (6 = SUV). :param str version: Versión del vehículo. :return: Respuesta de la API, con `data` y `metadata`. En `data`, listado de vehículos que calzan con la búsqueda. :rtype: ApiResponse[list[dict[str, Any]]] """ # La API recibe los filtros como el cuerpo completo, no # anidados bajo una clave. Los que no se indiquen no se envían. filtros = { 'anio': anio, 'anio_tasa': anio_tasa, 'categoria': categoria, 'marca': marca, 'modelo': modelo, 'tipo': tipo, 'version': version, } body = { clave: valor for clave, valor in filtros.items() if valor is not None } response = self.client.post('/sii/vehiculos/tasacion/buscar', body) return self._json(response)
[documentos] def categorias_tipos( self, categoria: str ) -> ApiResponse[list[dict[str, Any]]]: """ Tipos de vehículos disponibles para una categoría. Respuesta (ejemplo):: { "data": [{"id": 37, "name": "Cabriolet"}], "metadata": {"timestamp": "..."} } :param str categoria: ID de categoría (`'1'` livianos, `'2'` pesados, `'3'` motos). :return: Respuesta de la API, con `data` y `metadata`. En `data`, listado de tipos (id, nombre). :rtype: ApiResponse[list[dict[str, Any]]] """ url = '/sii/vehiculos/categorias/tipos/%(categoria)s' % { 'categoria': categoria, } response = self.client.get(url) return self._json(response)
[documentos] def categorias_marcas( self, categoria: str ) -> ApiResponse[list[dict[str, Any]]]: """ Marcas de vehículos disponibles para una categoría. Respuesta (ejemplo):: { "data": [{"id": "1", "name": "ACADIAN"}], "metadata": {"timestamp": "..."} } :param str categoria: ID de categoría (`'1'` livianos, `'2'` pesados, `'3'` motos). :return: Respuesta de la API, con `data` y `metadata`. En `data`, listado de marcas (id, nombre). :rtype: ApiResponse[list[dict[str, Any]]] """ url = '/sii/vehiculos/categorias/marcas/%(categoria)s' % { 'categoria': categoria, } response = self.client.get(url) return self._json(response)
[documentos] def categorias_caracteristicas( self, categoria: str ) -> ApiResponse[list[dict[str, Any]]]: """ Características disponibles para una categoría de vehículo. Respuesta (ejemplo):: { "data": [ { "id": 1, "name": "Combustible", "data": [{"id": "2", "name": "Bencina"}] } ], "metadata": {"timestamp": "..."} } :param str categoria: ID de categoría (`'1'` livianos, `'2'` pesados, `'3'` motos). :return: Respuesta de la API, con `data` y `metadata`. En `data`, listado de características, con sus valores posibles. :rtype: ApiResponse[list[dict[str, Any]]] """ url = '/sii/vehiculos/categorias/caracteristicas/%(categoria)s' % { 'categoria': categoria, } response = self.client.get(url) return self._json(response)