- Added schemas, services, and routers for PROSEC, RCG2, Regulaciones, REIT, RequisitoPrevio, TLCS, and Vehiculos modules. - Each module includes search and get by ID functionalities. - Integrated FastAPI routers for each module into the main SITAR router. - Ensured proper response models using Pydantic for data validation.
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
"""TLCS Service"""
|
|
|
|
from typing import Optional, List
|
|
from ..common import SitarAPIBaseService
|
|
from .schemas import TLCSResponse
|
|
|
|
|
|
class TLCSService(SitarAPIBaseService):
|
|
"""Service for TLCS operations"""
|
|
|
|
_instance: Optional["TLCSService"] = None
|
|
|
|
@classmethod
|
|
def get_instance(cls) -> "TLCSService":
|
|
"""Get singleton instance"""
|
|
if cls._instance is None:
|
|
cls._instance = cls()
|
|
return cls._instance
|
|
|
|
async def search(
|
|
self,
|
|
fraccion: Optional[str] = None,
|
|
pais: Optional[str] = None,
|
|
nico: Optional[str] = None,
|
|
skip: int = 0,
|
|
limit: int = 100,
|
|
) -> List[TLCSResponse]:
|
|
"""
|
|
Search TLCS records
|
|
|
|
Args:
|
|
fraccion: Tariff fraction code
|
|
pais: Country code
|
|
nico: NICO code
|
|
skip: Records to skip
|
|
limit: Maximum records to return
|
|
|
|
Returns:
|
|
List of TLCS records
|
|
"""
|
|
params = {"skip": skip, "limit": min(limit, 1000)}
|
|
if fraccion:
|
|
params["fraccion"] = fraccion[:8]
|
|
if pais:
|
|
params["pais"] = pais
|
|
if nico:
|
|
params["nico"] = nico
|
|
|
|
data = await self._make_request("GET", "/api/v1/tlcs/", params=params)
|
|
return [TLCSResponse(**item) for item in data]
|
|
|
|
async def get_by_id(self, sysid: int, fraccion: str) -> TLCSResponse:
|
|
"""Get single TLCS record by SYSID and FRACCION"""
|
|
data = await self._make_request("GET", f"/api/v1/tlcs/{sysid}/{fraccion}")
|
|
return TLCSResponse(**data)
|